* Form.cs: Make the fix for #80775 windows-only (fixes #81957).
[mono.git] / mcs / gmcs / ChangeLog
1 2007-07-03  Marek Safar  <marek.safar@gmail.com>
2
3         * cs-parser.jay: Switch to ImplicitLambdaParameter.
4
5 2007-07-03  Marek Safar  <marek.safar@gmail.com>
6
7         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
8         members too.
9         
10         * linq.cs (QueryExpression.DoResolve): Resolve implicitly typed query
11         variable.
12         
13 2007-06-20  Marek Safar  <marek.safar@gmail.com>
14
15         * cs-parser.jay: Reworked var keyword handling. We cannot handle var as
16         static keyword because var becomes keyword only if no type with the var
17         name exists in the scope of variable which uses var declaration.
18         
19 2007-06-18  Marek Safar  <marek.safar@gmail.com>
20
21         * cs-parser.jay: Add implicitly typed local variable checks.
22
23 2007-06-15  Marek Safar  <marek.safar@gmail.com>
24
25         * cs-parser.jay: Correctly split generic arguments and generic
26          parameters. Correctly implemented typeof of generic unbound types.
27
28 2007-06-14  Marek Safar  <marek.safar@gmail.com>
29
30         * cs-parser.jay: Assembly and module attributes must precede all other
31         elements except using clauses and extern alias declarations.
32
33 2007-06-08  Marek Safar  <marek.safar@gmail.com>
34
35         * cs-parser.jay: Uses newly defined GroupBy class.
36         
37         * linq.cs (GroupBy): Implemented.
38         (AQueryClause.BuildQueryClause): Refactored to allow customize query
39         method arguments.
40
41 2007-06-08  Marek Safar  <marek.safar@gmail.com>
42
43         * generics.cs (InferTypeArguments): Uses AnonymousMethodExpression
44         InferTypeArguments.
45
46 2007-06-06  Marek Safar  <marek.safar@gmail.com>
47
48         * generics.cs (TypeArguments): New contructor fow known number of
49         arguments.
50
51 2007-06-04  Raja R Harinath  <rharinath@novell.com>
52
53         * linq.cs (Select.DoResolve): Pass the created parameters to the
54         ToplevelBlock too.
55
56 2007-05-29  Raja R Harinath  <rharinath@novell.com>
57
58         * cs-parser.jay: Update to changes in ToplevelBlock.
59         (top_current_block): Remove.
60
61 2007-05-27  Raja R Harinath  <harinath@gmail.com>
62
63         * cs-parser.jay: Update to new ExplicitBlock invariant.
64
65         * cs-parser.jay: Update to changes introduced in Block and
66         ExplicitBlock.
67
68 2007-05-25  Raja R Harinath  <rharinath@novell.com>
69
70         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
71         modifying current_block directly.
72
73 2007-05-22  Scott Peterson  <lunchtimemama@gmail.com>
74         
75         * cs-parser.jay: Implemented automatic properties (C# 3.0)
76
77 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
78         
79         * cs-parser.jay: Improved grammar for object and collection
80           initialization.
81
82 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
83
84         This code is contributed under the MIT X11 license
85         
86         * cs-parser.jay: Added support for C# 3.0 language features:
87           Variable type inference (the "var" keyword)
88           Anonymous types
89           Array type inference
90           Object initialization
91           Collection initialization
92
93 2007-05-06  Marek Safar  <marek.safar@gmail.com>
94
95         A fix for bug #81500
96         * cs-parser.jay: Add special handling for coalescing operator.
97
98 2007-05-02  Raja R Harinath  <rharinath@novell.com>
99
100         Fix regression in cs0631-3.cs
101         * cs-parser.jay (operator_declarator): Add opt_attributes to error
102         fallback.  Make error fallback catch more cases.
103
104 2007-05-01  Miguel de Icaza  <miguel@novell.com>
105
106         * cs-parser.jay: Allow parameters in operator declarations to have
107         attributes. 
108
109 2007-04-27  Miguel de Icaza  <miguel@novell.com>
110
111         * generic.cs (TypeManager.LambdaInfer): now this routine will
112         make only one inference from the list of lambda expression that
113         have not participated in inferring a type.
114
115         (TypeManager.InferTypeArguments): The logic that drives the type
116         inference in lambda expressions is now driven here. 
117
118 2007-04-23  Miguel de Icaza  <miguel@novell.com>
119
120         * generic.cs: Large update to LambdaInfer, this is merely an
121         update to start the lambda type inference.   It is by no means
122         complete.  It is currently merely able to build a sample program
123         (with no iteration for the type parameters).
124
125 2007-04-12  Duncan Mak  <duncan@a-chinaman.com>
126
127         * cs-parser.jay (interface_method_declaration_body): Fixed typo.
128
129 2007-04-08  Marek Safar  <marek.safar@gmail.com>
130
131         * cs-parser.jay, linq.cs: First select implementation (hacky).
132
133         * generic.cs (InferTypeArguments): Simplified.
134
135 2007-03-31  Marek Safar  <marek.safar@gmail.com>
136
137         * generic.cs (InferTypeArguments): Restored validation check.
138         (InferTypeArguments): Move all logic to Compatible method for re-usability.
139
140 2007-03-25  Marek Safar  <marek.safar@gmail.com>
141
142         * generic.cs (InferTypeArguments): Infer arguments before they are used
143         for compatibility check.
144
145 2007-03-15  Marek Safar  <marek.safar@gmail.com>
146
147         * generic.cs (InflatedConstraints): Fixed the check order.
148         (TypeArguments.Resolve): Small optimization for generic parameters.
149         (InferTypeArguments): Add infering support for anonymous methods.
150
151 2007-03-15  Martin Baulig  <martin@ximian.com>
152
153         Fix #79984.
154
155         * generic.cs
156         (TypeParameter.HasConstructorConstraint): Removed.
157         (ConstraintChecker.HasDefaultConstructor): Removed the
158         `TypeBuilder' argument here; correctly check for the ctor
159         constraint on type parameters.
160
161 2007-03-15  Martin Baulig  <martin@ximian.com>
162
163         Fix #79302.
164
165         * generic.cs
166         (TypeParameter): Create a `MemberCache' here as well.  Note that
167         we need to create this on-demand when it's actually used.
168
169 2007-03-10  Marek Safar  <marek.safar@gmail.com>
170
171         * generic.cs (TypeArguments.Resolve): Avoid redundant checks.
172
173 2007-03-09  Raja R Harinath  <rharinath@novell.com>
174
175         * cs-parser.jay (WHERE): Move before QUERY_FIRST_TOKEN.  'where'
176         is a valid keyword outside a linq expression too.
177
178 2007-03-03  Marek Safar  <marek.safar@gmail.com>
179
180         * cs-parser.jay: Implemented basic linq grammar.
181
182         * linq.cs: New file for hosting query specific classes.
183
184 2007-02-26  Marek Safar  <marek.safar@gmail.com>
185
186         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
187
188 2007-02-20  Marek Safar  <marek.safar@gmail.com>
189
190         A fix for bug #80650
191         * cs-parser.jay: Anonymous container starts at constructor declaration
192         and not at block beginning because it has to be usable in constructor
193         initializer.
194
195 2007-02-18  Marek Safar  <marek.safar@gmail.com>
196
197         A fix for bug #80493 by Atsushi Enomoto
198         * cs-parser.jay: Ignore invalid attribute target.
199
200 2007-02-15  Miguel de Icaza  <miguel@novell.com>
201
202         * Remove the call to SetExpression for lambda expressions, we do
203         not actually need it.
204
205         Remove expression tracking code as its not needed.
206
207 2007-02-11  Miguel de Icaza  <miguel@novell.com>
208
209         * cs-parser.jay (lambda_expression_body): when the body is an
210         expression add a statement of the form:
211
212                 contextual-return expression.
213
214         Where `contextual-return' is similar to `return', the difference
215         being that if the delegate that the lambda will be converted to
216         has a void return type, it will check that the result is a
217         ExpressionStatement and the result is a plain ret (no return
218         values on the stack).  If the return type of the delegate is of a
219         given type, this turns into a return with a value and does the
220         regular checking to check that the computed value can be
221         implicitly converted to the delegate return.
222
223 2007-01-30  Miguel de Icaza  <miguel@novell.com>
224
225         * cs-parser.jay (anonymous_method_expression): move the
226         before/after productions to the start_anonymous and end_anonymous
227         methods so the code can be reused for lambda functions.
228
229         (lambda_expression_body): wrap expressions implicitly into a
230         block.
231
232         (block): factor out the setup/teardown of parsing a block so we
233         can reuse that in lambda_expression_body
234
235         (lambda_expression): use new anonymous method helper methods.
236
237 2007-01-29  Miguel de Icaza  <miguel@novell.com>
238
239         * cs-parser.jay: oob_stack make it static (am guessing that is why
240         we no longer initialize it anymore) and reuse it across
241         instances.
242
243 2007-01-28  Miguel de Icaza  <miguel@novell.com>
244
245         * cs-parser.jay (open_parens): Introduce new non-terminal that
246         abstracts OPEN_PARENS and OPEN_PARENS_LAMBDA as the later can now
247         be returned in places where types are followed by identifiers
248         (this is expected in declaration, fixed, using, foreach and catch
249         clauses). 
250
251         Use open_parens in those places, keep OPEN_PARENS in the
252         expressions.  
253
254         cs-parser.jay: New grammar bits for parsing lambda expressions. 
255
256 2007-01-28  Raja R Harinath  <rharinath@novell.com>
257
258         Fix #80534, gtest-309.cs
259         * generic.cs (UnifyType): Rename from InferType.  Make unification
260         of generic insts simpler and don't insist on inferring all generic
261         parameters in a single generic inst unification.
262         (UnifyTypes): New.
263         (InferGenericInstance): Remove.
264         Analysis and initial patch by David Mitchell <dmitchell@logos.com>.
265
266 2007-01-20  Marek Safar  <marek.safar@gmail.com>
267
268         * cs-parser.jay: Better parameter error handling.
269
270 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
271             Raja R Harinath  <rharinath@novell.com>
272
273         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
274         Note the order in which accessors are declared in the source.
275
276 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
277
278         * generic.cs (TypeParameter.FindMembers): Use the generic
279         constraints, not the constraints to check for methods (first fix
280         of 80518).
281
282 2006-12-30  Marek Safar  <marek.safar@gmail.com>
283
284         * cs-parser.jay: Better syntax errors handling.
285
286 2006-11-21  Marek Safar  <marek.safar@gmail.com>
287
288         * cs-parser.jay: Tiny change to work with mcs tokenizer.
289
290         * cs-tokenizer.cs: Remove after unification with mcs.
291
292 2006-10-28  Marek Safar  <marek.safar@gmail.com>
293
294         A fix for bug #78998
295         * generic.cs (ConstructedType.AsAccessible): Check accessibility of type
296         arguments as well.
297
298 2006-10-26  Marek Safar  <marek.safar@gmail.com>
299
300         A fix for bug #76591
301         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous methods.
302
303 2006-10-25  Brian Crowell  <brian@fluggo.com>
304
305         Fix #79703
306         * generic.cs (CheckConstraints): Allow generic parameters with
307         inheritance constraints to satisfy reference type constraints.
308
309 2006-10-09  Martin Baulig  <martin@ximian.com>
310
311         * generic.cs
312         (NullCoalescingOperator.DoResolve): Fix #78964; added gtest-294.cs.
313
314 2006-09-25  Martin Baulig  <martin@ximian.com>
315
316         * class.cs: Remove after unification with mcs source.
317
318 2006-09-24  Raja R Harinath  <harinath@gmail.com>
319
320         * convert.cs: Remove after unification with mcs source.
321
322 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
323
324         * class.cs (MemberBase.VerifyClsCompliance): When method has type
325         parameters verify them as well.
326
327         * generic.cs (Constraints.VerifyClsCompliance): Verify CLS-Compliance of
328         the type parameter constraints.
329         (Generics.VerifyClsCompliance): Ditto.
330
331 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
332
333         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
334         for anonymous block with out argument.
335
336 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
337
338         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
339         not used private events only.
340
341 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
342
343         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
344
345         * cs-parser.jay: Parse correctly cast of default (T).
346
347         * generic.cs (DefaultValueExpression.DoResolve): Check for void type.
348         Store original type via EmptyConstantCast.
349
350 2006-09-22  Martin Baulig  <martin@ximian.com>
351
352         * delegate.cs: Removed; this file is now shared with mcs.
353
354         * attribute.cs: Removed; this file is now shared with mcs.
355
356 2006-09-22  Martin Baulig  <martin@ximian.com>
357
358         * ecore.cs: Removed; this file is now shared with mcs.
359
360 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
361
362         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
363
364         * ecore.cs (NullCast): Derives from NullConstant.
365
366         * generic.cs (DefaultValueExpression): Fixed to cope with the constant
367         results.
368
369 2006-09-21  Martin Baulig  <martin@ximian.com>
370
371         * decl.cs: Removed; this file is now shared with mcs.
372
373 2006-09-21  Raja R Harinath  <rharinath@novell.com>
374
375         * rootcontext.cs: Remove after unification with mcs source.
376
377         * report.cs: Remove after unification with mcs source.
378         * generic.cs (AddTypeParameter, LookupTypeParameter): Move to
379         mcs/typemanager.cs.
380         (InitGenerics, CleanUpGenerics): Remove.
381
382         * support.cs: Remove after unification with mcs source.
383
384 2006-09-20  Raja R Harinath  <rharinath@novell.com>
385
386         * codegen.cs: Remove after unification with mcs source.
387
388 2006-09-19  Martin Baulig  <martin@ximian.com>
389
390         * expression.cs: Removed; this file is now shared with mcs.
391
392 2006-09-19  Martin Baulig  <martin@ximian.com>
393
394         * generic.cs
395         (TypeManager.IsEqual): Moved into ../mcs/typemanager.cs.
396         (TypeManager.DropGenericTypeArguments): Likewise.
397         (TypeManager.DropGenericMethodArguments): Likewise.
398         (TypeManager.GetTypeArguments): Likewise.
399         (TypeManager.HasGenericArguments): Likewise.
400
401 2006-09-19  Martin Baulig  <martin@ximian.com>
402
403         * ecore.cs (PropertyExpr.InstanceResolve): Fix the CS1540 check.
404
405 2006-09-19  Martin Baulig  <martin@ximian.com>
406
407         * typemanager.cs: Removed; this file is now shared with mcs.
408
409 2006-09-16  Raja R Harinath  <rharinath@novell.com>
410
411         * Makefile (LOCAL_MCS_FLAGS): Use instead of PROFILE_MCS_FLAGS.
412         * AssemblyInfo.cs, driver.cs: Remove after unification with mcs source.
413
414 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
415
416         A fix for #79401
417         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
418         only if parent type is class.
419         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
420         update.
421
422 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
423
424         * cs-parser.jay,
425         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
426         keywords are used.
427         * typemanager.cs(CSharpName): Converts NullType to null.
428
429 2006-09-15  Martin Baulig  <martin@ximian.com>
430
431         * pending.cs: Removed; this file is now shared with mcs.
432
433 2006-09-15  Martin Baulig  <martin@ximian.com>
434
435         * statement.cs: Removed; this file is now shared with mcs.
436
437 2006-09-15  Martin Baulig  <martin@ximian.com>
438
439         * rootcontext.cs (RootContext.BrokenCircularDeps): Removed.
440
441         * driver.cs: Removed the `--broken-cycles' argument.
442
443 2006-09-15  Martin Baulig  <martin@ximian.com>
444
445         * namespace.cs: Removed; this file is now shared with mcs.
446
447 2006-09-15  Martin Baulig  <martin@ximian.com>
448
449         * decl.cs (MemberName): Minor code cleanups.
450
451 2006-09-15  Martin Baulig  <martin@ximian.com>
452
453         * parameter.cs: Removed; this file is now shared with mcs.
454
455 2006-09-15  Martin Baulig  <martin@ximian.com>
456
457         * enum.cs: Removed; this file is now shared with mcs.
458
459 2006-09-15  Martin Baulig  <martin@ximian.com>
460
461         * Makefile: Define `GMCS_SOURCE'.
462
463         * flowanalysis.cs: Removed; this file is now shared with mcs.
464
465 2006-09-15  Martin Baulig  <martin@ximian.com>
466
467         Removed modifiers.cs, literal.cs, location.cs, roottypes.cs,
468         assign.cs, const.cs, cfold.cs, constant.cs, symbolwriter.cs and
469         doc.cs - they are now shared with mcs.
470
471         * gmcs.exe.sources: Include these files from ../mcs/.
472
473 2006-09-15  Martin Baulig  <martin@ximian.com>
474
475         * old-code.cs, gen-il.cs, gen-treedump.cs: Removed old stuff.
476         * g1.cs, sample-hello.cs, sample-stack.il: Likewise.
477
478 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
479
480         * assign.cs, ecore.cs, expression.cs: Share error message text.
481         * class.cs (FieldMember.Define): Check for variable of static type.
482         * decl.cs (check_type_parameter): Report correct type name.
483         * driver.cs (LoadAssembly): Uses error output for errors.
484         * generic.cs (Constraints.Resolve): Add check for constraint accessibility
485         (TypeArguments.Resolve): Static class cannot be used as an argument.
486         * statement.cs (ResolveMeta): Constants cannot be generic types.
487
488 2006-09-12  Martin Baulig  <martin@ximian.com>
489
490         * generic.cs (TypeManager.IsIList): Moved into convert.cs.
491
492         * convert.cs (Convert.Array_To_IList): Moved here and correctly
493         implement it; fixes #79345.
494
495 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
496
497         * decl.cs (DeclSpace.SetParameterInfo): Check for nonexistent type
498         parameter.
499         * expression.cs (TypeOf.GetAttributableValue): Check for open generic
500         types.
501         * generic.cs: Improved error messages.
502         * typemanager.cs (RemoveGenericArity): Made public.
503
504 2006-09-08  Martin Baulig  <martin@ximian.com>
505
506         * typemanager.cs (TypeManager.interlocked_type): New public field.
507         (TypeManager.int_interlocked_compare-exchange): New public field.
508         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
509         enumerator types here and call InitGenericCoreTypes().
510         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
511         after calling InitEnumUnderlyingTypes().
512
513         * rootcontext.cs
514         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
515         `classes_second_stage'. 
516
517 2006-09-07  Marek Safar  <marek.safar@seznam.cz>
518  
519         * class.cs, generic.cs (GenericMethod.Define): Check for type parameter
520         collisions.
521         * statement.cs (Block.Variables): Made public.
522
523 2006-09-07  Martin Baulig  <martin@ximian.com>
524
525         * driver.cs
526         (MainDriver): Revert r62663 from Marek; see #70506 for details.
527
528 2006-09-01  Martin Baulig  <martin@ximian.com>
529
530         * generic.cs
531         (TypeManager.IsIList): Also handle base classes and interfaces. 
532
533 2006-09-01  Raja R Harinath  <rharinath@novell.com>
534
535         Fix #79238
536         * expression.cs (Invocation.MoreSpecific): Check for reference
537         types earlier.
538
539 2006-08-29  Miguel de Icaza  <miguel@novell.com>
540
541         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
542
543 2006-08-17  Miguel de Icaza  <miguel@novell.com>
544
545         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
546         #52019 and #79064, the use of the \uXXXX sequence in source code
547         to represent unicode characters.
548
549 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
550  
551         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
552         support.
553         * class.cs, ecore.cs, statement.cs: Merged to one error message.
554
555 2006-08-14  Raja R Harinath  <rharinath@novell.com>
556
557         Fix #79067
558         * cs-tokenizer.cs (parse_less_than): Allow '*' to appear in a type
559         parameter too.  This only avoids a parse error -- the semantic
560         error is caught elsewhere.
561
562 2006-08-13  Miguel de Icaza  <miguel@novell.com>
563
564         * assign.cs: Catch attempts to assign to a method groups in += and
565         report as 1656
566
567 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
568
569         A fix for #79056
570         * cs-parser.jay: Don't destroy current array type by typeof of array's.
571
572 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
573
574         * cs-parser.jay: Check whether a constraint clause has already been
575         specified for type parameter.
576         * generic.cs (Constraints): Exposed location.
577
578 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
579
580         * class.cs (Method.Define): Issue a warning when generic method looks like
581         an entry point.
582         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
583         as well.
584         * report.cs: New warning number.
585
586 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
587  
588         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
589         looking for ctor.
590         * decl.cs (MemberCache.FindMembers): When container is interface we need to
591         search all base interfaces as a member can be ambiguous.
592         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
593         Constructor member type filter. 
594         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
595         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
596         reporting for returned memberinfos.
597         * report.cs: Updated.
598         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
599         version to work on all runtimes.
600         (TypeManager.RealMemberLookup): Removed members filtering.
601
602 2006-08-08  Raja R Harinath  <rharinath@novell.com>
603
604         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
605         (PropertyExpr.EmitAssign): Likewise.
606         * expression.cs (Indirection.EmitAssign): Likewise.
607         (LocalVariableReference.EmitAssign): Likewise.
608         (ParameterReference.EmitAssign): Likewise.
609         (Invocation.EmitArguments): Likewise.
610         (ArrayAccess.EmitAssign): Likewise.
611         (IndexerAccess.EmitAssign): Likewise.
612         (This.EmitAssign): Likewise.
613         (ConditionalLogicalOperator.Emit): Likewise.
614
615         Fix #79026
616         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
617         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
618         leave it in after returning it.
619         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
620
621 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
622
623         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
624         message.
625
626 2006-08-05  Marek Safar  <marek.safar@seznam.cz>
627
628         * class.cs (TypeContainer.AddPartial): Add check for partial declarations
629         with different type names.
630         (TypeContainer.UpdateTypeParameterConstraints): Updated an error message.
631
632 2006-08-03  Raja R Harinath  <rharinath@novell.com>
633
634         Fix cs0146-3.cs and cs0146-4.cs.
635         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
636         enclosing types don't depend on the current type.
637
638 2006-08-02  Raja R Harinath  <rharinath@novell.com>
639
640         Fix #77963
641         * class.cs (TypeContainer.DoDefineMembers): Use
642         FindBaseMemberWithSameName on Parent, since we're interested in
643         whether we hide inherited members or not.
644         (FindBaseMemberWithSameName): Make slightly more robust.
645
646         Fix #77396
647         * codegen.cs (IResolveContext.GenericDeclContainer): New.
648         (EmitContext): Implement new interface requirement.
649         * namespace.cs (UsingEntry, LocalAliasEntry): Likewise.
650         * decl.cs (MemberCore): Likewise.
651         (DeclSpace.GenericDeclContainer): Rename from DeclContainer.
652         * ecore.cs (SimpleName.ResolveAsTypeTerminal): Use
653         ec.GenericDeclContainer to check for generic parameters.
654         (SimpleName.DoSimpleNameResolve): Likewise.
655         * generic.cs (TypeParameter.DeclContainer): Remove override.
656
657         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
658         declspaces for doppelgangers too.
659         (UsingEntry): Implement IResolveContext.
660         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
661         'this' as the resolve context.
662         (LocalAliasEntry): Likewise.
663
664         Implement parts of #77403
665         * roottypes.cs (RootDeclSpace): New.  Used to represent the
666         toplevel declaration space.  Each namespace declaration introduces
667         a "partial" root declaretion space.
668         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
669         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
670         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
671         from 'current_namespace.SlaveDeclSpace'.
672         (namespace_declaration): Likewise.
673         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
674         check.  It can't happen now.
675         * decl.cs (DeclSpace.LookupType): Likewise.
676         * driver.cs (MainDriver): Sanity check.
677
678 2006-08-01  Raja R Harinath  <rharinath@novell.com>
679
680         * decl.cs (DeclSpace.FindNestedType): Remove.
681         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
682         LookupTypeContainer to get the container of the nested type.
683         * class.cs (TypeContainer.FindNestedType): Make non-override.
684
685 2006-07-31  Raja R Harinath  <rharinath@novell.com>
686
687         * decl.cs (DeclSpace.PartialContainer): Move field from ...
688         * class.cs (TypeContainer.PartialContainer): ... here.
689         (TypeContainer.AddBasesForPart): New helper.
690         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
691         instead.
692         * cs-parser.jay (current_class): Convert to DeclSpace.
693         (struct_declaration, interface_declaration, class_declaration):
694         Use AddBasesForPart instead of .Bases directly.
695         * const.cs, iterators.cs: Update to changes.
696
697 2006-07-28  Raja R Harinath  <rharinath@novell.com>
698
699         * class.cs (TypeContainer.AddMemberType): Rename from
700         AddToTypeContainer.
701         (TypeContainer.AddMember): Rename from AddToMemberContainer.
702         (AddTypeContainer): New.  Combine AddClassOrStruct and
703         AddInterface.
704         (AddPartial): Update.  Add 'is_partial' argument.
705         * roottypes.cs: Update to changes.
706         * cs-parser.jay (push_current_class): New helper for handling
707         current_container and current_class.
708         (struct_declaration, interface_declaration, class_declaration):
709         Use it.
710
711 2006-07-26  Raja R Harinath  <rharinath@novell.com>
712
713         * roottypes.cs: Rename from tree.cs.
714
715         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
716         * tree.cs (Tree, ITreeDump): Remove types.
717         * rootcontext.cs (tree, Tree): Remove fields.
718         (root, ToplevelTypes): New.
719         * *.cs: Update to rename.
720
721         * tree.cs (Tree.RecordDecl): Remove.
722         (RootTypes.AddToTypeContainer): Record the toplevel type in its
723         namespace here.
724         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
725
726 2006-07-23  Raja R Harinath  <harinath@gmail.com>
727
728         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
729         DoFlowAnalysis and OmitStructFlowAnalysis here.
730         (ec.With): Rename from WithUnsafe and generalize.
731         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
732         (ec.WithFlowAnalyis): New.
733         * ecore.cs, expression.cs, statement.cs: Update.
734
735 2006-07-22  Raja R Harinath  <harinath@gmail.com>
736
737         * statement.cs (Block.ResolveMeta): Simplify slightly.
738
739         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
740         multiple boolean fields.  Convert InUnsafe, constant_check_state,
741         check_state to flags.
742         (CheckState, ConstantCheckState): Update.
743         (InUnsafe): New read-only property.
744         (FlagsHandle): Rename from CheckStateHandle and convert to handle
745         arbitrary flags.
746         (WithUnsafe): New helper similar to WithCheckState.
747         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
748         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
749
750 2006-07-21  Raja R Harinath  <rharinath@novell.com>
751
752         Make comparisons use the same IL irrespective of whether they're
753         in a 'checked' or 'unchecked' context: one of the issues in #78899
754         * codegen.cs (EmitContext.CheckState): Make read-only property.
755         (EmitContext.ConstantCheckState): Likewise.
756         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
757         helper that implement a save/restore stack for CheckState
758         values.  This is the only way to change check-state.
759         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
760         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
761         (CheckedExpr.EmitBranchable): New forwarding method.
762         (UnCheckedExpr): Likewise.
763         * statement.cs (Block.ResolveMeta): Use WithCheckState.
764         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
765         (Checked.Resolve, checked.DoEmit): Likewise.
766
767 2006-07-21  Martin Baulig  <martin@ximian.com>
768
769         * generic.cs (TypeManager.InferType): When inferring an array
770         type, also allow IList<T> and ICollection<T>.  Fixes #78900.
771
772 2006-07-21  Martin Baulig  <martin@ximian.com>
773
774         * generic.cs (TypeManager.IsIEnumerable): Renamed into IsIList()
775         and allow IList`1 and all its base interfaces.
776
777         * convert.cs (Convert.ImplicitReferenceConversion): Allow
778         converting from an array-type of T to IList<T>.
779
780 2006-07-21  Martin Baulig  <martin@ximian.com>
781
782         * ecore.cs (SimpleName.DoSimpleNameResolve): Added CS0307 check.
783
784 2006-07-20  Miguel de Icaza  <miguel@novell.com>
785
786         * anonymous.cs: Cache the resolved anonymous delegate, and return
787         this so that the ResolveTopBlock is only triggered once, not
788         twice.
789
790         Currently we trigger ResolvetopBlock twice due to a first pass of
791         argument check compatibility, and a second pass that does the
792         actual resolution.   
793
794 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
795
796         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
797         modifiers.
798         * rootcontext.cs (Reset): Add helper_classes.
799
800 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
801
802         A fix for #78860
803         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
804         correctly.
805
806 2006-07-13  Miguel de Icaza  <miguel@novell.com>
807
808         * statement.cs (Lock): Handle expressions of type
809         TypeManager.null_type specially.  Fixes #78770
810
811 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
812
813         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
814         to an event.
815
816 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
817
818         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
819         for accessors as well.
820         * ecore.cs (EventExpr): Add AccessorTable.
821
822 2006-07-03  Martin Baulig  <martin@ximian.com>
823
824         * ecore.cs (UnboxCast.Emit): Also use `Unbox_Any' for generic
825         instances of value types.
826
827         * convert.cs (Convert.ExplicitConversion): Correctly handle
828         object->nullable conversions.   
829
830 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
831
832         A fix for #78738
833         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
834         for CS0122 where appropriate.
835         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
836         level attributes.
837         (Filter): Assembly can be null in the case of top level attributes.
838
839 2006-06-28  Raja R Harinath  <rharinath@novell.com>
840
841         Fix #78716
842         * generic.cs (TypeManager.InferParamsTypeArguments): If there are
843         no arguments, return 'false': nothing can be inferred.
844
845 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
846
847         A fix for #78690
848
849         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
850         is done at global level.
851
852 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
853
854         A fix for #77002, Implemented TypeForwarder support.
855
856         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
857         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Add TypeForwarder
858         attribute handling.
859         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
860         * typemanager.cs (): Add type_forwarder_attr_type.
861
862 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
863
864         * report.cs: Add CS0469 warning.
865
866 2006-06-22  Martin Baulig  <martin@ximian.com>
867
868         * class.cs
869         (TypeContainer.GetNormalBases): Also use ResolveAsBaseTerminal()
870         for interfaces; fixes #78686, which is a modification of #78380
871         with interfaces instead of classes.
872
873 2006-06-21  Martin Baulig  <martin@ximian.com>
874
875         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
876         the `try'-block, so we also report CS0016 etc. there.
877
878 2006-06-21  Martin Baulig  <martin@ximian.com>
879
880         * ecore.cs (FieldExpr.EmitAssign, FieldExpr.AddressOf): Correctly
881         handle SetAssigned() and SetMemberIsUsed() for generic types;
882         fixes #77545.
883
884 2006-06-21  Martin Baulig  <martin@ximian.com>
885
886         * delegate.cs
887         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
888
889 2006-06-21  Martin Baulig  <martin@ximian.com>
890
891         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
892         also report CS1686 for parameters.
893
894 2006-06-21  Martin Baulig  <martin@ximian.com>
895
896         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
897         instead of an error if the value is not implicitly convertible to
898         the switch types; fixes #77964.
899
900 2006-06-21  Raja R Harinath  <rharinath@novell.com>
901
902         Fix #78673
903         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
904         FieldBuilder is null.
905
906         Fix #78662
907         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
908         'left' and 'right' before error-checking.
909
910 2006-06-19  Martin Baulig  <martin@ximian.com>
911
912         * convert.cs
913         (Convert.ImplicitConversionStandard): Cleanup and correctly
914         implement nullable conversions.
915         (Convert.ImplicitStandardConversionExists): Likewise.
916         (Convert.ExplicitConversion): Likewise.
917
918 2006-06-19  Martin Baulig  <martin@ximian.com>
919
920         * generic.cs
921         (Nullable.Wrap.Create, Nullable.Unwrap.Create): New public static
922         methods; make the ctors protected.
923
924 2006-06-19  Martin Baulig  <martin@ximian.com>
925
926         Fixed #78380; added gtest-273.cs.
927
928         * ecore.cs
929         (Expression.ResolveAsBaseTerminal): Move the constraint checking
930         into ResolveAsTypeTerminal().
931
932         * generic.cs
933         (ConstraintChecker.HasDefaultConstructor): Use the non-cache based
934         TypeManager.FindMembers() to check for the default ctor.
935
936 2006-06-18  Marek Safar  <marek.safar@seznam.cz>
937
938         * generic.cs: Fixed NullableInfo accessibility.
939
940 2006-06-16  Martin Baulig  <martin@ximian.com>
941
942         * generic.cs
943         (Constraints.InflatedConstraints.inflate): Correctly inflate
944         generic types; fixes #78400.
945
946 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
947
948         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
949         Fixed bug #78601.
950         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
951         (FieldExpr.DoResolve): likewise.
952         (PropertyExpr.InstanceResolve): likewise.
953         (EventExpr.InstanceResolve): likewise. 
954
955 2006-06-15  Martin Baulig  <martin@ximian.com>
956
957         * statement.cs
958         (SwitchLabel.ResolveAndReduce): Added `bool allow_nullable'
959         argument; always allow a `null' label if true.
960         (Switch.SwitchGoverningType): Take an `Expression expr' argument.
961         (Switch.TableSwitchEmit, Switch.SimpleSwitchEmit): Check whether
962         we have a `null' label and mark the new `null_target' label;
963         default to the `default' label.
964         (Switch.Resolve): Add support for nullable types.  Fixes #78630.
965
966 2006-06-15  Martin Baulig  <martin@ximian.com>
967
968         * class.cs (Operator.Define): Allow an implicit/explicit operator
969         to convert to/from a nullable value of the enclosing type.
970
971         * generic.cs (TypeManager.IsNullableTypeOf): New public method.
972         (Nullable.Unwrap, Nullable.Wrap): Make these classes public.
973
974         * convert.cs
975         (Convert.ImplicitStandardConversionExists): Add support for lifted
976         implicit/explicit conversions.
977         (Convert.ImplicitConversionStandard): Likewise.
978
979 2006-06-13  Martin Baulig  <martin@ximian.com>
980
981         * ecore.cs (SimpleName.DoSimpleNameResolve): Check whether we have
982         type arguments and create a ConstructedType if necessary.  Fixes #78400.
983
984 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
985
986         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
987         attribute applicable tests for attribute argument.
988
989 2006-06-02  Raja R Harinath  <rharinath@novell.com>
990
991         Fix #78079
992         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
993         (Binary.OverloadResolve_PredefinedIntegral): New.
994         (Binary.OverloadResolve_PredefinedFloating): New.
995         (Binary.OverloadResolve_PredefinedString): New.
996         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
997         Follow the standard more closely, and treat numeric promotions in
998         terms of overload resolution.
999         (Binary.CheckShiftArguments): Simplify.
1000
1001 2006-06-01  Raja R Harinath  <rharinath@novell.com>
1002
1003         * flowanalysis.cs (MyBitVector): Simplify representation.
1004         (MyBitVector.Clone): Avoid allocating BitArray.
1005         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
1006         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
1007         (*): Update.  Change all references to MyBitVector.And and
1008         MyBitVector.Or to &= and |=.
1009
1010 2006-05-31  Raja R Harinath  <rharinath@novell.com>
1011
1012         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
1013         Use bne.un instead of ceq+brfalse.
1014
1015         Fix cs0208-[23].cs
1016         * typemanager.cs (IsUnmanagedType): Disallow generic types and
1017         generic parameters.
1018
1019 2006-05-29  Raja R Harinath  <rharinath@novell.com>
1020
1021         Fix cs0231-[34].cs.
1022         * cs-parser.jay (formal_parameter_list): Extend the pattern below
1023         to param arguments too.
1024
1025 2006-05-26  Miguel de Icaza  <miguel@novell.com>
1026
1027         * cs-parser.jay: Catch another parsing form for arglist being
1028         followed by other arguments.  Fixes #78313.
1029
1030 2006-05-25  Raja R Harinath  <rharinath@novell.com>
1031
1032         Fix #78324
1033         * expression.cs (Binary.DoResolve): Use Nullable.LiftedBinaryOperator
1034         also when one of the operands is a null literal.
1035         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality): Rewrite
1036         to improve clarity, and generate slightly better code.
1037
1038 2006-05-24  Raja R Harinath  <rharinath@novell.com>
1039
1040         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
1041         checking of out parameters to ...
1042         (FlowBranchingToplevel.Merge): ... here.
1043         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
1044         set, propagate the origin upward, and only complain if there was
1045         no other error.
1046         (FlowBranchingException.AddContinueOrigin): Likewise.
1047         (FlowBranchingException.AddReturnOrigin): Likewise.
1048         (FlowBranchingException.AddGotoOrigin): Likewise.       
1049
1050 2006-05-23  Raja R Harinath  <rharinath@novell.com>
1051
1052         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
1053         unreachable, skip it.
1054         (FlowBranchingException.Merge): Always propagate jumps, even if
1055         the finally block renders subsequent code unreachable.
1056
1057 2006-05-18  Raja R Harinath  <rharinath@novell.com>
1058
1059         Fix #77601
1060         * statement.cs (Goto.Resolve): Move responsibility for resolving
1061         'goto' to FlowBranching.AddGotoOrigin.
1062         (Goto.SetResolvedTarget): New.  Callback to set the
1063         LabeledStatement that's the target of the goto.
1064         (Goto.DoEmit): Use Leave instead of Br when crossing an
1065         unwind-protect boundary.
1066         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
1067         LookupLabel and adjust to new semantics.
1068         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
1069         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
1070         Goto.SetResolvedTarget to update target.
1071         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
1072         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
1073         AddBreakOrigin & co.  Delay propagation until ...
1074         (FlowBranchingException.Merge): ... this.
1075
1076         * statement.cs (Block.Resolve): Always depend on flow-branching to
1077         determine unreachability.  Kill workaround that originally emitted
1078         only one statement after an "unreachable" label (see infloop in
1079         test-515.cs).
1080
1081         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
1082         This is still "wrong", but anything better would probably need a
1083         multi-pass algorithm.
1084         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
1085         usage vector.  Force current usage vector to be reachable, to
1086         optimistically signify backward jumps.
1087         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
1088         detected.
1089         (FlowBranchingLabeled.Merge): New.  If no backward jump was
1090         detected, return the original salted-away usage vector instead,
1091         updated with appropriate changes.  Print unreachable warning if
1092         necessary.
1093         * statement.cs (Block.Resolve): Don't print unreachable warning on
1094         a labeled statement.
1095
1096 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
1097
1098         * driver.cs: Pass filename without path to AssemblyBuilder's
1099         AddResourceFile. Fixes bug #78407.
1100
1101 2006-05-17  Raja R Harinath  <rharinath@novell.com>
1102
1103         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
1104         * flowanalysis.cs (FlowBranchingLabeled): ... here.
1105         (FlowBranching.MergeChild): Overwrite
1106         reachability information from Labeled branchings too.
1107
1108 2006-05-16  Raja R Harinath  <rharinath@novell.com>
1109
1110         * statement.cs (Goto.Resolve): Merge jump origins here ...
1111         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
1112
1113         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
1114         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
1115         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
1116         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
1117         here, ...
1118         * statement.cs (Goto.Resolve): ... not here.
1119         (Goto.Emit): Remove CS1632 check.
1120
1121 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
1122
1123         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
1124         error message.
1125
1126 2006-05-11  Raja R Harinath  <rharinath@novell.com>
1127
1128         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
1129         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
1130         (FlowBranchingException.Label): Likewise.
1131
1132         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
1133         given value.
1134         (MyBitVector.Or): Use it to avoid losing information (Count).
1135         (FlowBranching.MergeOrigins): Likewise.
1136
1137         * flowanalysis.cs (UsageVector.IsDirty): Remove.
1138         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
1139         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
1140         (UsageVector.ToString): Simplify.
1141         (UsageVector.MergeSiblings): Move here from ...
1142         (FlowBranching.Merge): ... here.
1143         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
1144         not a MyBitVector.
1145
1146 2006-05-10  Raja R Harinath  <rharinath@novell.com>
1147
1148         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
1149         null bitvector is treated as all-true.
1150
1151         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
1152         (MyBitVector): Rationalize invariants.  'vector != null' implies
1153         that we have our own copy of the bitvector.  Otherwise,
1154         'InheritsFrom == null' implies all inherited bits are true.
1155
1156 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
1157
1158         * statement.cs (LocalInfo): Add IsConstant.
1159         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
1160         local variable for constants.
1161
1162 2006-05-09  Raja R Harinath  <rharinath@novell.com>
1163
1164         * flowanalysis.cs (MyBitVector.Empty): New.
1165         (MyBitVector): Don't allow InheritedFrom to be null.
1166         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
1167         (UsageVector, FlowBranching): Update to changes.
1168
1169         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
1170         recursion.  The 'Parent == null' condition isn't sufficient for
1171         anonymous methods.
1172         (FlowBranching.AddBreakOrigin): Likewise.
1173         (FlowBranching.AddContinueOrigin): Likewise.
1174         (FlowBranching.AddReturnOrigin): Likewise.
1175         (FlowBranching.StealFinallyClauses): Likewise.
1176         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
1177         (FlowBranching.CheckOutParameters): Likewise.
1178         (FlowBranchingToplevel): Terminate all the above recursions here.
1179         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
1180         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
1181
1182         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
1183         toplevel block.
1184         (FlowBranchingToplevel): New.  Empty for now.
1185         (FlowBranching.MergeTopBlock): Update.
1186         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
1187         branching for the anonymous delegate.
1188         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
1189
1190         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
1191         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
1192         information at the start of the merge.  Reorganize.
1193
1194 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
1195
1196         * class.cs (MethodData.Define): Method cannot implement interface accessor.
1197
1198 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
1199
1200         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
1201         to newly introduced ctor.
1202
1203         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
1204         message to one place.
1205         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
1206         global namespace.
1207
1208 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
1209
1210         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
1211
1212         * ecore.cs (Expression.ResolveAsConstant): Updated.
1213
1214         * statement.cs (ResolveMeta): Updated.
1215
1216 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
1217
1218         * cs-parser.jay: __arglist cannot be used in initializer.
1219
1220 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
1221
1222         A fix for #77879
1223         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
1224         private types.
1225
1226 2006-05-05  Raja R Harinath  <rharinath@novell.com>
1227
1228         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
1229         (LabeledStatement): Add 'name' parameter.
1230         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
1231         (Block.AddLabel): Update to changes.
1232         * cs-parser.jay (labeled_statement): Likewise.
1233
1234         * flowanalysis.cs (BranchingType.Labeled): New.
1235         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
1236         (FlowBranchingLabeled): New.  Does nothing for now, but will
1237         eventually handle 'goto' flows.
1238         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
1239         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
1240         that's terminated ...
1241         (Block.Resolve): ... here.
1242
1243         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
1244         (UsageVector.MergeFinallyOrigins): Likewise.
1245         (FlowBranching.InTryOrCatch): Likewise.
1246         (FlowBranching.AddFinallyVector): Likewise.
1247         (FlowBranchingException): Update to changes.
1248
1249         Fix #78290
1250         * statement.cs (Return.Resolve): Move error checking to ...
1251         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
1252         (FlowBranchingException): Handle return origins like break and
1253         continue origins.
1254         (FlowBranching.UsageVector.CheckOutParameters): Remove.
1255
1256 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
1257
1258         A fix for #76122
1259         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
1260         filter.
1261
1262 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
1263
1264         A fix for #77543
1265         * class.cs (MethodData.Define): Do public accessor check only when method
1266         implements an interface.
1267
1268 2006-05-04  Raja R Harinath  <rharinath@novell.com>
1269
1270         Remove special handling of 'break'
1271         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
1272         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
1273         (UsageVector.Break): Remove.
1274         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
1275         reachability.
1276         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
1277
1278         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
1279         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
1280
1281 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
1282
1283         A fix for #75726
1284         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
1285         be the interface member.
1286
1287 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
1288
1289         A fix for #60069
1290         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
1291         for emitting small (int) values.
1292
1293 2006-05-03  Raja R Harinath  <rharinath@novell.com>
1294
1295         Fix #59427
1296         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
1297         control-flow passes through the 'finally' after merging-in all the
1298         control-flows from 'try' and the 'catch' clauses.
1299
1300         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
1301         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
1302         always true at the only non-recursive entry point.
1303         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
1304         FlowBranchingBreakable.
1305         (FlowBranchingLoop): Remove.
1306         * statement.cs (Return.DoResolve): Update to changes.
1307
1308         Fix #76471, #76665
1309         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
1310         (FlowBranching.CreateBranching): Handle it: create a
1311         FlowBranchingContinuable.
1312         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
1313         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
1314         except that it handles the 'continue' command.
1315         (FlowBranching.UsageVector.MergeOrigins): Rename from
1316         MergeBreakOrigins.
1317         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
1318         except that it overrides AddContinueOrigin.
1319         (FlowBranchingException): Override AddContinueOrigin, similar to
1320         AddBreakOrigin.
1321         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
1322         Create a new branching around the embedded statement.
1323         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
1324         control flow after the embedded statement.
1325         (Continue.Resolve): Move all error checking to AddContinueOrigin.
1326
1327         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
1328         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
1329         FlowBranchingBreakable.
1330         (FlowBranchingSwitch): Remove.
1331
1332         Fix test-503.cs
1333         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
1334         error reporting to ...
1335         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
1336         Rename from 'AddBreakVector'.  Add new location argument.  Return
1337         a bool indicating whether the 'break' crosses an unwind-protect.
1338         (FlowBranchingException.AddBreakOrigin): Add.
1339         (FlowBranchingException.Merge): Propagate 'break's to surrounding
1340         flowbranching after updating with the effects of the 'finally'
1341         clause.
1342         (FlowBranchingBreakable): New common base class for
1343         FlowBranchingLoop and FlowBranchingSwitch.
1344
1345         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
1346         embedded statement.
1347         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
1348
1349 2006-05-02  Raja R Harinath  <rharinath@novell.com>
1350
1351         * statement.cs (Do.Resolve): If the loop is infinite, set the
1352         barrier.
1353         (While.Resolve, For.Resolve): Set a barrier after the embedded
1354         statement.  There's no direct control flow that goes from the end
1355         of the embedded statement to the end of the loop.
1356         * flowanalysis.cs (FlowBranching.Infinite): Remove.
1357         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
1358         above ensure that the reachability is correctly computed.
1359
1360         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
1361         (UsageVector.MergeBreakOrigins): If the current path is
1362         unreachable, treat it as if all parameters/locals are initialized.
1363         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
1364         infinite loops before merging-in break origins.
1365
1366         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
1367         (Reachability.Reachable): Split part into ...
1368         (Reachability.Unreachable): ... this.  Simplify.
1369         (Reachability.IsUnreachable): Use 'Unreachable' instead.
1370
1371         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
1372         (Reachability.SetThrowsSometimes): Likewise.
1373         (FlowBranchingBlock.MergeTopBlock): Don't compare against
1374         TriState.Always, use corresponding property.
1375         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
1376         (Block.Resolve): Likewise.  Remove some redundant checks.
1377
1378 2006-05-02  Raja R Harinath  <harinath@gmail.com>
1379
1380         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
1381         (Reachability.Meet): Don't bother checking AlwaysThrows --
1382         barrier is always set.
1383         (FlowBranchingBlock.Merge): Likewise.
1384
1385 2006-05-01  Rafael Teixeira <rafaelteixeirabr@hotmail.com>
1386
1387         * attribute.cs: fixed_buffer_cache is declared only if NET_2_0 is
1388         defined, so it's references should also compile only for NET_2_0
1389         (as occurs in mcs version)
1390
1391 2006-05-01  Raja R Harinath  <harinath@gmail.com>
1392
1393         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
1394         checks for unreachable.
1395
1396 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
1397
1398         A fix for #77980
1399         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
1400
1401         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
1402         whether field is really assigned.
1403
1404 2006-04-30  Raja R Harinath  <harinath@gmail.com>
1405
1406         * flowanalysis.cs (Reachability): Make 4-argument constructor
1407         private.
1408         (Reachability.Meet): Rename from 'And'.  Remove static variant.
1409         (Reachability.Always): Rename from the highly misleading
1410         'Reachability.Never'.
1411         (FlowBranching.Merge): Update to changes.  Mark an impossible
1412         situation with a 'throw'.
1413         (*): Update to changes.
1414
1415 2006-04-29  Raja R Harinath  <harinath@gmail.com>
1416
1417         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
1418         Remove 'Undefined'.
1419         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
1420         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
1421         (*): Update to changes.
1422         * statement.cs: Update to changes.
1423
1424 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
1425
1426         A fix for #78049
1427         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
1428
1429 2006-04-28  Raja R Harinath  <harinath@gmail.com>
1430
1431         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
1432         dummy UsageVector.
1433
1434         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
1435         argument to two arguments: an usage-vector and a bool.  Move call
1436         to FlowBranching.Merge () ...
1437         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
1438
1439         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
1440         handling of loop and switch reachability to ...
1441         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
1442
1443 2006-04-27  Raja R Harinath  <harinath@gmail.com>
1444
1445         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
1446         handling to FlowBranchingLoop.InLoop.
1447         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
1448
1449 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
1450
1451         A fix for #78115
1452         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
1453         anonymous method is allowed from AnonymousContainer here.
1454
1455         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
1456
1457 2006-04-24  Raja R Harinath  <rharinath@novell.com>
1458
1459         Fix #78156
1460         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
1461
1462 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
1463
1464         A fix for #49011.
1465         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
1466         (DoubleConstant.Reduce): Ditto.
1467
1468 2006-04-23  Raja R Harinath  <rharinath@novell.com>
1469
1470         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
1471         Remove 'lvalue_right_side' argument.  Move parts to ...
1472         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
1473         (LocalVariable.DoResolveLValue): ... these.
1474
1475 2006-04-21  Raja R Harinath  <rharinath@novell.com>
1476
1477         Fix cs1655.cs
1478         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
1479         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
1480         (LocalVariableReference.DoResolveBase): Use it to implement new
1481         CS1655 check.
1482         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
1483         (Argument.Resolve): Simplify.  Move CS1510 check ...
1484         * ecore.cs (Expression.ResolveLValue): ... here.
1485         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
1486         (PropertyExpr.DoResolveLValue): Likewise.
1487         (FieldExpr.Report_AssignToReadonly): Likewise.
1488         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
1489         LValueMemberAccess or LValueMemberOutAccess on instance depending
1490         on it.
1491         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
1492         DoResolve as appropriate.
1493
1494 2006-04-20  Raja R Harinath  <rharinath@novell.com>
1495
1496         Fix #75800
1497         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
1498         implicit conversions on 'out' and 'ref' arguments.
1499
1500         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
1501         improve clarity.  Remove dead code.
1502
1503         Fix #66031
1504         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
1505         (Catch.Resolve): Resolve VarBlock if it exists.
1506
1507 2006-04-19  Miguel de Icaza  <miguel@novell.com>
1508
1509         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
1510         twice, this was some residual code, the enumerator was emitted
1511         properly in the two branche of if later.
1512
1513         Fixes #78031
1514         
1515         Thanks to Martin for finding the source of the problem
1516         
1517 2006-04-19  Raja R Harinath  <rharinath@novell.com>
1518
1519         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
1520         cast is never an lvalue.
1521         (Cast.DoResolve, Cast.ResolveRest): Combine.
1522         (Argument.Emit): Simplify slightly.  Move 'Expr is
1523         IMemoryLocation' check ...
1524         (Argument.Resolve): ... here.
1525         (Argument.Error_LValueRequired): Remove.  Inline into only user.
1526
1527         Simplifications.  Fix cs0191-2.cs
1528         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
1529         CS1649 and CS1651 to ...
1530         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
1531         the actual selection of the error code and message to a lookup
1532         table.  Add a dummy return value to simplify callsites.
1533         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
1534         readonly fields of other instances of the same type.  Move CS0197
1535         warning from ...
1536         * expression.cs (Argument.Resolve): ... here.  Simplify code.
1537         Ensure that ec.InRefOutArgumentResolving is only set during LValue
1538         resolution of an out or ref argument.  The code simplification
1539         above uses this invariant.
1540
1541 2006-04-18  Raja R Harinath  <rharinath@novell.com>
1542
1543         Possibly fix #77752.  Fix cs1690-[4-7].cs.
1544         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
1545         CheckMarshallByRefAccess.  Drop parameter.
1546         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
1547         warning.
1548         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
1549         InstanceExpression.
1550         * report.cs (AllWarnings): Add CS1690.
1551         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
1552         for ref access too.
1553         (LocalVariableReference.DoResolveBase): Update.
1554
1555 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1556
1557         * class.cs (MethodOrOperator): Moved common parts from method class.
1558         detect obsolete attributes.
1559         (Method.Define): Simplified as it reuses code from base.
1560         (Constructor.ValidAttributeTargets): Fixed issue found during
1561         refactoring.
1562         (Destructor.ValidAttributeTargets): Fixed issue found during
1563         refactoring.
1564         (Operator): Finished refactoring set off by #78020. Operator class is now
1565         ordinary method class.
1566
1567         * anonymous.cs: Updated.
1568
1569 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1570
1571         * class.cs (Constructor.Emit): Don't emit the attributes twice.
1572
1573 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1574
1575         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
1576         detect obsolete attributes.
1577         (Method.CreateEmitContext): Moved to MethodOrOperator.
1578
1579 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1580
1581         A fix for #78048.
1582         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
1583         customized exception to make crash detection easier.
1584         (MethodOrOperator): Started to work on new base class for methods and
1585         operators.
1586         (Method): Derives from MethodOrOperator.
1587         (Constructor.Emit): Emits its own attributes.
1588         (AbstractPropertyEventMethod.Emit): Ditto.
1589         (Operator): Derives from MethodOrOperator, will refactor fully in extra
1590         patch.
1591         (Operator.Emit): It's temporary more tricky than should be.
1592         
1593         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
1594
1595         * report.cs (InternalErrorException): Add ctor with inner exception.
1596
1597 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
1598
1599         A fix for #76744.
1600         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
1601         only not visible.
1602
1603 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
1604
1605         A fix for #77916.
1606         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
1607         array.
1608
1609 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
1610
1611         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
1612         attribute is present and Guid not.
1613         (Interface.ApplyAttributeBuilder): Ditto.
1614
1615         * attribute.cs: Add error message.
1616
1617 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
1618
1619         A fix for #78020.
1620
1621         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
1622         sources (it's composite) so hold them in extra array as they are used in
1623         Emit phase only. It worked in the previous versions by mistake.
1624         (Attribute.Emit): Emit attribute for more owners when exist.
1625
1626         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
1627         it has now different behaviour.
1628
1629 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
1630
1631         * constant.cs (Constant.IsDefaultInitializer): New method.
1632
1633         * class.cs: Updated.
1634
1635         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
1636         re-initialize default values. It saves KBs almost for every assembly.
1637         Thanks Zoltan for the idea.
1638         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
1639         (ArrayCreation.DoResolve): Resolve only once.
1640         (ArrayCreation.Emit): Emit static initializer only when it is faster.
1641         (ArrayCreation.GetAttributableValue): Cope with optimized values.
1642
1643 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
1644
1645         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
1646         From #77961.
1647
1648 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
1649
1650         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
1651         in an embedded statement too.
1652
1653 2006-04-01  Raja R Harinath  <rharinath@novell.com>
1654
1655         Fix #77929
1656         * typemanager.cs (IsNestedChildOf): Drop generic arguments before
1657         testing.
1658
1659         Fix #77958
1660         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
1661
1662         Fix #77962
1663         * report.cs (SymbolRelatedToPreviousError): Drop generic type
1664         arguments before checking whether a type is reflected or not.
1665
1666         Fix #77954
1667         * expression.cs (Invocation.IsApplicable): Ensure a generic method
1668         definition doesn't take part in overload resolution.
1669         (Invocation.IsParamsMethodApplicable): Likewise.
1670         (Invocation.OverloadResolve): When replacing a reflected override
1671         method with its base definition, ensure that type arguments are
1672         applied.
1673
1674 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
1675
1676         A fix for #77966.
1677
1678         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
1679         was not specified.
1680
1681         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
1682
1683 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
1684
1685         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
1686         phase.
1687
1688         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
1689         LocalTemporary change.
1690
1691         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
1692         TypeContainer.
1693         (ClassOrStruct.DefineFieldInitializers): Implemented static field
1694         initializers optimization.
1695         (ClassOrStruct.TypeAttr): Moved from modifiers.
1696         (Constructor.CheckBase): Don't crash when static ctor has parameters.
1697         (FieldBase.ResolveInitializer): Resolves initializer.
1698         (FieldBase.HasDefaultInitializer): New property.
1699
1700         * cs-parser.jay: Removed message.
1701
1702         * expression.cs (CompilerGeneratedThis): New specialization.
1703
1704         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
1705
1706 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
1707
1708         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
1709
1710 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
1711
1712         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
1713         be now EnumConstants only.
1714
1715 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
1716
1717         * attribute.cs, driver.cs: Reset more caches.
1718
1719 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1720
1721         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
1722
1723 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1724
1725         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
1726         for easier reuse. Updated all overrides.
1727         (IntegralConstant): New base class for all integral constants.
1728         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
1729         of the constant range, report custom error.
1730         (UIntConstant.Reduce): Fixed uint conversion.
1731
1732         * ecore.cs, literal.cs: Reduce updates.
1733
1734 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1735
1736         A fix for #75813.
1737
1738         * class.cs (Constructor.Define): Removed extra if for default ctors.
1739         A patch from Atsushi Enomoto.
1740
1741 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1742
1743         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
1744         GetAttributableValue.
1745
1746         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
1747         when required.
1748
1749         * convert.cs (ImplicitConversionRequired): Error message moved to
1750         DoubleLiteral.
1751
1752         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
1753         automatic implicit conversion of an output value.
1754         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
1755
1756         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
1757         conversion.
1758         (TypeOf.GetAttributableValue): Add extra handling for object type.
1759
1760         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
1761         special error message.
1762
1763 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
1764
1765         * class.cs (Constructor.Emit): Don't crash when struct ctor is
1766         InternalCall.
1767         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
1768         compatible with MS runtime.
1769
1770 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
1771
1772         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
1773         attribute arguments here.
1774
1775         * class.cs (Indexer.Define): The check was moved to attribute class.
1776
1777 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
1778
1779         * expression.cs (StringConcat.Append): Reverted back to no warning state.
1780
1781 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
1782
1783         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
1784
1785         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
1786         the blocks too.
1787
1788 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
1789
1790         * doc-bootstrap.cs : fix build.
1791
1792 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
1793
1794         * expression.cs (StringConcat.Append): Issue a warning when empty string
1795         is going to append.
1796
1797 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
1798
1799         * assign.cs (CompoundAssign.ResolveSource): Removed.
1800
1801         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
1802         clean up.
1803
1804         * class.cs (TypeContainer.FindMethods): Removed.
1805         (TypeContainer.CheckMemberUsage): Made static.
1806
1807         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
1808
1809         * constant.cs (CheckRange): Removed unused type argument.
1810         (CheckUnsigned): Removed unused type argument.
1811
1812         * cs-parser.jay: Updated after MemberAccess clean up.
1813         Uses Length for empty string test.
1814
1815         * cs-tokenizer.cs: Uses Length for empty string test.
1816         (IsCastToken): Made static.
1817         (is_hex): Made static.
1818         (real_type_suffix): Made static.
1819
1820         * decl.cs (SetupCache): Made static.
1821         (OnGenerateDocComment): Removed unused ds argument.
1822
1823         * delegate.cs (VerifyDelegate): Removed unused argument.
1824
1825         * doc.cs: Uses Length for empty string test.
1826
1827         * driver.cs: Uses Length for empty string test.
1828
1829         * enum.cs (IsValidEnumType): Made static
1830
1831         * expression.cs (EnumLiftUp): Removed unused argument.
1832         (ResolveMethodGroup): Ditto.
1833         (BetterConversion): Ditto.
1834         (GetVarargsTypes): Ditto.
1835         (UpdateIndices): Ditto.
1836         (ValidateInitializers): Ditto.
1837         (MemberAccess.ctor): Ditto.
1838         (GetIndexersForType): Ditto.
1839
1840         * flowanalysis.cs: (MergeFinally): Removed unused argument.
1841
1842         * iterators.cs: Updated after MemberAccess clean up.
1843
1844         * location.cs: Uses Length for empty string test.
1845
1846         * namespace.cs: Uses Length for empty string test.
1847
1848          * report.cs (CheckWarningCode): Made static.
1849
1850         * statement.cs (LabeledStatement): Removed unused argument.
1851
1852         * typemanager.cs (FilterNone): Removed.
1853
1854 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1855
1856         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
1857         obsolete.
1858
1859         * class.cs: Updated.
1860
1861 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1862
1863         * cs-parser.jay.cs: __arglist is not allowed for delegates.
1864
1865 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1866
1867         A fix for #77816.
1868
1869         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
1870         host container.
1871         (AnonymousMethod.ImplicitStandardConversionExists): New method.
1872         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
1873         Add more error reporting; Fixed issue with params.
1874
1875         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
1876
1877         * cs-parser.jay: AnonymousMethod requires host container.
1878
1879         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
1880
1881 2006-03-18  Raja R Harinath  <harinath@gmail.com>
1882
1883         * class.cs: Change 'TypeContainer ds' constructor argument to
1884         'DeclSpace parent'.  Some classes were missed below due to
1885         different naming convention.
1886
1887         * class.cs (MemberCore.Parent): Delete.  This makes the
1888         ParentContainer changes below enforceable by the compiler.
1889
1890         Treat pointers to enclosing declaration space as 'DeclSpace', not
1891         'TypeContainer'.
1892         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
1893         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
1894
1895         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
1896         of TypeContainer.
1897         (Block.AddThisVariable): Likewise.
1898         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
1899         (AbstractPropertyEventMethod.Emit): Likewise.
1900         (AbstractPropertyEventMethod.EmitMethod): Likewise.
1901         (GetMethod.Define, SetMethod.Define): Likewise.
1902         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
1903         (DelegateMethod.EmitMethod): Likewise.
1904
1905         Fix regression test-partial-13.cs.
1906         Rationalize use of PartialContainer.  Ensure that the partial
1907         class semantics can be tied to type-correctness, i.e., any
1908         violation will cause a compile error.
1909         * class.cs, const.cs: Access all fields that belong to class
1910         TypeContainer via ParentContainer.  Arguments of EmitContexts and
1911         Resolve()-like functions still use 'Parent'.
1912
1913         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
1914         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
1915         (PropertyMethod.CheckModifiers): Remove unused argument.
1916         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
1917         DeclSpace.
1918
1919 2006-03-28  Raja R Harinath  <rharinath@novell.com>
1920
1921         * decl.cs (DeclSpace.LookupGeneric): Update to changes.
1922
1923 2006-03-17  Raja R Harinath  <harinath@gmail.com>
1924
1925         Make semantics of PartialContainer simpler.
1926         * decl.cs (DeclSpace.IsPartial): Remove.
1927         * class.cs (TypeContainer.IsPartial): Likewise.
1928         (TypeContainer..ctor): Set PartialContainer to point to self.
1929         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
1930         (TypeContainer.FindNestedType): Likewise.
1931         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
1932
1933 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
1934
1935         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
1936
1937 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
1938
1939         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
1940         classes.
1941
1942 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
1943
1944         * class.cs (Operator.Define): An error for base conversion was not
1945         reported correctly.
1946
1947 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
1948
1949         A fix for #77593, #77574.
1950
1951         * class.cs (MethodCore.CheckBase): Another if for operator.
1952
1953 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1954
1955         A fix for #77822.
1956
1957         * expression.cs (VerifyArgumentsCompat): Reverted to double error
1958         reporting, it's more tricky than I thought.
1959
1960 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
1961
1962         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
1963         were not resolved
1964
1965         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
1966         (DelegateCreation.ImplicitStandardConversionExists): New method for just
1967         conversion test.
1968         
1969         * ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
1970         not needed.
1971
1972 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
1973
1974         A fix for #77353.
1975
1976         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
1977         (Event.Define): ditto
1978         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
1979
1980         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
1981         Removed redundant code and set NewSlot for Invoke method too.
1982
1983         * parameter.cs (Parameters.ctor): Add custom, type ctor.
1984         (Parameters.MergeGenerated): New method. Use this method when you merge
1985         compiler generated argument with user arguments.
1986
1987 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
1988
1989         * attribute.cs (ResolveAsTypeTerminal): Removed.
1990
1991         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
1992         specialization for predefined types; 30% speed up.
1993         Finally placed obsolete check to right place.
1994         (Expression.ResolveType): Removed.
1995
1996         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
1997         Updated after ResolveType was removed.
1998
1999         * expression.cs (Cast.ctor): Check void cast.
2000         (Binary.ResolveAsTypeTerminal): Is never type.
2001         (Conditional.ResolveAsTypeTerminal): Is never type.
2002
2003         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
2004
2005 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
2006
2007         * rootcontext.cs (ResolveCore): Removed System.INullableValue.
2008
2009 2006-03-23  Martin Baulig  <martin@ximian.com>
2010
2011         * expression.cs (Is.DoResolve, As.DoResolve): Perform a dynamic
2012         type check if either of the types is an open generic type.
2013
2014 2006-03-23  Martin Baulig  <martin@ximian.com>
2015
2016         * convert.cs
2017         (Convert.ExplicitTypeParameterConversion): New method; implement
2018         explicit type parameter conversions.
2019
2020 2006-03-23  Martin Baulig  <martin@ximian.com>
2021
2022         * convert.cs (Convert.ImplicitTypeParameterConversion): Do not
2023         blindly allow all conversions if we do not have any constraints.
2024
2025 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
2026
2027         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
2028         these two separated members to simplify the code.
2029         (Attribute.Resolve): Refactored to use new fields and methods.
2030         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
2031         implemented obsolete attribute checking.
2032         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
2033         implemented obsolete checking again. It look line never ending quest ;-)
2034         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
2035
2036         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
2037
2038         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
2039
2040         *class.cs (Property.Define): Add RegisterProperty call.
2041
2042         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
2043         argument groups (only 2).
2044
2045         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
2046         encoding expression to arguments.
2047         (Expression.ExprClassToResolveFlags): Just turned to property.
2048
2049         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
2050         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
2051         optimized as well as implemented support for zero-length attributes.
2052
2053         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
2054         Add caching of PropertyInfo's.
2055
2056 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
2057
2058         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
2059         error multiple times.
2060
2061 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
2062
2063         New partial class implementation.
2064         A fix for #77027, #77029, #77403
2065
2066         * attribute.cs (Attributable): Made attributes protected.
2067
2068         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
2069         the replacements of ClassPart and PartialContainer.
2070         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
2071         (TypeContainer.AddInterface): Ditto.
2072         (TypeContainer.AddPartial): The main method for partial classes. It checks
2073         for errors and merges ModFlags and attributes. At the end class is added to
2074         partial_parts list.
2075         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
2076         required here.
2077         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
2078         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
2079         from the rest of partial classes.
2080         (TypeContainer.GetClassBases): Simplified.
2081         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
2082         DefineType.
2083         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
2084         (TypeContainer.HasExplicitLayout): Uses Flags now.
2085         (PartialContainer): Removed.
2086         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
2087         (StaticClass): Was merged with Class.
2088         (Class.GetClassBases): class and static class bases are verified here.
2089         (Class.TypeAttr): Added static attributes when class is static.
2090         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
2091         (MemberBase): In some cases we need to call parent container for partial
2092         class. It should be eliminated but it's not easy now.
2093
2094         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
2095
2096         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
2097         partial classed to accumulate class comments.
2098         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
2099
2100         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
2101
2102         * driver.cs (MainDriver): Tree.GetDecl was removed.
2103
2104         * modifiers.cs (Modifiers): Add partial modifier.
2105
2106         * tree.cs (Tree.decl): Removed.
2107         (RootTypes): Started to use this class more often for root types
2108         specializations.
2109
2110 2006-03-23  Raja R Harinath  <rharinath@novell.com>
2111
2112         * generic.cs (TypeParameter.UpdateConstraints): Update
2113         'constraints' if null.
2114
2115 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
2116
2117         A fix for #77615
2118
2119         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
2120         external interface does not have an attribute.
2121
2122 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
2123
2124         Another prerequisites for new partial classs implementation.
2125         
2126         * attribute.cs (Attribute.Equal): Implemented.
2127         (Attribute.Emit): Changed as attributes can be applied more than twice.
2128         (Attributes.Emit): Check for duplicate attributes here.
2129
2130         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
2131         as a parameter, clean-up.
2132
2133 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
2134
2135         A fix for #77485
2136
2137         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
2138         contains obsolete attribute check which can in some cases look for base
2139         type of current class which is not initialized yet.
2140         (TypeContainer.BaseType): Replacement of ptype.
2141
2142         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
2143
2144 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
2145
2146         First of prerequisites for new partial classs implemention.
2147         
2148         * attribute.cs (Attributable): Extended by ResolveContext;
2149         Attributes finally have correct context for resolving in all cases.
2150         (AttachTo): Attribute owner is assigned here.
2151
2152         * codegen.cs (IResolveContext): Introduce new interface to hold
2153         all information needed in resolving phase.
2154         (EmitContext): Implements IResolveContext; more clean-up needed here.
2155         
2156         * decl.cs (MemberCore): Implemented IResolveContext.
2157
2158         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
2159         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
2160         parameter.cs, statement.cs, tree.cs, typemanager.cs:
2161         Refactored to use new IResolveContext instead of EmitContext; cleanup
2162
2163 2006-03-22  Raja R Harinath  <rharinath@novell.com>
2164
2165         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
2166         mcs to keep code differences small.
2167         * attribute.cs (Attribute.GetParameterDefaultValue): New.
2168         * typemanager.cs (parameter_default_value_attribute_type): New.
2169         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
2170         CS1908 check.
2171
2172 2006-03-22  Martin Baulig  <martin@ximian.com>
2173
2174         * generic.cs
2175         (Nullable.NullableLiteral): Derive from `NullLiteral'.
2176
2177         * convert.cs
2178         (Convert.TypeParameter_to_Null): Create a `Nullable.NullableLiteral'
2179         instead of the normal `NullLiteral'.
2180
2181 2006-03-21  Martin Baulig  <martin@ximian.com>
2182
2183         Fix #77583.
2184         * generic.cs (TypeManager.InferType): If `pt' is a generic
2185         parameter, don't check whether `pt == at'.
2186
2187 2006-03-20  Raja R Harinath  <rharinath@novell.com>
2188
2189         Fix #77852
2190         * generic.cs (Constraints.Resolve): Change argument to IResolveContext.
2191         (TypeParameter.Resolve): Update to change.
2192         (ConstraintChecker.CheckConstraints): Resolve type-argument
2193         constraints before use.
2194
2195 2006-03-16  Martin Baulig  <martin@ximian.com>
2196
2197         * generic.cs
2198         (ConstraintChecker.HasDefaultConstructor): If we're a TypeBuilder
2199         and don't have any instance constructors, also lookup in the base class.
2200         (TypeManager.IsNullableValueType): New public method.
2201
2202         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Clear the
2203         `BindingFlags.DeclaredOnly' flag and set `used_cache'.
2204         (TypeManager.TryGetBaseDefinition): Use DropGenericMethodArguments().
2205
2206         * expression.cs (Unary.DoResolve): Use TypeManager.IsNullableValueType()
2207         instead of just TypeManager.IsNullableType() to determine whether
2208         a lifted operator exists.
2209         (UnaryMutator.DoResolve): Likewise.
2210         (Conditional.DoResolve): Likewise.
2211         (Binary.DoResolve): A lifted operator only exists if both operands
2212         are valuetypes and at least one of them is a nullable type.
2213
2214 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
2215
2216         * iterator.cs : yield break is allowed in try statement which has
2217           catch clauses. Fixed bug #77767.
2218
2219 2006-03-12  Martin Baulig  <martin@ximian.com>
2220
2221         * typemanager.cs (TypeManager.ArrayContainsMethod): Use a new
2222         private IsSignatureEqual() to compare types; see the comment in
2223         that method; fixes #77674.
2224
2225 2006-03-10  Raja R Harinath  <rharinath@novell.com>
2226
2227         * ecore.cs (Expression.ResolveAsTypeStep): Remove 1-argument wrapper.
2228         (Expression.ResolveAsTypeTerminal): Likewise.
2229         * class.cs, decl.cs, delegate.cs, ecore.cs: Update to changes.
2230         * expression.cs, generic.cs, iterators.cs: Likewise.
2231         * parameter.cs, statement.cs, typemanager.cs: Likewise.
2232
2233 2006-03-09  Martin Baulig  <martin@ximian.com>
2234
2235         * generic.cs (ConstraintChecker.HasDefaultConstructor): Call
2236         TypeManager.DropGenericTypeArguments() on the `atype'; fixes #77548.
2237
2238 2006-03-09  Martin Baulig  <martin@ximian.com>
2239
2240         * ecore.cs (FieldExpr.AddressOf): Don't emit the instance if the
2241         `prepared' flag is set.
2242
2243         * generic.cs (LiftedBinaryOperator): Don't allow `||' or `&&' anymore.
2244         (LiftedBinaryOperator, LiftedUnaryMutator): Fix a few nullable
2245         issues; see gtest-254.cs.
2246
2247 2006-03-07  Martin Baulig  <martin@ximian.com>
2248
2249         * generic.cs (TypeManager.InferType): Allow infering
2250         `IEnumerable<T>' with an array of T; see gtest-251.cs.
2251
2252 2006-03-06  Martin Baulig  <martin@ximian.com>
2253
2254         * generic.cs
2255         (TypeManager.InferType): Fix gtest-250.cs.
2256
2257         * typemanager.cs
2258         (TypeManager.IsSubclassOf): Also check the base class.
2259
2260         * expression.cs
2261         (Invocation.IsAncestralType): Use TypeManager.IsSubclassOf();
2262         fixes gtest-249.cs.
2263
2264 2006-03-01  Raja R Harinath  <rharinath@novell.com>
2265
2266         Fix #77679.
2267         * expression.cs (ParameterReference.DoResolveBase): Change return
2268         type to bool.
2269         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
2270         Update.
2271
2272         Fix #77628.
2273         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
2274
2275         Fix #77642.
2276         * typemanager.cs (GetFullNameSignature): Don't nullref on
2277         protected accessors.
2278
2279 2006-02-16  Martin Baulig  <martin@ximian.com>
2280
2281         * generic.cs
2282         (TypeManager.GetGenericFieldDefinition): New public method; use it
2283         instead of the `FieldInfo.Mono_GetGenericFieldDefinition()' icall.
2284
2285 2006-02-14  Martin Baulig  <martin@ximian.com>
2286
2287         * *.cs: Use `Type.IsGenericType' instead of `Type.IsGenericInstance'.
2288
2289 2006-02-14  Martin Baulig  <martin@ximian.com>
2290
2291         * generic.cs
2292         (TypeManager.DropGenericMethodArguments): New public method; don't
2293         use GetGenericMethodDefinition() on something which is not a
2294         generic method.
2295
2296 2006-02-14  Martin Baulig  <martin@ximian.com>
2297
2298         * generic.cs
2299         (ConstraintChecker.CheckConstraints): If a type parameter has the
2300         `struct' constraint, the type must be a non-nullable valuetype.
2301
2302 2006-02-10  Martin Baulig  <martin@ximian.com>
2303
2304         * typemanager.cs
2305         (TypeManager.IsOverride): Make this work for instantiated methods
2306         in a generic class; fixes #77509.
2307         (TypeManager.ExpandInterfaces): Use TypeManager.GetInterfaces()
2308         rather than calling it directly; fixes #77488.  
2309
2310 2006-02-08  Martin Baulig  <martin@ximian.com>
2311
2312         * generic.cs (ConstraintChecker.CheckConstraints): Move the error
2313         reporting into CheckConstraint() so we can use the correctly
2314         instantiated type.
2315
2316 2006-02-08  Martin Baulig  <martin@ximian.com>
2317
2318         * expression.cs (BaseAccess): Add support for generic methods.
2319
2320         * ecore.cs (MethodGroupExpr.ResolveGeneric): Propagate `IsBase' to
2321         the new MethodGroupExpr.
2322
2323 2006-02-07  Martin Baulig  <martin@ximian.com>
2324
2325         * generic.cs (ConstraintChecker.CheckConstraints): Interfaces are
2326         also reference types; fixes #77483.
2327
2328 2006-02-07  Martin Baulig  <martin@ximian.com>
2329
2330         * generic.cs
2331         (TypeManager.IsGenericMethod): We now return whether something is
2332         an instantiated generic method (and not a generic method def).
2333         (TypeManager.IsGenericMethodDefinition): New public method.
2334
2335         * typemanager.cs
2336         (TypeManager.CSharpSignature): Only include type arguments for
2337         "real" generic methods, not for any instantiated method.
2338         (TypeManager.GetMethodName): Likewise, but also allow generic
2339         method definitions here.
2340
2341 2006-02-06  Miguel de Icaza  <miguel@novell.com>
2342
2343         * codegen.cs (EmitScopeInitFromBlock): check here the
2344         capture_context, there is no need to make two calls to the
2345         EmitContext. 
2346
2347         * anonymous.cs: Add some debugging messages that might help me
2348         track other instances of this problem in the future (the
2349         regression of test 467).
2350
2351         * cs-parser.jay: track the variable block, as we need to initalize
2352         any captured variables declared in this block for the "catch"
2353         portion of the "Try" statement.
2354
2355         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
2356         scope initialization for captured variables. 
2357
2358         Also, move the emit for the variables after the block location has
2359         been marked.
2360
2361 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
2362
2363        * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
2364         
2365 2006-02-06  Martin Baulig  <martin@ximian.com>
2366
2367         * class.cs (TypeContainer.DefineType): If we're a struct, pass
2368         `TypeManager.value_type' as parent type to
2369         ModuleBuilder.DefineType().  Fixes #77358.      
2370
2371 2006-02-02  Miguel de Icaza  <miguel@novell.com>
2372
2373         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
2374         commit yesterday, the initialization for the roots is necessary.
2375         What is not necessary is the scope activation.
2376
2377 2006-02-02  Raja R Harinath  <rharinath@novell.com>
2378
2379         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
2380         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
2381         CS0206 checks.
2382         (Argument.Resolve): Remove CS0206 checks.
2383
2384 2006-02-01  Miguel de Icaza  <miguel@novell.com>
2385
2386         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
2387         scopes for all the roots, the scopes will now be emitted when the
2388         Blocks are entered. [This change was wrong, fixed on 2006-02-02]
2389
2390         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
2391         code.  This reduces a lot of existing cruft.
2392         
2393         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
2394         that the ScopeInfo is generated as we enter the scope, not at the
2395         time of use, which is what we used to do before.
2396
2397         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
2398         every time a Block is about to be emitted if we have a
2399         CaptureContext. 
2400
2401 2006-02-01  Raja R Harinath  <rharinath@novell.com>
2402
2403         * codegen.cs (AssemblyClass.Emit): Emit RuntimeCompatibility
2404         attribute for mscorlib too.
2405
2406         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
2407         (Reset): Update.
2408         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
2409
2410         * typemanager.cs (cons_param_array_attribute): Make private.
2411         (Reset): Set it to null.
2412         (InitCoreHelpers): Don't initialize it.
2413         (ConsParamArrayAttribute): New.  Initialize it as needed.
2414         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
2415
2416 2006-01-31  Miguel de Icaza  <miguel@novell.com>
2417
2418         * expression.cs: There might be errors reported during the
2419         selection of applicable methods.  If there are errors, do not
2420         continue execution as it will lead the compiler to crash.
2421
2422 2006-01-30  Miguel de Icaza  <miguel@novell.com>
2423
2424         * expression.cs: Member access is not allowed on anonymous
2425         methods.  Fixes #77402.
2426
2427 2006-01-30  Raja R Harinath  <rharinath@novell.com>
2428
2429         Fix #77401
2430         * cs-parser.jay (VariableDeclaration): Don't set
2431         current_array_type to null.
2432         (field_declaration, event_declaration, declaration_statement):
2433         Set it to null here.
2434
2435 2006-01-29  Raja R Harinath  <harinath@gmail.com>
2436
2437         Fix part of #77397
2438         * generic.cs (TypeManager.IsEqual): Handle pass-by-ref types.
2439
2440 2006-01-28  Raja R Harinath  <harinath@gmail.com>
2441
2442         * typemanager.cs (GenericParameterPosition): New.
2443         * doc.cs: Use it.
2444
2445 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
2446
2447         * doc.cs : To process "include" elements, first we should create
2448           another list than XmlNodeList, because it could result in node
2449           removal, which could result in that the XmlNodeList gives up
2450           yielding next node.
2451
2452 2006-01-25  Miguel de Icaza  <miguel@novell.com>
2453
2454         * expression.cs: Introduce an error report that we were not
2455         catching before.   Gonzalo ran into it.
2456
2457 2006-01-23  Miguel de Icaza  <miguel@novell.com>
2458
2459         A fix for bug: #76957
2460         
2461         * iterators.cs (MoveNextMethod.CreateMethodHost): call
2462         ComputeMethodHost before creating the method, this is a new
2463         requirement. 
2464
2465         * anonymous.cs (AnonymousContainer): Now we track all the scopes
2466         that this method references (RegisterScope).  The actual scope
2467         where the method is hosted is computed with the ComputeMethodHost
2468         before we create the method.
2469
2470         Moved the Deepest routine here.
2471
2472         (AnonymousContainer.ComputeMethodHost): New routine used to
2473         compute the proper ScopeInfo that will host the anonymous method.
2474
2475         (ScopeInfo): Deal with multiple roots.  The problem was that we
2476         did not have a unique root where all ScopeInfos could be hanged
2477         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
2478         of roots.  
2479
2480         Remove AdjustMethodScope which is now computed at the end.  Remove
2481         LinkScope which did a partial link, instead link all ScopeInfos
2482         before code generation from the new "LinkScopes" routine. 
2483
2484         Simplify all the Add* routines as they no longer need to maintain
2485         the tree, they just need to record that they are using variables
2486         from a ScopeInfo.
2487
2488         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
2489         routines to produce the forest of ScopeInfo trees.
2490
2491         * class.cs (TypeContainer.AppendMethod): This is just like
2492         AddMethod, but ensures that an interface implementation method
2493         (IEnumerable.XXX) is not inserted at the beginning of the queue of
2494         methods, but at the end.
2495
2496         We use this functionality to ensure that the generated MoveNext
2497         method in the iterator class is resolved/emitted before the
2498         enumerator methods created.   
2499
2500         This is required because the MoveNext method computes the right
2501         ScopeInfo for the method.  And the other methods will eventually
2502         need to resolve and fetch information computed from the anonymous
2503         method. 
2504
2505         
2506 2006-01-23  Raja R Harinath  <rharinath@novell.com>
2507
2508         Improve implementation of section 14.4.2.2 (Better function member).
2509         * expression.cs (Invocation.MoreSpecific): Compare all type
2510         arguments before deciding if one type is more specific than
2511         another.  Handle array types too.  Return the more specific type.
2512         (Invocation.BetterFunction): Add more tie-breaking rules from
2513         section 14.4.2.2.  Perform "more specific" check after
2514         other tie-breaking rules.  Compare all parameter types before
2515         choosing the "more specific" method.
2516
2517 2006-01-21  Raja R Harinath  <harinath@gmail.com>
2518             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
2519
2520         Fix rest of #76995.
2521         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
2522         the 'aliases' hash.
2523         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
2524         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
2525
2526 2006-01-18  Martin Baulig  <martin@ximian.com>
2527
2528         * class.cs (TypeContainer.AddToMemberContainer): Use
2529         `symbol.MemberName.MethodName' instead of just `symbol.Name';
2530         fixes #77124.
2531
2532 2006-01-18  Martin Baulig  <martin@ximian.com>
2533
2534         Fix #76417: a generic class may now have methods which may unify
2535         for some type parameter substitutions.
2536
2537         * class.cs (Method.IsDuplicateImplementation): Don't report CS0408
2538         for methods which may unify anymore.
2539
2540         * expression.cs (Invocation.MoreSpecific): New private static
2541         method; checks whether one method is more specific than another
2542         according to 14.4.2.2 of the spec.
2543         (Invocation.BetterFunction): Implement the tie-breaking rules from
2544         14.4.2.2 of the spec: if two methods unify for some type parameter
2545         substitution, we need to pick the more specific one.
2546
2547 2006-01-18  Raja R Harinath  <rharinath@novell.com>
2548
2549         Fix #76656, cs0231-2.cs.
2550         * cs-parser.jay (formal_parameter_list): Make error case catch
2551         more issues.
2552         (parenthesized_expression_0): Add CS1026 check.
2553         (invocation_expression): Remove unused { $$ = lexer.Location }.
2554
2555 2006-01-17  Raja R Harinath  <rharinath@novell.com>
2556
2557         Fix #76824.
2558         * cs-parser.jay (statement_expression): Don't list out the
2559         individual statement-expressions.  Convert syntax error into
2560         CS0201 check.
2561
2562 2006-01-16  Raja R Harinath  <rharinath@novell.com>
2563
2564         Fix #76874.
2565         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
2566         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
2567         CheckIntermediateModification.
2568         (FieldExpr.DoResolve): Add new two-argument version that
2569         allows us to resolve the InstanceExpression as an lvalue.
2570         The one-argument variant is now just a wrapper.
2571         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
2572         Resolve the lhs as an lvalue if the it has a value type.
2573         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
2574         from Assign.DoResolve.
2575         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
2576         resolved as an lvalue.
2577         (PropertyExpr.DoResolve): Update.
2578         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
2579         has a value type.  Move CS1612 check here from
2580         CheckIntermediateModification.
2581         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
2582         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
2583         'right_side' of a ResolveLValue on an 'out' argument.
2584         (EmptyExpression.LValueMemberAccess): New.  Used as the
2585         'right_side' of a propagated ResolveLValue on a value type.
2586         (LocalVariableReference.DoResolveBase): Recognize
2587         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
2588         Add CS1654 check.
2589         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
2590         EmptyExpression.Null.
2591
2592 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
2593
2594         * typemanager.cs : added IsGenericParameter(). In gmcs it returns
2595           Type.IsGenericParameter(). Fixed bug #77183.
2596         * doc.cs : it is now identical to doc.cs in mcs.
2597
2598 2006-01-16  Martin Baulig  <martin@ximian.com>
2599
2600         * generic.cs (ConstraintChecker.CheckConstraint): Fix #77167.
2601
2602 2006-01-16  Martin Baulig  <martin@ximian.com>
2603
2604         * typemanager.cs (TypeManager.CSharpSignature): Make this work for
2605         ctors; fixes #77250.
2606
2607 2006-01-12  Miguel de Icaza  <miguel@novell.com>
2608
2609         This fixes the problem where we used ldfld instead of ldflda to
2610         load the "THIS" pointer on captured parameters, when THIS is a
2611         value type.  See bug #77205.
2612         
2613         * iterators.cs (CapturedThisReference.Emit): Pass false to
2614         EmitThis (we do not need the address).
2615
2616         * codegen.cs (EmitThis): it needs to know whether we need the
2617         address of `this' or not.  This is used by value types.  
2618
2619         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
2620         every other call passes false.
2621
2622 2006-01-12  Raja R Harinath  <rharinath@novell.com>
2623
2624         Fix #77221.
2625         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
2626         GetOverride.
2627         * expression.cs (Invocation.OverloadResolve): Update.
2628         (Invocation.DoResolve): Avoid double resolution of invocation.
2629
2630 2006-01-11  Raja R Harinath  <rharinath@novell.com>
2631
2632         Fix #77180.
2633         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
2634         unary negation of floating point types as 0-expr; negation cannot
2635         overflow in floating point types.
2636
2637         Fix #77204.
2638         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
2639         on operands of 'void' type.
2640
2641         Fix #77200.
2642         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
2643         and ExclusiveOr for boolean constants too.
2644
2645 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
2646
2647         * expression.cs: Fix Console.WriteLine ((this = x).foo);
2648
2649 2006-01-12  Miguel de Icaza  <miguel@novell.com>
2650
2651         * cs-tokenizer.cs (Position): New class used to save and restore
2652         the position state in the tokenizer.  Before this patch the save
2653         and restore was not complete enough so the line and columns would
2654         start to drift and the debugger and stack traces will get the
2655         wrong data.
2656
2657 2006-01-10  Martin Baulig  <martin@ximian.com>
2658
2659         * generic.cs
2660         (TypeParameter.InflateConstraints): New public method.
2661
2662         * iterators.cs (Iterator.DefineNestedTypes): Also inflate the
2663         constraints; fixes #77042.
2664
2665 2006-01-10  Martin Baulig  <martin@ximian.com>
2666
2667         * anonymous.cs (ScopeInfo.EmitScopeType): Use the `CurrentType'
2668         instead of the `TypeBuilder' for this "<>THIS" variable; fixes
2669         #77061. 
2670
2671 2006-01-09  Raja R Harinath  <rharinath@novell.com>
2672
2673         Fix #75636.
2674         * expression.cs (Invocation.OverloadResolve): Replace reflected
2675         override methods with their base virtual methods, rather than
2676         skipping over them.
2677         * typemanager.cs (TypeManager.GetOverride): New.
2678
2679 2005-12-21  Miguel de Icaza  <miguel@novell.com>
2680
2681         * driver.cs: Report the case of no source files and no -out:
2682         argument provided.
2683
2684 2005-12-20  Raja R Harinath  <rharinath@novell.com>
2685
2686         Fix #77035.
2687         * expression.cs (ComposedCast.GetSignatureForError): Define.
2688
2689 2006-01-05  Jb Evain  <jbevain@gmail.com>
2690
2691         * class.cs (Property.Define, Indexer.Define): do not tag the
2692         properties as SpecialName | RTSpecialName.
2693
2694 2006-01-04  Miguel de Icaza  <miguel@novell.com>
2695
2696         * class.cs (MethodCore.IsDuplicateImplementation): This method was
2697         doing a low-level comparission of parameter types.  It was lacking
2698         a check for __argslist. 
2699
2700 2005-12-30  Miguel de Icaza  <miguel@novell.com>
2701
2702         * expression.cs (ParameterReference.DoResolveBase): Allow
2703         reference parameters if they are local to this block. 
2704
2705         This allows the ref and out parameters of a delegate to be used in
2706         an anonymous method, for example:
2707
2708         delegate void set (out int x);
2709
2710         set s = delegate (out int x){
2711                 x = 0;
2712         };
2713
2714         This is used by functionality introduced late in the C# language.
2715         
2716         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
2717         method that take ref and out parameters. 
2718
2719         Fixes #77119 which was a late change in the spec.
2720
2721 2005-12-23  Miguel de Icaza  <miguel@novell.com>
2722
2723         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
2724         parent if its the same scope.  Fixes #77060.
2725
2726 2005-12-22  Marek Safar  <marek.safar@seznam.cz>
2727
2728         * expression.cs (ComposedCast.DoResolveAsTypeStep): Fixed wrong merge.
2729
2730 2005-12-21  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2731
2732         * codegen.cs (AssemblyClass.CheckInternalsVisibleAttribute): Generate
2733         errors 1726 for strong named assemblies with InternalsVisibleToAttribute 
2734         that doesn't contain the full public key. This is a update of the
2735         friend assemblies in .Net 2.0 release.
2736         
2737 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
2738
2739         Fix #76995
2740
2741         * namespace.cs (NamespaceEntry): Add extern_aliases as a
2742         ListDictionary, to contain the ExternAliasEntry entries (in
2743         addition to the NamespaceEntry.aliases hashtable). This field is
2744         shared between the original entry and its doppelganger (bodyless 
2745         copy of it).
2746         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
2747         extern_aliases field.
2748         (NamespaceEntry.Lookup): Move the IsImplicit check after the
2749         lookup in extern_aliases.
2750
2751 2005-12-16  Raja R Harinath  <rharinath@novell.com>
2752
2753         Fix #77006.
2754         * class.cs (TypeContainer.Mark_HasEquals): New.
2755         (TypeContainer.Mark_HasGetHashCode): New.
2756         (ClassPart): Override them.
2757         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
2758
2759         * generic.cs (GenericMethod.DefineMembers): Update to changes.
2760         (TypeParameter.TypeParameter): Change type of 'parent' argument to
2761         DeclSpace.
2762
2763         Fix #77008.
2764         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
2765         'parent' argument to the base constructor.
2766
2767         Remove all mention of TypeContainer from decl.cs.
2768         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
2769         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
2770         (DeclSpace.DeclSpace): Likewise.
2771         (DeclSpace.DefineMembers): Remove unused argument.
2772         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
2773         debugging check -- we don't care if the debug code throws an
2774         InvalidCastException instead of an InternalErrorException.
2775         * class.cs (TypeContainer.DefineMembers): Update to changes.
2776         (TypeContainer.DoDefineMembers): Likewise.
2777         (TypeContainer.GetMethods): Likewise.
2778         (PropertyMember.Define): Likewise.
2779         (MemberBase.Parent): New property that forwards to
2780         MemberCore.Parent, but ensures that we get a TypeContainer.
2781         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
2782         (RootContext.PopulateTypes): Likewise.  Remove special case code
2783         for !RootContext.StdLib: DefineMembers is idempotent.
2784
2785 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
2786
2787         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
2788
2789 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
2790
2791         * doc.cs : The search for referenced namespace was insufficient to
2792           get global one as it used to do. Fixed bug #76965.
2793
2794 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
2795
2796         * doc.cs : check name in cref in the last phase that whether it is
2797           namespace or not.
2798
2799 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2800
2801         * cs-tokenizer.cs : reverted the latest change: it somehow broke
2802           Mono.C5.
2803
2804 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2805
2806         * doc.cs : so it turned out that we cannot skip override check for 
2807           interface members. Fixed bug #76954.
2808
2809 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2810
2811         * cs-tokenizer.cs : fixed bug #75984:
2812           - #warning and #error should not be handled when the source line
2813             is disabled.
2814           - #line is not checked strictly when the source line is disabled.
2815           - #define and #undef is on the other hand checked strictly at any
2816             state.
2817
2818 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
2819
2820         * cs-tokenizer.cs : missing Location (actually, filename) in one of
2821           CS1027 report.
2822
2823 2005-12-15  Raja R Harinath  <rharinath@novell.com>
2824
2825         * generic.cs (TypeManager.IsGeneric): Remove unused method.
2826
2827         * typemanager.cs (TypeManager.GetFullName): Rewrite to handle
2828         nested types.
2829
2830 2005-12-14  Martin Baulig  <martin@ximian.com>
2831
2832         * typemanager.cs (TypeManager.GetFullName): Make this public;
2833         `Type.Fullname' now never returns null.
2834
2835         * class.cs (Method.Define): Use TypeManager.GetFullName() for
2836         explicit interface implementations; we're now using the same
2837         naming convention than csc does.
2838
2839 2005-12-14  Miguel de Icaza  <miguel@novell.com>
2840
2841         * convert.cs (ExplicitConversionCore): Check the return value from
2842         ExplicitConversionCore which can return null on failure.  Fixes #76914
2843
2844 2005-12-09  Raja R Harinath  <rharinath@novell.com>
2845
2846         * anonymous.cs (AnonymousMethod.Compatible): Use IsGenericType
2847         instead of IsGenericInstance.
2848         * generic.cs (TypeManager.IsEqual): Likewise.  Delete redundant
2849         code that's now covered by the more general test.
2850         * typemanager.cs (TypeManager.IsPrivateAccessible): Likewise.
2851
2852         * generic.cs (DropGenericTypeArguments): New.  Captures the common
2853         pattern: if (t.IsGenericInstance) t = t.GetGenericTypeDefinition ();
2854         * attribute.cs, class.cs, decl.cs, ecore.cs: Use it.
2855         * generic.cs, report.cs, typemanager.cs: Likewise.
2856
2857 2005-12-08  Martin Baulig  <martin@ximian.com>
2858
2859         * generic.cs (TypeArguments.Resolve): Added CS1547 check.
2860
2861         * typemanager.cs (TypeManager.CSharpSignature): Include type
2862         arguments in the signature of a generic method.
2863
2864 2005-12-07  Martin Baulig  <martin@ximian.com>
2865
2866         Add support for custom attributes on type parameters.
2867
2868         * cs-parser.jay (type_arguments): Added `opt_attributes'.
2869
2870         * generic.cs (TypeParameterName): New public class; we use this
2871         instead of a `string' to store the name of a type parameter, so we
2872         can also have `Attributes'.
2873         (TypeArguments.GetDeclarations): Return a `TypeParameterName[]'
2874         array instead of a `string[]' array.
2875         (TypeParameter.ctor): We now also take an `Attributes' argument.
2876         (TypeParameter.EmitAttributes): New public method; emit our
2877         `OptAttributes' here.
2878         (GenericMethod.EmitAttributes): New public method; emit the custom
2879         attributes on all our type parameters.
2880
2881         * class.cs (TypeContainer.EmitType): Call EmitAttributes() on all
2882         our type parameters.
2883         (MethodData.Define): If we're a generic method, call
2884         EmitAttributes() on it.
2885
2886 2005-12-07  Martin Baulig  <martin@ximian.com>
2887
2888         * generic.cs
2889         (ConstraintChecker): New public abstract class; move the
2890         constraint checking here from `ConstructedType' and also do
2891         constraint checking for generic methods here.
2892
2893         * expression.cs (Invocation.OverloadResolve): Use
2894         ConstraintChecker.CheckConstraints() if we resolved to a generic
2895         method.  Fix #76806.
2896
2897 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2898
2899         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
2900
2901         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
2902         event initializers.
2903         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
2904         (FieldBase.Initializer): Initializer is now optional.
2905         (EventField.Define): Only event field can have initializer.
2906
2907         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
2908
2909         * const.cs (Const): Reuse initializer.
2910
2911         * cs-parser.jay: Updated after FieldBase changes.
2912         Added current_array_type to simplify array initializers.
2913
2914         * ecore.cs (NullCast.IsDefaultValue): Implemented.
2915
2916         * expression.cs, iterators.cs: Updated.
2917
2918         * namespace.cs (NamespaceEntry): Made UsingFound private.
2919
2920 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2921
2922         * parameterCollection.cs: Obsolete, removed.
2923         * parser.cs: Obsolete, removed.
2924
2925 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2926
2927         Fix #76849.
2928         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
2929
2930         * enum.cs (Enum.Define): Set obsolete context here.
2931
2932 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
2933
2934         * doc.cs :
2935           - FindDocumentedMember() now expects 1) paramList as null
2936             when "we don't have to check the number of parameters" and
2937             2) Type.EmptyTypes when "there is no arguments".
2938           - Introduced FoundMember struct to hold the exact type which was
2939             used to find the documented member (the above change broke
2940             test-xml-044; it might be better just to use DeclaringType than
2941             what MS does, like this change does, but it depends on usage.)
2942
2943 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
2944
2945         * doc.cs : documented member might be from DeclaringType for nested
2946           types. Fixed bug #76782.
2947
2948 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
2949
2950         * anonymous.cs: Have the param code handle leaving copies on the
2951         stack etc. Allows anonymous params to take part in the assignment
2952         code (++, +=, etc). Fixes bug #76550
2953
2954         * expression.cs: Handle the prepare_for_load/leave_copy by passing
2955         it down to the anon code.
2956
2957         * iterators.cs: Use dummy var here
2958
2959         * codegen.cs: Handle new vars
2960
2961 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
2962
2963         Fix #76849.
2964         * class.cs (MethodData.Define): Set proper Obsolete context.
2965
2966         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
2967         obsolete context.
2968         (FieldExpr.DoResolve): Ditto.
2969
2970 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
2971
2972         Fix #76849.
2973         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
2974         parent is not obsolete.
2975
2976 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
2977
2978         * doc.cs : (FindDocumentedMember) find parameterless members first
2979           and get CS0419 in the early stage. Fixed first case of bug #76727.
2980
2981 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
2982
2983         Fix #76859.
2984         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
2985         no error was reported.
2986
2987         *expression.cs (Binary.DoResolve): left can be null.
2988
2989 2005-12-06  Raja R Harinath  <rharinath@novell.com>
2990
2991         * class.cs (MethodCore.CheckGenericOverride): Delete unused
2992         abstract method and all overrides.
2993         * support.cs (ParameterData.GenericConstraints): Delete.
2994         (ReflectionParameters.type_params): Delete.
2995         (ReflectionParameters.ReflectionParameters): Make private.
2996         (ReflectionParameters.GetConstaints): New factory method.
2997         * generic.cs (TypeParameterDefineType): Use it.
2998         (TypeManager.GetTypeParameterConstraints): Likewise.
2999
3000 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
3001
3002         Fix #76783.
3003         * class.cs (MethodData.Emit): Parameters should be labeled first.
3004
3005 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
3006
3007         Fix #76761.
3008         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
3009
3010 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
3011
3012         * attribute.cs (AreParametersCompliant): Moved to Parameter.
3013
3014         * class.cs (MethodCore): Parameter clean up.
3015         (IMethodData): Added ParameterInfo.
3016         (MethodData): Parameter clean up.
3017         (Indexer.Define): Parameter clean up.
3018
3019         * anonymous.cs,
3020         * codegen.cs,
3021         * cs-parser.jay,
3022         * decl.cs,
3023         * doc.cs,
3024         * ecore.cs,
3025         * flowanalysis.cs,
3026         * iterators.cs,
3027         * pending.cs,
3028         * statement.cs,
3029         * typemanager.cs: Parameter clean up.
3030
3031         * delegate.cs (Define): Get rid of duplicated code.
3032
3033         * expression.cs (ParameterReference): Removed useless parameters
3034         and simplified.
3035         (Invocation): Ditto.
3036
3037         * parameter.cs (ParamsParameter): New class, params specialization.
3038         (ArglistParameter): Attemp to separate arglist.
3039         (Parameter): Refactored to be reusable and faster.
3040         (Parameter.Modifier): Made understandable.
3041         (Parameters): Changed to be used as a class for `this' assembly
3042         parameters. Refactored to use new specialized classes.
3043
3044         * support.cs (ParameterData): Added Types property.
3045         (InternalParameters): Deleted.
3046
3047 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
3048
3049         * doc.cs : the previous patch does not actually fix the bug.
3050           PropertyInfo override check is now implemented and really fixed it.
3051         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
3052
3053 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
3054
3055         * doc.cs : apply "override filter" also to properties.
3056           Fixed bug #76730.
3057
3058 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
3059
3060         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
3061           no need to check overrides. For classes, omit those results from 
3062           interfaces since they must exist in the class. Fixed bug #76726.
3063
3064 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
3065
3066         * typemanager.cs : (GetFullNameSignature) differentiate indexers
3067           with different parameters. Fixed the second problem in #76685.
3068
3069 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
3070
3071         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
3072           get expected 'protected' access in CheckValidFamilyAccess()).
3073           Fixed bug #76692.
3074
3075 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
3076
3077         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
3078           Fixed bug #76705.  CS1569 was incorrectly commented out.
3079
3080 2005-11-23  Martin Baulig  <martin@ximian.com>
3081
3082         * generic.cs (Constraints.Define): Removed.
3083         (TypeParameter.DefineConstraints): Removed.
3084         (TypeParameter.DefineType): Call SetGenericParameterAttributes()
3085         on the GenericTypeParameterBuilder here.
3086
3087 2005-11-23  Martin Baulig  <martin@ximian.com>
3088
3089         * typemanager.cs (TypeManager.GetProperty): Make this public.
3090
3091         * generic.cs (Nullable.NullableInfo.ctor): Use
3092         TypeManager.GetProperty() rather than using reflection directly.
3093
3094 2005-11-17  Martin Baulig  <martin@ximian.com>
3095
3096         * expression.cs (Indexers.GetIndexersForType): Added support for
3097         generic parameters; fixes #76587.
3098
3099 2005-11-17  Martin Baulig  <martin@ximian.com>
3100
3101         * anonymous.cs
3102         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
3103         inherit the scope from our parent.  Fixes #76653.
3104
3105 2005-11-15  Martin Baulig  <martin@ximian.com>
3106
3107         * anonymous.cs (ScopeInfo.ScopeType): New public field; use this
3108         instead of `ScopeTypeBuilder' to refer to the "current" type.
3109         (AnonymousMethod.CreateScopeType): Correctly create the helper
3110         class if we're inside a generic type definition.
3111
3112 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
3113
3114         * doc.cs : use Invocation.IsOverride() to do real override check.
3115         * expression.cs : made Invocation.IsOverride() internal.
3116
3117 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
3118
3119         * doc.cs : use TypeManager.FindMembers() instead of (possible)
3120           TypeBuilder.FindMembers() and filter overriden base members out.
3121           Fixed bug #76990.
3122
3123 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
3124
3125         * doc.cs : ref/out parameters are represented as '@' (instead of
3126           '&' in type FullName). Fixed bug #76630 (additionally crefs).
3127
3128 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
3129
3130         * doc.cs : when there was no '.' in cref to methods in doc comment,
3131           then parameters were missing in the output. Fixed bug #76691.
3132
3133 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
3134
3135         * driver.cs : don't output docs when there is an error.
3136           Fixed bug #76693.
3137
3138 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
3139
3140         * doc.cs :
3141           Now it should detect indexers. Fixed primary concern in bug #76685.
3142           Fixed CS0419 message to not show the identical member signature in
3143           the message.
3144
3145 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
3146
3147         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
3148           instead of Type.FindMembers() since it does not handle events.
3149           Fixed bug #71604.
3150
3151 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
3152
3153         * codegen.cs: Fixed typo (speficied -> specified).
3154
3155 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
3156
3157         Fix #76369.
3158         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
3159
3160 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
3161
3162         * attribute.cs: Changed error message.
3163
3164         * cs-tokenizer.cs: One more check.
3165
3166 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
3167
3168         * statement.cs (Block.Resolve): Ignore empty statement.
3169
3170 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
3171
3172         * report.cs: Made error/warning methods more strict to avoid
3173         their misuse.
3174
3175         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
3176         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
3177         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
3178         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
3179
3180 2005-11-11  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3181
3182         * codegen.cs (AssemblyClass.CheckInternalsVisibleAttribute): 
3183         Use the more explicit AssemblyName.FullName instead of 
3184         AssemblyName.Name to report errors.
3185         
3186 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
3187
3188         * attribute.cs, class.cs, cs-tokenizer.cs, parameter.cs: Sync
3189         with mcs.
3190
3191 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
3192
3193         * class.cs,
3194         * convert.cs,
3195         * cs-parser.jay,
3196         * decl.cs,
3197         * enum.cs,
3198         * expression.cs,
3199         * generic.cs,
3200         * pending.cs,
3201         * report.cs: Fixed error reporting and typos.
3202
3203         * generic.cs (TypeParameter.GetSignatureForError): New method.
3204         (ConstructedType.GetSignatureForError): Instead of DeclarationName.
3205
3206         * typemanager.cs (GetFullName): Refactored.
3207
3208 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
3209
3210         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
3211         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
3212
3213         * class.cs (TypeContainer.IsComImport): New property.
3214         (Constructor.Define): Create proper ctor for ComImport types.
3215
3216         * expression.cs (New.CheckComImport): Fixed.
3217
3218 2005-11-07  Miguel de Icaza  <miguel@novell.com>
3219
3220         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
3221         that a parameter has been captured does not mean that we do not
3222         have to do the rest of the processing.  This fixes the second part
3223         of #76592.  If there was another anonymous method capturing
3224         values in the past, the Scope would never be set for the second
3225         method that captured the same parameter.
3226
3227         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
3228         properly manipulate the stack.   Second part of fix for #76592.
3229
3230         * expression.cs (New): Add support for invoking "new" on
3231         interfaces that have been flagged with the ComImport attribute and
3232         the CoClass.  Fixes #76637 
3233
3234         * statement.cs (Try.DoEmit): When a variable is captured, do not
3235         try to emit the vi.LocalBuilder variable as it has been captured.
3236         Create a temporary variable and store the results on the
3237         FieldBuilder.  Fixes #76642
3238
3239 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3240
3241         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
3242
3243         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
3244
3245         * expression.cs (Binary.DoResolve): Added && optimalization.
3246     
3247         * typemanager.cs (AddUserType): Removed useless argument.
3248
3249 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
3250
3251         * statement.cs (Block.variables): Uses ListDictionary.
3252
3253 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
3254
3255         Fix #75969.
3256         * class.cs (PartialContainer.EmitType): Customized to emit
3257         security attributes.
3258         (ClassPart.ApplyAttributeBuilder): Transform security attribute
3259         for partial classes.
3260
3261 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
3262
3263         Fix #76599.
3264         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
3265         access has to be fixed.
3266         
3267         * typemanager.cs (IsUnmanagedType): Wrong common field type.
3268
3269 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
3270
3271         Fix #76590.
3272         * ecore.cs (NullCast.Reduce): Implemented.
3273
3274         * expression.cs (ArrayCreation.CheckIndices): Correcly check
3275         constant type.
3276         
3277         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
3278         properly.
3279         (Foreach.Resolve): Catch null properly.
3280
3281 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
3282  
3283         * cs-tokenizer.cs: Warning text fix.
3284
3285         * driver.cs: AllWarningNumbers exposed on public interface.
3286
3287         * report.cs (): Reviewed warning numbers.
3288         (IsValidWarning): Use binary search.
3289
3290 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
3291  
3292         * driver.cs: Implemeted resource visibility.
3293         (Resources): New class for code sharing between /res: and
3294         /linkres:
3295  
3296 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3297
3298         decl.cs (CurrentTypeParameters): Fixed to be public.
3299
3300 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3301
3302         generic.cs, rootcontext.cs: Removed NewConstraintAttribute.
3303
3304 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3305
3306         gmcs.exe.sources: Use CryptoConvert.cs from corlib.
3307
3308 2005-11-05  Kornél Pál  <kornelpal@hotmail.com>
3309
3310         * gmcs.exe.config: Updated runtime version to v2.0.50727 (2.0 RTM).
3311
3312 2005-11-04  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3313
3314         Add friend assembly access support.
3315         * typemanager.cs: assembly_internals_vis_attrs
3316         cache for friend assembly access. 
3317         (TypeManager.IsFriendAssembly): New method for
3318         checking friend assembly access.
3319         (TypeManager.Error_FriendAccessNameNotMatching): New
3320         helper method.
3321         (TypeManager.CompareKeyTokens): Likewise.
3322         (TypeManager.Filter): Handle friend accessible
3323         members.
3324
3325         * namespace.cs (RootNamespace.GetTypeInAssembly): Return
3326         friend accessible types.
3327
3328         * ecore.cs (Expression.IsAccessorAccessible): Handle
3329         friend accessible properties.
3330
3331         * decl.cs (DeclSpace.CheckAccessLevel): Handle friend
3332         accessible types.
3333         
3334 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
3335
3336         Fix #76568.
3337         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
3338         folding.
3339         
3340         * convert (Convert.ImplicitReferenceConversion): NullCast holds
3341         contants only.
3342         
3343         * ecore.cs (NullCast): Child is contant only.
3344         
3345         * literal.cs (NullLiteral.Reduce): null can be converted to any
3346         reference type.
3347
3348 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
3349
3350         * driver.cs: Use Encoding.Default as default code page instead
3351           of ISO-28591.
3352
3353 2005-10-27  Raja R Harinath  <rharinath@novell.com>
3354
3355         Fix #76085.
3356         * expression.cs (Invocation.Error_InvalidArguments): Handle
3357         __arglist parameters.
3358         (Invocation.VerifyArgumentsCompat): Likewise.
3359         * support.cs (ReflectionParameters.GetSignatureForError): Print
3360         __arglist parameters.
3361         (InternalParamters.GetSignatureForError): Likewise.
3362         * parameter.cs (Parameters.GetSignatureForError): Likewise.
3363
3364 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
3365
3366         * attribute.cs (GetPropertyValue): Made public.
3367
3368         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
3369         Resolve.
3370         Add new property WrapNonExceptionThrows to handle 2.0 assembly
3371         attribute.
3372         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
3373         is not defined.
3374         
3375         * driver.cs: Reflect method name change.
3376         
3377         * statement.cs (Try.Resolve): Warn when try has both general
3378         exception handlers.
3379         
3380         * typemanager.cs: runtime_compatibility_attr_type new predefined
3381         type.
3382
3383 2005-10-26  Raja R Harinath  <harinath@gmail.com>
3384
3385         Fix #76419.
3386         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
3387         treat it as an empty parameter list.
3388
3389 2005-10-26  Raja R Harinath  <rharinath@novell.com>
3390
3391         Fix #76271.     
3392         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
3393         ResolveAsTypeStep silent.
3394         * statement.cs (Block.AddConstant): Mark block as used.
3395         (Block.ResolveMeta): Avoid piling on error messages
3396         if a constant initializer resolution fails.
3397
3398 2005-10-25  Raja R Harinath  <rharinath@novell.com>
3399
3400         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
3401         Remove.
3402         (NamespaceEntry.VerifyAllUsing): New.
3403         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
3404         behaviour.  Delegates actual resolution of alias to ...
3405         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
3406         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
3407         Update.
3408         * driver.cs (Driver.MainDriver): Update.
3409         
3410         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
3411         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
3412         property.
3413         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
3414         Remove.
3415         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
3416         RootNamespace.DefineNamespacesForAll.
3417
3418 2005-10-24  Raja R Harinath  <harinath@gmail.com>
3419
3420         * typemanager.cs (assemblies, external_aliases, modules)
3421         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
3422         (ComputeNamespaces, GetRootNamespace): Remove extra staging
3423         overhead.  Move resposibility ...
3424         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
3425         * driver.cs, attribute.cs, codegen.cs: Update to changes.
3426
3427 2005-10-23  Raja R Harinath  <harinath@gmail.com>
3428
3429         * namespace.cs (RootNamespace.all_namespaces): Renamed from
3430         cached_namespaces.  Improve usage.
3431         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
3432         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
3433         Move from GlobalRootNamespace and simplify.
3434         (RootNamespace.Global): Make instance variable.
3435         (RootNamespace.RootNamespace): Add "alias name" parameter.
3436         (GlobalRootNamespace): Simplify drastically.
3437         (Namespace.Lookup): Don't use GetNamespace.
3438         * typemanager.cs (GetRootNamespace): Rename from
3439         ComputeNamespaceForAlias.
3440         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
3441
3442 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3443
3444         * anonymous.cs (AnonymousContainer): Don't crash when container
3445         doesn't exist.
3446
3447 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3448
3449         * expression.cs (Binary.DoResolve): Warn when comparing same
3450         values.
3451
3452 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3453
3454         Fix #76486.
3455         * expression.cs (Binary.DoResolve): It looks like there are no
3456         convetsion rules in enum context.
3457
3458 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3459
3460         Add support for extern alias qualifiers.
3461         * typemanager.cs: Move some LookupTypeReflection code
3462         to namespace.cs, to have cleaner code. Added some methods
3463         to help us keep track of the extern aliased references.
3464         * driver.cs: Add suport for extern alias assemblies on command
3465         line and check for their warnings/errors. Also keep track of the
3466         extern aliased assemblies.
3467         * namespace.cs: Move the global functionality of Namespace
3468         to GlobalRootNamespace/RootNamespace. Now the global namespace
3469         is GlobalRootNamespace.Globa. Also the code moved from 
3470         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
3471         Finally added LocalAliasEntry (AliasEntry before) and
3472         ExternAliasEntry, to handle alias statements.
3473         * cs-parser.jay: Add support in the grammar for extern alias
3474         statement.
3475         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
3476         Update callings to Namespace (now in GlobalRootNamespace).
3477
3478 2005-10-25  Martin Baulig  <martin@ximian.com>
3479
3480         * convert.cs (ImplicitTypeParameterConversion): Make base
3481         interfaces actually work; fixes #76557.
3482
3483 2005-10-25  Martin Baulig  <martin@ximian.com>
3484
3485         * generic.cs
3486         (GenericMethod.Define): Call TypeParameter.DefineConstraints() on
3487         all the type parameters; fixes #76551.
3488
3489 2005-10-25  Martin Baulig  <martin@ximian.com>
3490
3491         Fix #76472.
3492
3493         * generic.cs
3494         (GenericMethod.ctor): Added `Expression return_type' and
3495         `Parameters parameters' arguments.
3496         (GenericMethod.DefineType): Call ResolveAsTypeTerminal() on the
3497         parameter and return types to check their constraints if they're
3498         generic types.
3499
3500         * codegen.cs (EmitContext.ResolvingGenericMethod): New public
3501         boolean field.
3502
3503         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
3504         constraints of a generic type if `ec.ResolvingGenericMethod'.
3505
3506         * class.cs (MethodCore.DoDefineParameters): Set
3507         `ec.ResolvingGenericMethod' if we're a generic method.
3508         (MemberBase.MemberType): Likewise.
3509
3510 2005-10-25  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3511
3512         * typemanager.cs (TypeManager): Added 
3513         TypeManager.internals_visible_attr_type to cache
3514         S.R.CompilerServices.InternalsVisibleToAttribute.
3515
3516         * codegen.cs (AssemblyClass): Added checks for 
3517         InternalsVisibleToAttribute in new method 
3518         CheckInternalsVisibleAttribute () and also cache the
3519         AssemblyName in AssemblyClass.Name.
3520         
3521 2005-10-24  Martin Baulig  <martin@ximian.com>
3522
3523         * typemanager.cs
3524         (TypeManager.ExpandInterfaces): Added overloaded version which
3525         just takes a `Type[]' array.
3526
3527         * generic.cs
3528         (Constraints.Resolve): Don't expand the interfaces here; ie. we
3529         just use the interfaces which were explicitly specified and not
3530         the interfaces they inherit.  Fixes #76482.
3531         (TypeParameter.FindMembers): Expand the interfaces here.
3532
3533 2005-10-21  Martin Baulig  <martin@ximian.com>
3534
3535         * generic.cs
3536         (Constraints.Resolve): Also resolve the actual types here.
3537         (Constraints.ResolveTypes): Just check the constraints here.
3538         Fixes #76363; see gtest-218.cs.
3539
3540 2005-10-21  Martin Baulig  <martin@ximian.com>
3541
3542         * convert.cs
3543         (Convert.ImplicitTypeParameterConversion): Use a `ClassCast'
3544         instead of a `BoxedCast'; fixes gtest-217.cs.
3545
3546 2005-10-20  Atsushi Enomoto  <atsushi@ximian.com>
3547
3548         * generic.cs : (ConstructedType.CheckConstraints) warn CS0310 when
3549           1) "new()" is specified as generic parameter constraint and 2) the
3550           type is TypeBuilder and 3) the type is abstract even if it has a
3551           default .ctor(). Now errors/gcs0310-3.cs is correctly rejected.
3552
3553 2005-10-20  Martin Baulig  <martin@ximian.com>
3554
3555         * generic.cs
3556         (GenericConstraints.TypeParameter): New public property.
3557         (TypeParameter.ctor): Also take a `DeclSpace' argument.
3558         (TypeParameter.DeclSpace): New public property.
3559         (TypeParameter.DefineType): Inflate the constraints if our
3560         `DeclSpace' is an `Iterator'.   
3561
3562 2005-10-19  Atsushi Enomoto  <atsushi@ximian.com>
3563
3564         * class.cs, decl.cs : (MemberCache.FindMemberToOverride) added 
3565           GenericMethod argument to compare methods' generic type arguments.
3566           Fixed bug #76382.
3567
3568 2005-10-19  Martin Baulig  <martin@ximian.com>
3569
3570         * class.cs (TypeContainer.DefineType): Only use ResolveAsTypeStep(),
3571         not ResolveType() when resolving the base type, so we're not
3572         checking the constraints here.
3573         (TypeContainer.ResolveType): Call ResolveType() on our base_type
3574         if we have any.
3575
3576 2005-10-19  Martin Baulig  <martin@ximian.com>
3577
3578         * generic.cs (ConstructedType.CheckConstraints): Committing
3579         untested fix for #76441.
3580
3581 2005-10-18  Raja R Harinath  <rharinath@novell.com>
3582
3583         Fix #76371.
3584         * class.cs (TypeContainer.DefineType): Move updating of
3585         topological sort earlier in the code.
3586         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
3587
3588 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
3589
3590         Fix #76273.
3591         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
3592         
3593         * constant.cs (Constant.TryReduce): Moved from Cast class.
3594         (Reduce): Made little bit more OO and fixed missing conversions.
3595         
3596         * ecore.cs (Reduce): Implemented.
3597         (Binary.EnumLiftUp): New method to upgrade values to enum values.
3598         
3599         * literal.cs (Reduce): Implemented.
3600         
3601         * class.cs: Reverted Miguel's wrong commit.
3602
3603 2005-10-14  Miguel de Icaza  <miguel@novell.com>
3604
3605         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
3606
3607 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
3608
3609         * cs-parser.jay, expression.cs : CS0214 was missing error location
3610           for constants. Fixed bug #76404.
3611
3612 2005-10-10  Raja R Harinath  <rharinath@novell.com>
3613
3614         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
3615         InstanceExpression.
3616         (PropertyExpr.EmitCall): Likewise.
3617         * expression.cs (Invocation.EmitArguments): Handle case where
3618         arguments == null.
3619         (Invocation.EmitCall): Avoid allocating temporary variable if
3620         there are no arguments.
3621
3622 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
3623
3624         Fix #76370.
3625         * convert.cs (ExplicitConversionCore): Fixed object->enum
3626         conversion.
3627
3628 2005-10-07  Raja R Harinath  <rharinath@novell.com>
3629
3630         Fix #76323.
3631         * convert.cs (ImplicitConversionStandard): Move conversion of
3632         void* to arbitrary pointer types ...
3633         (ExplicitConversionStandard): .. here.
3634         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
3635         error to always print typenames.
3636
3637 2005-10-07  Raja R Harinath  <rharinath@novell.com>
3638
3639         * convert.cs (GetConversionOperator): Rename from
3640         GetConversionOperators.  Move operator selection code from ...
3641         (UserDefinedConversion): ... here.
3642
3643 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
3644
3645         * convert.cs (ExplicitConversionCore): Removed duplicate enum
3646         conversion.
3647
3648 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
3649
3650         * assign.cs (Assign.DoResolve): Error method changed.
3651
3652         * cfold.cs (DoConstantNumericPromotions): Error method changed.
3653         
3654         * const.cs (ResolveValue): Reset in_transit immediately.
3655         
3656         * constant.cs: Error method changed.
3657         
3658         * convert.cs: Removed useless location parameter.
3659         (ExplicitNumericConversion): Don't do double enum check.
3660         (ExplicitConversionCore): Renamed from ExplicitConversion.
3661         (ExplicitUnsafe): Extracted from ExplicitConversion.
3662         (ExplicitConversion): Uses for error reporting.
3663         
3664         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
3665         error messages.
3666         (ResolveBoolean): Uses common error method.
3667         (CastToDecimal): Get rid of ec.
3668         (CastFromDecimal): Optimized.
3669         (ConvCast): Get rid of ec.
3670         
3671         * enum.cs (ResolveValue): Reset in_transit immediately.
3672         (Emit): Return after first error.
3673         
3674         * expression.cs: Convert changes.
3675         
3676         * literal.cs: Error method changed.
3677         
3678         * statement.cs: Error method changed.
3679
3680 2005-10-06  Raja R Harinath  <rharinath@novell.com>
3681
3682         Fix gtest-131.cs and gtest-211.cs.
3683         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
3684         Only emit code for a label if it is used.  Unreachable code can
3685         violate ECMA evaluation stack invariants.
3686
3687 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
3688
3689         * anonymous.cs: Implemented ExprClassName.
3690         
3691         * assign.cs (Assign.DoResolve): Don't chrash when type is not
3692         delegate.
3693         
3694         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
3695         check.
3696         
3697         * class.cs (StaticClass.DefineContainerMembers): Report protected
3698         members as error.
3699         
3700         * codegen.cs: if(ed) PRODUCTION.
3701         
3702         * convert.cs (Error_CannotImplicitConversion): Better error
3703         distinction.
3704         
3705         * cs-parser.jay: More error checks.
3706         
3707         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
3708         
3709         * driver.cs (CSCParseOption): Enabled wrong option check.
3710         
3711         * ecore.cs (Expression.ExprClassName): Turned to property.
3712         (MemberExpr.CheckIntermediateModification): For checking boxed
3713         value types     modification.
3714         
3715         * statement.cs (Fixed.Resolve): Expression type must be
3716         convertible to fixed type.
3717         (CollectionForeach.GetEnumeratorFilter,TryType):
3718         Small refactoring for easier error checking.
3719
3720 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
3721
3722         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
3723         attributes.
3724         
3725         * class.cs (GeneratedBaseInitializer): New class for customization
3726         compiler generated initializers.
3727         (MemberBase.DoDefine): Check Obsolete attribute here.
3728         (FieldMember.DoDefine): Ditto.
3729         
3730         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
3731         constants.
3732         
3733         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
3734         (MemberCore.GetObsoleteAttribute): Removed argument.
3735         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
3736         (MemberCore.CheckObsoleteType): New helper.
3737         
3738         * delegate.cs,
3739         * enum.cs,
3740         * statement.cs: Updates after MemberCore changes.
3741         
3742         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
3743         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
3744         
3745         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
3746         obsolete attribute for compiler construct.
3747         (As.DoResolve): Cache result.
3748         
3749         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
3750
3751 2005-10-01  Miguel de Icaza  <miguel@novell.com>
3752
3753         * expression.cs (Probe): instead of having a "Type probe_type"
3754         keep the extra information as a TypeExpr probe_type_expr since the
3755         "As" operator needs to perform some type checks.
3756
3757         * (As.DoResolve): If the type is a type parameter, ensure that it
3758         is constrained by a class.
3759
3760 2005-09-22  Miguel de Icaza  <miguel@novell.com>
3761
3762         * statement.cs (Lock): Use the TemporaryVariable class instead of
3763         manually using local variables as those do not work when variables
3764         are captured.
3765
3766         * ecore.cs: Moved the TemporaryVariable class from being a nested
3767         class inside Foreach to be a public class that can be employed in
3768         other places. 
3769
3770 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
3771
3772         * cs-parser.jay: interface_accessors replaced by
3773         accessor_declarations.
3774
3775         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
3776         location.
3777         
3778         * statement.cs (GotoCase.Resolve): Convert null constant to
3779         null case.
3780         (SwitchLabel.ResolveAndReduce): Ditto.
3781         (SwitchLabel.NullStringCase): Custom null stamp.
3782         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
3783         
3784         typemanager.cs (CSharpSignature): Don't skip first argument
3785         for full names.
3786
3787 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
3788
3789         * cfold.cs, constant.cs, convert.cs, ecore.cs,
3790         expression.cs, iterators.cs, literal.cs: Store constants and
3791         literals location.
3792         
3793         * class.cs (MemberBase.ShortName): Pass location.
3794         
3795         * cs-parser.jay: Some location fixes.
3796         
3797         * ecore.cs (Expression.Location): Made virtual.
3798
3799 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
3800
3801         Fix #72930.
3802         * const.cs (Const.ResolveValue): Check for assigning non-null
3803         value to reference type.
3804
3805 2005-09-26  Raja R Harinath  <rharinath@novell.com>
3806
3807         Fix #76133.
3808         * expression.cs (This.VerifyFixed): In a value type T, the type of
3809         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
3810         value type R, 'this' is treated as a value parameter.
3811
3812 2005-09-05  Miguel de Icaza  <miguel@novell.com>
3813
3814         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
3815         if the underlying types are the same, otherwise we need to produce
3816         code that will do the proper cast.
3817
3818         This was exposed by Marek's constant rewrite which produced
3819         invalid code for the call site:
3820
3821         enum X : long { a }
3822         void Method (X v) {}
3823
3824         Method ((X) 5)
3825
3826         This fixes test-49.cs
3827
3828 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3829
3830         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
3831           Type/Object should be allowed as well. Fixed bug #75968.
3832
3833 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3834
3835         * expression.cs : (Binary.DoResolve): when one is enum constant and
3836           another is constant 0, then return enum one *as enum type*.
3837           Fixed bug 74846.
3838
3839 2005-10-04  Martin Baulig  <martin@ximian.com>
3840
3841         * ecore.cs (PropertyExpr.ResolveAccessors): Cosmetic fix; make the
3842         `SetMemberIsUsed()' work for generics, too.
3843
3844 2005-10-04  Martin Baulig  <martin@ximian.com>
3845
3846         * expression.cs (DelegateInvocation.EmitStatement): Make this work
3847         for corlib.  Fixes #75691.
3848
3849 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
3850
3851         Fix #76255.
3852         * driver.cs: Fix compilation files with full root path.
3853
3854 2005-09-25  Miguel de Icaza  <miguel@novell.com>
3855
3856         * report.cs (SymbolRelatedToPreviousError): Format the output so
3857         it does not use an open parenthesis that is never closed. 
3858
3859         * driver.cs: Follow coding guidelines
3860
3861 2005-09-18  Miguel de Icaza  <miguel@novell.com>
3862
3863         * driver.cs: Set InEmacs based on the environment variable EMACS. 
3864
3865         * location.cs (InEmacs): in this mode, do not report column
3866         location as it confuses Emacs.
3867
3868 2005-10-03  Raja R Harinath  <rharinath@novell.com>
3869
3870         * support.cs (SeekableStreamReader.Position): Don't error out when
3871         the requested position is just beyond the end of the current
3872         buffered data.
3873
3874 2005-09-28  Raja R Harinath  <rharinath@novell.com>
3875
3876         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
3877         try to keep in sync with the byte count of the underlying Stream.
3878         However, this limits us to a window size of 2048 characters: i.e.,
3879         the maximum lookahead of our lexer/parser can be 2048 characters.
3880
3881 2005-09-22  Martin Baulig  <martin@ximian.com>
3882
3883         * driver.cs: Removed a debugging FIXME.
3884
3885 2005-09-21  Raja R Harinath  <rharinath@novell.com>
3886
3887         * cs-parser.jay (type_arguments): Add CS1644 check.
3888         * decl.cs (DeclSpace.AddToContainer): Restore CS0694 check.
3889
3890 2005-09-15  Raja R Harinath  <rharinath@novell.com>
3891
3892         * Makefile (PROGRAM): Make profile specific.
3893         (gmcs.exe) [PROFILE=net_2_0]: Add utility rule to copy gmcs.exe to
3894         the current directory.
3895
3896         Fix test-455.cs.
3897         * expression.cs (Invocation.EmitCall): Remove optimization on
3898         this_call since it doesn't handle 'this' being a value type.
3899
3900 2005-09-05  Geoff Norton  <gnorton@customerdna.com>
3901
3902         * driver.cs: Ensure file handles are closed after parsing
3903
3904 2005-09-05  Miguel de Icaza  <miguel@novell.com>
3905
3906         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
3907         if the underlying types are the same, otherwise we need to produce
3908         code that will do the proper cast.
3909
3910         This was exposed by Marek's constant rewrite which produced
3911         invalid code for the call site:
3912
3913         enum X : long { a }
3914         void Method (X v) {}
3915
3916         Method ((X) 5)
3917
3918         This fixes test-49.cs
3919
3920 2005-09-05  Martin Baulig  <martin@ximian.com>
3921
3922         * expression.cs (As.DoResolve): Use `probe_type.IsValueType'
3923         instead of `TypeManager.IsValueType (probe_type)'; fixes #75668.
3924
3925         * cs-parser.jay (delegate_declaration): Small fix for #75852.
3926
3927 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3928
3929         * typemanager.cs: (IsUnmanagedType) : generic parameter is not allowed
3930           to be a pointer type due to the spec 25.2, so check if declaring
3931           type is generic type definition. Fixed bug #75772.
3932
3933 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3934
3935         Fixed bug #75957.
3936         * generic.cs : (TypeManager.IsEqual(Type,Type)): it should work when
3937           both types are not defined by methods.
3938         * expression.cs : (Invocation.IsApplicable): it should work when
3939           the argument type is equal to the parameter type, not only when
3940           ImplicitConversionExists() returns true.
3941
3942 2005-09-02  Raja R Harinath  <rharinath@novell.com>
3943
3944         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
3945         internal.
3946
3947         Fix #75941.
3948         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
3949         flow-branching for LocalVariableReferences in case we were invoked
3950         from a MemberAccess.
3951         * expression.cs (LocalVariableReference.VerifyAssigned): New.
3952         Carved out of ...
3953         (LocalVariableReference.DoResolveBase): ... this.
3954         (MemberAccess.Resolve): Do the check that was disabled during
3955         SimpleNameResolve.
3956
3957 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
3958
3959         * class.cs :
3960           (PartialContainer.Create): check abstract/sealed/static strictly
3961           but abstract/sealed can exist only at one side. Fixed bug #75883.
3962
3963 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
3964
3965         Fix #75945.
3966         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
3967         specified, don't default to UnmanagedType.I4.
3968
3969 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
3970
3971         * expression.cs : conditional operator should check possibly
3972           incorrect assign expression. Fixed bug #75946.
3973
3974 2005-08-30  Raja R Harinath  <rharinath@novell.com>
3975
3976         Fix #75934.
3977         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
3978         (ScopeInfo.EmitScopeType): Use it to construct field names from
3979         names of captured locals.
3980
3981         Fix #75929.
3982         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
3983         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
3984         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
3985         (ExplicitConversion): Remove enum cases already handled by
3986         implicit conversion.  Move implicit conversion check to the beginning.
3987         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
3988         * expression.cs (ArrayCreation.EmitDynamicInitializers):
3989         Don't treat System.Enum as a struct.
3990
3991 2005-08-30  Jb Evain  <jbevain@gmail.com>
3992
3993         * attribute.cs: handles as expression in parameters.
3994
3995 2005-08-30  Raja R Harinath  <rharinath@novell.com>
3996
3997         Fix #75802.
3998         * class.cs (TypeContainer.VerifyClsName): Don't use a
3999         PartialContainer when verifying CLS compliance.
4000         (AbstractPropertyEventMethod): Set Parent here, ...
4001         (PropertyMethod): ... not here.
4002
4003 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
4004
4005         * attribute.cs : escaped attribute name should not be allowed to be
4006           resolved (e.g. @class as classAttribute). Fixed bug #75930.
4007
4008 2005-08-29  Raja R Harinath  <rharinath@novell.com>
4009
4010         Fix #75927.
4011         * convert.cs (ImplicitStandardConversionExists): Allow zero also
4012         when converting a long constant to unsigned long.
4013         * expression.cs (Invocation.OverloadResolve): Add sanity check to
4014         detect where IsApplicable and VerifyArgumentsCompat disagree.
4015
4016 2005-08-29  Raja R Harinath  <rharinath@novell.com>
4017         and Carlos Alberto Cortez  <carlos@unixmexico.org>
4018
4019         Fix #75848.
4020         * class.cs (TypeContainer.CanElideInitializer): New helper.
4021         (TypeContainer.EmitFieldInitializers): Use it to determine if we
4022         can safely emitting the initializer of a field.
4023
4024 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4025
4026         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
4027           allowed inside a switch (without loop). Fixed bug #75433.
4028
4029 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
4030
4031         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
4032         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
4033
4034 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4035
4036         * driver.cs : kinda reverting the default encoding changes (not exact 
4037           revert since I noticed that "codepage:reset" might not work fine).
4038
4039 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4040
4041         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
4042           Location. Now getter and setter store location correctly.
4043           (errors/cs0111-12.cs now reports the expected location.)
4044
4045 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4046
4047         * driver.cs : Use default encoding on the environment.
4048           Removed (now that) extra parameter for SeekableStreamReader.
4049         * support.cs : (SeekableStreamReader) third .ctor() argument for
4050           StreamReader is not required (always true). preamble size could
4051           be acquired in simpler and safe way.
4052
4053 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
4054
4055         * cs-parser.jay: report CS0642 at warning level 3
4056           and report CS0642 for an if else statement also
4057           fixes bug #74745. Patch by John Luke (and a bit
4058           modified by me).
4059           Removed extra CS0642 warning check for "while",
4060           "for" and "fixed".
4061         * statement.cs: In Block.Resolve(), CS0642 check
4062           is reimplemented to check a sequence of an empty
4063           statement and a block.
4064
4065           Both fix bug #66777.
4066
4067 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
4068
4069         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
4070         detection until I fix it.
4071         
4072         * cs-tokenizer.cs: Changed error message.
4073         
4074         * cs-parser.jay: Fixed 2 error locations.
4075         
4076         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
4077         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
4078         properties.
4079         
4080         * enum.cs (GetSignatureForError): Fixed.
4081         
4082         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
4083         method detection.
4084         
4085         * class.cs,
4086         * typemanager.cs (RegisterProperty): Removed.
4087         
4088         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
4089
4090 2005-08-24  Raja R Harinath  <rharinath@novell.com>
4091
4092         Fix #75874.
4093         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
4094         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
4095
4096 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4097
4098         * expression.cs : tiny fix is required for not warning positive ulong.
4099           See test-441.cs.
4100
4101 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4102
4103         * expression.cs : add CS0652 check for constant and integral
4104           expression. Fixed bug #53974.
4105
4106 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4107
4108         * expression.cs : in DoNumericPromotions(), check if there is implicit
4109           conversion overload for string (to check CS0034). Fixed bug #52492.
4110
4111 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4112
4113         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
4114
4115 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4116
4117         * ecore.cs : report location when it is *not* Null.
4118
4119 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4120
4121         * codegen.cs,
4122           ecore.cs,
4123           flowanalysis.cs,
4124           expression.cs:
4125           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
4126           correctly. Fixed bug #75721.
4127
4128 2005-08-23  Raja R Harinath  <rharinath@novell.com>
4129
4130         * support.cs (SeekableStreamReader.Position): Avoid an expensive
4131         loop that performs 'min (pos, char_count)'.
4132
4133         Fix #75862.
4134         * expression.cs (Unary.ResolveOperator): Don't discard implicit
4135         converted value in Operator.OnesComplement.
4136
4137 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
4138
4139         * anonymous.cs: If the anon method is pulled into a helper class,
4140         it needs to be `internal' not `private'. Fixes runtime behavior on
4141         msft. bug #75704
4142
4143 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
4144
4145         Fix #75803
4146         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
4147         is a partial class.
4148
4149 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
4150
4151         The big constants rewrite
4152         Fix #75746, #75685 and more
4153         As a side effect saved 1MB for MWF ;-)
4154         
4155         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
4156         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
4157         enum based for corlib compilation.
4158         
4159         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
4160         subtractions.
4161         
4162         * class.cs (FixedField.Define): Use ResolveAsConstant.
4163         
4164         * const.cs (IConstant): Interface constants and enums.
4165         (Const.ResolveValue): New method for constant resolvning.
4166         (ExternalConstant): Constants from imported assemblies.
4167         
4168         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
4169         conversion; like enums.
4170         (Constant.ToType): Converts this constant to different type.
4171         (Constant.Increment): Adds 1.
4172         
4173         * convert.cs (ImplicitConversionRequired): Simplified.
4174         
4175         * cs-parser.jay: Create EnumMember directly.
4176         
4177         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
4178         
4179         * doc.cs (GenerateEnumDocComment): Removed.
4180         
4181         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
4182         (ConvertIntLiteral): Removed.
4183         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
4184         
4185         * enum.cs (EnumMember): Implement IConstant.
4186         (Enum.IsValidEnumConstant): Removed.
4187         (Enum.GetNextDefaultValue): Removed.
4188         (Enum.FindMembers): Updated.
4189         (Enum.GenerateDocComment): Iterate enum members.
4190         
4191         * expression.cs (Cast.TryReduce): Handle enums correctly.
4192         (New.Constantify): Made public.
4193         (MemberAccess.DoResolve): Removed contant specific if(s).
4194         
4195         * literal.cs (NullLiteral): Implement new abstract methods.
4196         
4197         * statement.cs (GotoCase.Resolve): Use new constant methods.
4198         (SwitchLabel.ResolveAndReduce): Use new constant methods.
4199         
4200         * typemanager.cs (LookupEnum): Removed.
4201         (IsEnumType): Fixed to work with corlib.
4202         (RegisterConstant): Removed.
4203         (LookupConstant): Removed.
4204         (GetConstant): Changed to work with IConstant.
4205
4206 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
4207
4208         * location.cs : Fixed overflown (>255) column number.
4209
4210 2005-08-03  Raja R Harinath  <rharinath@novell.com>
4211
4212         First cut of the qualified-alias-member feature.
4213         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
4214         token.
4215         * cs-parser.jay (DOUBLE_COLON): New token.
4216         (namespace_or_type_name): Add rule for recognizing
4217         qualified-alias-members.
4218         (primary_expression): Likewise.
4219         (element_access): Allow QualifiedAliasMember as a possible
4220         type-bearing expression.
4221         (local_variable_type, local_variable_pointer_type): Likewise.
4222         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
4223         aliases in the current and enclosing namespace declarations.
4224         (NamespaceEntry.UsingAlias): Add CS0440 warning.
4225         * decl.cs (MemberName.is_double_colon): New.
4226         (MemberName.MemberName): Add new constructor for alias-member.
4227         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
4228         * expression.cs (QualifiedAliasMember): New expression type.
4229
4230 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
4231
4232         * location.cs : it borked when no argument was specified.
4233
4234 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
4235
4236         * location.cs : tiny ToString() format fix.
4237
4238 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
4239
4240         * statement.cs : oops, it was missing.
4241
4242 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
4243
4244         A set of fixes for precise line/column location.
4245
4246         * location.cs :
4247           "token" field now holds a file/line "delta", a line number offset 
4248           from the segment, and a column number. See also:
4249           http://lists.ximian.com/pipermail/mono-devel-list/2004-
4250           December/009508.html
4251           Removed static IsNull. Use instance IsNull property instead.
4252         * cs-tokenizer.cs :
4253           For some tokens it stores Location. For Identifier it stores
4254           LocatedToken which is a pair of string name and location.
4255           Column numbers are adjusted only at getChar().
4256         * report.cs :
4257           Use Location.ToString() for reporting (it now contains column).
4258         * cs-parser.jay :
4259           Largely modified to use LocatedToken instead of
4260           string (IDENTIFIER), and to acquire Location from some tokens.
4261         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
4262           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
4263           codegen.cs :
4264           Now MemberName holds Location. DeclSpace.ctor() receives Location
4265           as a parameter. Removed extra parameters to all derived classes.
4266           Replaced Location.IsNull() with instance property.
4267         * assign.cs, expression.cs :
4268           Added .ctor() overload that omits Location.
4269         * attribute.cs :
4270           Added "nameEscaped" flag that indicates the identifier was escaped
4271           in the source file. This fixes bug #57047.
4272
4273 2005-09-02  Martin Baulig  <martin@ximian.com>
4274
4275         * class.cs: Make CS3005 a warning, not an error.
4276
4277 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
4278
4279         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
4280         New method, looking for lo-case imported cls type.
4281
4282         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
4283         here.
4284
4285         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
4286
4287         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
4288
4289         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
4290         all_imported_types.
4291         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
4292
4293         Optimized to save 3.5 MB for SWF compilation.
4294
4295 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
4296
4297         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
4298         (PartialContainer.Create): Moved logic AddToContainer.
4299         (PartialContainer.MarkForDuplicationCheck): Shares name.
4300         
4301         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
4302         place.
4303         
4304         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
4305         initialization.
4306         (Namespace.GetSignatureForError): New method.
4307         
4308         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
4309         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
4310
4311 2005-08-01  Raja R Harinath  <rharinath@novell.com>
4312
4313         Fix #75669.
4314         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
4315         member lookup rather than qualifier_type, since qualifier_type can
4316         be null.
4317
4318 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
4319
4320         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
4321         enum member.
4322
4323 2005-07-31  Miguel de Icaza  <miguel@novell.com>
4324
4325         * statement.cs: Copy the local exception into the exception
4326         captured local.  Fixes 75674
4327
4328 2005-07-31  Raja R Harinath  <harinath@gmail.com>
4329
4330         Fix #75658.
4331         * expression.cs (Invocation.OverloadResolve): Don't report error
4332         CS1501 if error CS1502 has been reported.
4333         (New.DoResolve): Delegate CS1501 reporting to
4334         Invocation.OverloadResolve.
4335
4336         Fix #75656.
4337         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
4338         invariant-meaning-in-block property in an enclosing block if
4339         necessary.
4340
4341 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
4342
4343         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
4344         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
4345         (Switch.CheckSwitch): Just save 50kb for SWF.
4346
4347 2005-07-27  Martin Baulig  <martin@ximian.com>
4348
4349         * anonymous.cs (CaptureContext.AddField): Added
4350         `AnonymousContainer am' argument; compute its toplevel scope if
4351         it's not already computed.  Fixes #75649.
4352
4353 2005-07-26  Raja R Harinath  <rharinath@novell.com>
4354
4355         Fix #75628.
4356         * class.cs (Constructor.Emit): Reset block to null if the block
4357         resolve fails.
4358
4359 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
4360
4361         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
4362
4363 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
4364
4365         * class.cs (MethodData.Define): Check whether accessor implementing
4366         interface is public.
4367
4368         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
4369
4370 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
4371
4372         Fix #57245
4373         * namespace.cs (LookupType): Moved same type check to...
4374         
4375         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
4376         with the same name.
4377
4378 2005-07-21  Raja R Harinath  <rharinath@novell.com>
4379
4380         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
4381         already found a typebuilder.
4382         * class.cs (MethodCore.IsDuplicateImplementation): Compare
4383         MemberNames, not strings.
4384
4385         * const.cs (Error_ExpressionMustBeConst): 
4386         Rename from Error_EpressionMustBeConst.
4387         * const.cs, class.cs, statement.cd: Update.
4388
4389 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
4390
4391         Fix #65573
4392
4393         * const.cs (Const.LookupConstantValue): Report missing contant expression
4394         everytime.
4395         (Error_EpressionMustBeConstant): Only one error method.
4396
4397         * class.cs, statement.c: Updated.
4398
4399 2005-07-20  Raja R Harinath  <rharinath@novell.com>
4400
4401         * statement.cs (Block.Flags): Add back HasVarargs.
4402         (Block.flags): Make protected.
4403         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
4404
4405         * typemanager.cs (types, typecontainers, user_types): Remove.
4406         (UserTypes, TypeContainers): Likewise.
4407         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
4408         (CleanUp, Reset): Update.
4409         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
4410         (GetNestedType): Use Type.GetNestedType.
4411         (CoreLookupType): Take two arguments, the namespace and the
4412         basename of the type.  Update to use the Namespace.Lookup
4413         mechanism.
4414         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
4415         (RealMemberLookup): Use IsNestedChildOf instead of playing with
4416         string concatenation and substring matches.
4417         * class.cs, enum.cs, delegate.cs: Update to changes.
4418
4419 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
4420
4421         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
4422         Expression and made virtual.
4423
4424         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
4425         (ImplicitStandardConversionExists): Fixed `byte' typo ?
4426
4427         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
4428
4429         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
4430         error message.
4431
4432         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
4433         change.
4434
4435 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
4436
4437         Fix #57707
4438         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
4439         AssemblyCultureAttribute is not used on executable.
4440
4441         * rootcontext.cs,
4442         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
4443
4444 2005-07-16  Raja R Harinath  <rharinath@novell.com>
4445
4446         Fix #60638.
4447         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
4448         New.  Reports CS0252/CS0253.
4449         Mostly taken from preliminary patch by Duncak Mak.
4450         (Binary.DoResolveOperator): Store results of operator lookup.
4451         Use them to detect if we need to warn about unintended reference
4452         comparisons.
4453
4454 2005-07-15  Raja R Harinath  <rharinath@novell.com>
4455
4456         Fix #72969.
4457         * namespace.cs (Namespace.Lookup): Add back location parameter.
4458         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
4459         * delegate.cs, ecore.cs, expression.cs: Update to changes.
4460
4461         * codegen.cs (EmitContext.DeclSpace): Make readonly.
4462         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
4463         (Namespace.LookupType): ... this.
4464         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
4465         of namespaces.
4466         * typemanager.cs (LookupTypeReflection): Remove buggy code that
4467         purported to handle pointers.
4468         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
4469         CoreLookupType.
4470
4471 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
4472
4473         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
4474         type as namespace.
4475
4476 2005-07-15  Raja R Harinath  <rharinath@novell.com>
4477
4478         * namespace.cs (Namespace.Lookup): Drop location parameter.
4479         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
4480         (NamespaceEntry.Lookup): ... this.
4481         (NamespaceEntry.Error_AmbiguousTypeReference):
4482         Move here from DeclSpace.
4483         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
4484         names ...
4485         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
4486         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
4487         Move to NamespaceEntry.
4488         * delegate.cs, expression.cs: Update to changes.
4489
4490 2005-08-31  Martin Baulig  <martin@ximian.com>
4491
4492         Committing a patch from Atsushi Enomoto for #75850.
4493
4494         * statement.cs (Foreach.CollectionForeach.GetEnumeratorFilter):
4495         Prefer a generic enumerator over a non-generic one.
4496
4497 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
4498
4499         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
4500         * gmcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
4501
4502 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4503
4504         * driver.cs : reverting default encoding change as well as mcs.
4505
4506 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4507
4508         * driver.cs, support.cs : merged r48826.
4509           Marek Safer wrote:
4510           > could you integrate your mcs changes to gmcs otherwise
4511           > gmcs cannot compile some files.
4512
4513 2005-08-20  Martin Baulig  <martin@ximian.com>
4514
4515         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
4516         scope if we don't already have it.
4517
4518         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
4519         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
4520         fixes #75867.
4521
4522 2005-07-31  Miguel de Icaza  <miguel@novell.com>
4523
4524         * statement.cs: Copy the local exception into the exception
4525         captured local.  Fixes 75674
4526
4527 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
4528
4529         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
4530         type as namespace.
4531
4532 2005-08-12  Martin Baulig  <martin@ximian.com>
4533
4534         * expression.cs (MemberAccess.ResolveNamespaceOrType): Only search
4535         for nested types here to avoid hitting the cache too early.
4536
4537 2005-08-09  Miguel de Icaza  <miguel@novell.com>
4538
4539         * enum.cs: On the new compiler CLS error 3005 is now a warning not
4540         an error. 
4541
4542 2005-08-03  Martin Baulig  <martin@ximian.com>
4543
4544         Make iterators in generic methods work; see gtest-191.cs.
4545
4546         * generic.cs
4547         (Constraints.Resolve): Protect against being called twice.
4548
4549         * class.cs
4550         (TypeContainer.GetClassBases): Make this `protected virtual'.
4551
4552         * iterator.cs (Iterator.ctor): Added `GenericMethod' argument.
4553         (Iterator.GetClassBases): Override this and compute the base
4554         classes here.
4555         (Iterator.DefineNestedTypes): If we're a generic method, all our
4556         method type parameters become class type parameters on the proxy
4557         class.
4558
4559         * statement.cs
4560         (ToplevelBlock.Parameters): Make this a property, not a field.
4561         (ToplevelBlock.ResolveMeta): Update the `parameters' from the `ip'.
4562
4563 2005-08-03  Martin Baulig  <martin@ximian.com>
4564
4565         * typemanager.cs (TypeManager.IsSubclassOf): Use
4566         `TypeManager.IsEqual' instead of `Type.Equals'; fixes gtest-190.cs.
4567         (TypeManager.GetFullName_recursed): Improved.
4568
4569 2005-07-27  Carlos Alberto Cortez <calberto.cortez@gmail.com>
4570
4571         Fix #75417
4572         * ecore.cs (Expression.IsAccessorAccessible): Change the check for
4573         Private accessor case, using TypeManager.IsPrivateAccessible instead of
4574         invocation_type == mi.DeclaringType, since the first one also checks
4575         other condition used by generic instances.
4576         
4577 2005-07-27  Martin Baulig  <martin@ximian.com>
4578
4579         * anonymous.cs (CaptureContext.AddField): Added
4580         `AnonymousContainer am' argument; compute its toplevel scope if
4581         it's not already computed.  Fixes #75649.
4582
4583 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
4584
4585         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
4586         CheckAttributeType and refactored.
4587         (Attribute.ResolvePossibleAttributeType): Changed to reuse
4588         ResolveAsTypeTerminal error handling.
4589         (ResolveAsTypeTerminal): Introduced because of global attributes extra
4590         handling.
4591         (GetSignatureForError): Print errors in same way.
4592
4593         * class.cs,
4594         * codegen.cs: Reflect attribute GetSignatureForError change.
4595
4596         * ecore.cs,
4597         * expression.cs: Add silent parameter to ResolveAsTypeStep.
4598
4599         * namespace.cs (UsingEntry): Refactored to make fields private.
4600
4601         * assign.cs,
4602         statement.cs: Error_UnexpectedKind has extra parameter.
4603
4604 2005-07-14  Raja R Harinath  <rharinath@novell.com>
4605
4606         * ecore.cs (IAlias): Remove.
4607         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
4608         that implement the interface.
4609         * namespace.cs (Namespace): Likewise.
4610         (Namespace.declspaces): Renamed from 'defined_names'.
4611         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
4612         DeclSpace instead of an IAlias.
4613         * tree.cs (Tree.AddDecl): Update.
4614
4615 2005-07-12  Raja R Harinath  <rharinath@novell.com>
4616
4617         * statement.cs (Block.Flags); Remove HasVarargs.
4618         (Block.HasVarargs): Move to ToplevelBlock.
4619         (Block.ThisVariable, Block.AddThisVariable): Likewise.
4620         (Block.Variables): Make protected.  Initialize variable hashtable
4621         if necessary.
4622         (Block.AddVariable): Update.
4623         (Block.Resolve): Update to changes.
4624         (ToplevelBlock.HasVarargs): New boolean.
4625         (ToplevelBlock.ThisVariable): Move here from Block.
4626         (ToplevelBlock.AddThisVariable): Likewise.
4627         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
4628         * expression.cs (This.ResolveBase): Update to changes.
4629         (ArglistAccess.DoResolve): Likewise.
4630
4631 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
4632
4633         Fix #75321
4634         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
4635
4636         * class.cs (TypeContainer.VerifyMembers): Distinguish between
4637         not used and not used & assigned.
4638         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
4639
4640 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
4641
4642         Fix #75053
4643         * expression.cs (Is.DoResolve): null is never provided type.
4644
4645 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
4646
4647         Fix #52496
4648         * cs-parser.jay: Less strict event error rule to catch more errors.
4649
4650 2005-07-11  Martin Baulig  <martin@ximian.com>
4651
4652         * generic.cs (ConstructedType.CheckConstraints): Improve the check
4653         for the constructor constraint: we do not only have to check
4654         whether the class has a public constructor, but also ensure that
4655         it's parameterless.  Fixes #75492.
4656
4657 2005-07-11  Martin Baulig  <martin@ximian.com>
4658
4659         * expression.cs (Binary.ResolveOperator): Only allow `==' and `!='
4660         between type parameters if they either have the reference type
4661         constraint or the class constraint.
4662
4663 2005-07-10  Kamil Skalski <nazgul@nemerle.org>
4664
4665         * generic.cs: Use MakeGenericType instead of BindGenericParameters.
4666
4667 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
4668
4669         Fix #74975
4670         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
4671         (ExtractSecurityPermissionSet): Cope with self referencing security
4672         attributes properly.
4673
4674         * driver.cs (SetOutputFile): Made public property OutputFile.
4675
4676 2005-07-07  Raja R Harinath  <rharinath@novell.com>
4677
4678         Fix #75486.
4679         * class.cs (TypeContainer.first_nonstatic_field): Rename from
4680         has_nonstatic_fields.  Make into a FieldBase pointer.
4681         (TypeContainer.AddField): Add CS0282 check.
4682         (TypeContainer.EmitType): Update.
4683
4684 2005-07-06  Miguel de Icaza  <miguel@novell.com>
4685
4686         * cs-tokenizer.cs (consume_identifier): Do not create strings to
4687         compare if they start with __.
4688
4689 2005-07-06  Raja R Harinath  <rharinath@novell.com>
4690
4691         * statement.cs (Switch.SwitchGoverningType): Only look at
4692         UserCasts that don't need implicit standard conversions to one of
4693         the allowed switch types (Fixes test-322.cs).
4694         (LocalInfo.Resolve): Re-enable sanity-test.
4695
4696 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
4697
4698         * cs-tokenizer.cs (consume_identifier): Detect double undescores
4699         
4700         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
4701         
4702         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
4703
4704 2005-07-06  Raja R Harinath  <rharinath@novell.com>
4705
4706         Fix #75472.
4707         * ecore.cs (SimpleName.GetSignatureForError): Add.
4708         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
4709         (MemberAccess.GetSignatureForError): Add.
4710
4711 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
4712  
4713         The big error and warning messages review.
4714         
4715         * anonymous.cs,
4716         * assign.cs,
4717         * attribute.cs,
4718         * class.cs,
4719         * codegen.cs,
4720         * convert.cs,
4721         * cs-parser.jay,
4722         * cs-tokenizer.cs,
4723         * decl.cs,
4724         * delegate.cs,
4725         * doc.cs,
4726         * driver.cs,
4727         * ecore.cs,
4728         * enum.cs,
4729         * expression.cs,
4730         * flowanalysis.cs,
4731         * iterators.cs,
4732         * literal.cs,
4733         * location.cs,
4734         * modifiers.cs,
4735         * namespace.cs,
4736         * parameter.cs,
4737         * pending.cs,
4738         * report.cs,
4739         * rootcontext.cs,
4740         * statement.cs,
4741         * support.cs,
4742         * tree.cs,
4743         * typemanager.cs: Updated.
4744         
4745         * class.cs: (MethodCore.SetYields): Moved here to share.
4746         (PropertyMethod.Define): Moved iterator setup here.
4747         
4748         * iterators.cs: Add orig_method to have full access to parent
4749         container.
4750
4751 2005-07-05  Raja R Harinath  <rharinath@novell.com>
4752
4753         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
4754         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
4755         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
4756         variable of struct type.
4757         * expression.cs (Unary.ResolveOperator): Update to change.
4758         (Indirection.VerifyFixed): Likewise.
4759         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
4760         (ParameterReference.VerifyFixed): Value parameters are fixed.
4761         (This.VerifyFixed): Treat 'this' as a value parameter.
4762         * statement.cs (LocalInfo.IsFixed): Remove.
4763
4764 2005-07-01  Martin Baulig  <martin@ximian.com>
4765
4766         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
4767         `ec.EmitThis ()' to get the correct scope.
4768
4769 2005-07-01  Martin Baulig  <martin@ximian.com>
4770
4771         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
4772         instance is a ParameterReference; fixes #75299.
4773
4774 2005-06-30  Raja R Harinath  <rharinath@novell.com>
4775
4776         Fix #75412.
4777         * expression.cs (Indexers.map): Remove.
4778         (Indexers.Append): Filter out inaccessible setters and getters.
4779         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
4780
4781         Fix #75283.
4782         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
4783         Refactored from ...
4784         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
4785         (FieldExpr.Emit, PropertyExpr.Emit): Update.
4786         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
4787         * expression.cs (Invocation.EmitCall): Add CS0120 check.
4788
4789 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
4790
4791         Fix #75322
4792         * class.cs (FieldBase.GetInitializerExpression): One more field
4793         for backup.
4794
4795 2005-06-28  Miguel de Icaza  <miguel@novell.com>
4796
4797         * pending.cs: Do not define a proxy if the base method is virtual,
4798         it will be picked up by the runtime (bug 75270).
4799
4800 2005-07-08  Martin Baulig  <martin@ximian.com>
4801
4802         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
4803         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
4804
4805 2005-07-07  Martin Baulig  <martin@ximian.com>
4806
4807         * generic.cs (ConstructedType.CheckConstraint): Use
4808         ResolveAsTypeStep(), not ResolveAsTypeTerminal() so we're not
4809         called recursively; fixes #75329.
4810
4811 2005-07-06  Martin Baulig  <martin@ximian.com>
4812
4813         * generic.cs (TypeManager.InferTypeArguments): Added support for
4814         anonymous methods; fixes #75461.
4815
4816 2005-07-01  Martin Baulig  <martin@ximian.com>
4817
4818         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
4819         `ec.EmitThis ()' to get the correct scope.
4820
4821 2005-07-01  Martin Baulig  <martin@ximian.com>
4822
4823         * ecore.cs (FieldExpr.DoResolve): Only capture the field if it's
4824         instance is `This'; fixes #75299.
4825
4826 2005-06-30  Martin Baulig  <martin@ximian.com>
4827
4828         * class.cs (Indexer): Implement IIteratorContainer; added support
4829         for iterators in indexers.
4830
4831         * codegen.cs
4832         (EmitContext.CurrentIterator): Make this a property, not a field.
4833
4834         * anonymous.cs (AnonymousContainer.Iterator): New public property.
4835
4836 2005-06-28  Miguel de Icaza  <miguel@novell.com>
4837
4838         * pending.cs: Do not define a proxy if the base method is virtual,
4839         it will be picked up by the runtime (bug 75270).
4840
4841 2005-06-28  Martin Baulig  <martin@ximian.com>
4842
4843         * cs-parser.jay (interface_method_declaration): Avoid a
4844         reduce/reduce conflict by moving some of the code into a separate
4845         `interface_method_declaration_body' rule; fixes #75368.
4846
4847 2005-06-28  Martin Baulig  <martin@ximian.com>
4848
4849         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Move the
4850         array check after the check for TypeBuilder's.
4851
4852 2005-06-21  Raja R Harinath  <rharinath@novell.com>
4853
4854         * convert.cs (FindMostEncompassedType): Add two trivial special
4855         cases (number_of_types == 0 || number_of_types == 1).
4856         (FindMostEncompasingType): Likewise.
4857
4858 2005-06-17  Raja R Harinath  <rharinath@novell.com>
4859
4860         Some cleanups preparing for the fix of #75283.
4861         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
4862         error testing.
4863         (EventExpr.InstanceResolve): Likewise.
4864         (EventExpr.DoResolve): Remove redundant checks.
4865
4866 2005-06-08  Miguel de Icaza  <miguel@novell.com>
4867
4868         * class.cs: Small fix.
4869
4870 2005-06-08  Raja R Harinath  <rharinath@novell.com>
4871
4872         Fix #75160.
4873         * class.cs (GetPartialBases): Fix return value check of
4874         part.GetClassBases.
4875
4876 2005-06-07  Raja R Harinath  <rharinath@novell.com>
4877
4878         Ensure that partial classes are registered in their enclosing
4879         namespace.  Initial part of fix of #75160.
4880         * tree.cs (Tree.RecordDecl): Add new namespace argument.
4881         Register declspace with namespace here, not in
4882         DeclSpace.RecordDecl.
4883         * cs-parser.jay: Pass namespace to RecordDecl.
4884         * class.cs (PartialContainer.Create): Likewise.
4885         (ClassPart.DefineType): New sanity-check.  Throws an exception if
4886         called.
4887         * decl.cs (Declspace.RecordDecl): Remove.
4888         * namespace.cs (NamespaceEntry.DefineName): Remove.
4889
4890 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
4891
4892         * rootcontext.cs: Reset TargetExt as well.
4893
4894 2005-06-03  Raja R Harinath  <rharinath@novell.com>
4895
4896         * ecore.cs (Expression.Resolve): Emit CS0654 error when
4897         -langversion:ISO-1.
4898
4899 2005-06-02  Raja R Harinath  <rharinath@novell.com>
4900
4901         Fix #75080, cs0119.cs.
4902         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
4903         of ...
4904         (Expression.Resolve): ... this.  Use it.  Remove bogus code
4905         allowing ExprClass.Type and ExprClass.Namespace for
4906         ResolveFlags.VariableOrValue.
4907         (Expression.Resolve) [1-argument variant]: Change default resolve
4908         flags based on language version.
4909         (Expression.Error_UnexpectedKind): Use a simple string array
4910         rather than an ArrayList.
4911         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
4912         not ExprClass.Type.
4913         (TypeOfVoid.DoResolve): Likewise.
4914         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
4915         flags argument -- it always has the same value.
4916
4917 2005-05-31  Raja R Harinath  <rharinath@novell.com>
4918
4919         Fix #75081.
4920         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
4921         Use it in the error message.
4922         * assign.cs, expression.cs, statement.cs: Update.
4923
4924 2005-05-30  Raja R Harinath  <rharinath@novell.com>
4925
4926         Fix #75088.
4927         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
4928         the "almostMatchedMember" case too.
4929         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
4930         that failed the accessibility checks to 'almost_match'.
4931
4932 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
4933
4934         * attribute.cs: Use internal MethodBuilder methods to set
4935         ExactSpelling and SetLastError on PInvoke methods, instead
4936         of passing them via charset.  Fixes #75060.
4937
4938 2005-05-27  Raja R Harinath  <rharinath@novell.com>
4939
4940         * parameter.cs (Parameter): Remove TODO comment.
4941         (Parameter.DefineParameter): Remove Location parameter.
4942         (Parameters.LabelParameters): Likewise.
4943         * class.cs (Constructor.Emit): Update to change.
4944         (MethodData.Emit): Likewise.
4945         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
4946         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
4947
4948 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
4949
4950         * parameter.cs,
4951           Removed Parameters.Location and added Parameter.Location instead.
4952           Removed Location parameter from Emit() and GetSignature().
4953         * anonymous.cs,
4954           class.cs,
4955           cs-parser.jay,
4956           delegate.cs,
4957           iterators.cs,
4958           statement.cs :
4959           Modified all related calls.
4960
4961 2005-06-21  Martin Baulig  <martin@ximian.com>
4962
4963         * generic.cs (NullCoalescingOperator.Emit): Make this work if the
4964         left-hand side is not a nullable type; fixes #75328.
4965
4966 2005-06-21  Martin Baulig  <martin@ximian.com>
4967
4968         * typemanager.cs
4969         (TypeManager.CSharpName): Use GetFullName() instead of `t.FullName'.
4970         (TypeManager.GetFullNameSignature): Likewise.
4971
4972         * convert.cs (Convert.Error_CannotImplicitConversion): Compare
4973         `source.FullName' and `target.FullName' to check whether there are
4974         two conflicting definitions.
4975
4976 2005-06-21  Martin Baulig  <martin@ximian.com>
4977
4978         * convert.cs (Convert.ImplicitTypeParameterConversion): Always use
4979         a BoxedCast - also for reference types - to be compatible with csc.
4980
4981 2005-06-21  Martin Baulig  <martin@ximian.com>
4982
4983         * expression.cs (MemberAccess.DoResolve): Add support for nested
4984         types in a generic instance; fixes #75320.
4985
4986 2005-06-20  Martin Baulig  <martin@ximian.com>
4987
4988         * generic.cs (TypeManager.InferType): Also walk the class
4989         hierarchy for generic instances; fixes #75261.
4990
4991 2005-06-17  Martin Baulig  <martin@ximian.com>
4992
4993         * typemanager.cs (TypeManager.IsBuiltinType): Use TypeToCoreType()
4994         to make things work for corlib.
4995
4996 2005-06-15  Martin Baulig  <martin@ximian.com>
4997
4998         * attribute.cs (Attribute.CheckSecurityActionValidity): Remove the
4999         obsolete `SecurityAction' values.
5000
5001 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
5002
5003         * rootcontext.cs: Reset TargetExt as well.
5004         
5005 2005-06-09  Martin Baulig  <martin@ximian.com>
5006
5007         * delegate.cs (Delegate.VerifyMethod): Added
5008         `MethodGroupExpr old_mg' argument; inherit its
5009         `HasTypeParameters'; fix #75085.
5010
5011 2005-06-09  Martin Baulig  <martin@ximian.com>
5012
5013         * expression.cs (Invocation.OverloadResolve): Correctly handle
5014         generic methods for the SetMemberIsUsed(); fix #75064.
5015
5016 2005-06-09  Martin Baulig  <martin@ximian.com>
5017
5018         * statement.cs (Throw.Resolve): Use TypeManager.IsSubclassOf();
5019         fixes #75062.
5020
5021 2005-06-08  Martin Baulig  <martin@ximian.com>
5022
5023         * cs-parser.jay (nullable_type_or_conditional): If we put the
5024         nullable back and our `type' is a `ComposedCast', remove the
5025         nullable from it.  Fixes #75156.
5026
5027         * expression.cs (ComposedCast.RemoveNullable): New public method.
5028
5029 2005-06-08  Martin Baulig  <martin@ximian.com>
5030
5031         The big Iterators rewrite :-)
5032
5033         * iterators.cs: Rewrite this to use the anonymous methods framework.
5034
5035         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
5036         before the TypeContainers; see 2test-21.cs.
5037
5038         * class.cs
5039         (TypeContainer.DefineType): Don't create a new EmitContext if we
5040         already have one (this only happens if we're an Iterator).
5041         (TypeContainer.Define): Also call Define() on all our iterators.
5042         (Method.CreateEmitContext): Added support for iterators.
5043
5044         * anonymous.cs
5045         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
5046         (AnonymousContainer.CreateMethodHost): Moved here from
5047         AnonymousMethod and made abstract.
5048         (AnonymousContainer.CreateScopeType): New abstract method.
5049         (AnonymousContainer.IsIterator): New public property.
5050         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
5051         get the ScopeTypeBuilder rather than manually defining it here. 
5052         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
5053         iterators here.
5054
5055         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
5056         before RootContext.DefineTypes().
5057
5058         * codegen.cs (EmitContext.RemapToProxy): Removed.
5059         (EmitContext.CurrentAnonymousMethod): Changed type from
5060         AnonymousMethod -> AnonymousContainer.
5061         (EmitContext.ResolveTopBlock): Protect from being called twice.
5062         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
5063         (EmitContext.EmitThis): Removed the iterators hacks; use the
5064         anonymous methods framework for that.
5065
5066         * statement.cs
5067         (ToplevelBlock.Container): Make this a property, not a field.
5068         (ToplevelBlock.ReParent): New public method; move the
5069         ToplevelBlock into a new container.
5070         (Foreach.TemporaryVariable): Simplify.
5071
5072 2005-06-05  Martin Baulig  <martin@ximian.com>
5073
5074         * statement.cs (LocalInfo.CompilerGenerated): New flag.
5075         (Block.AddTemporaryVariable): New public method; creates a new
5076         `LocalInfo' for a temporary variable.
5077         (Block.EmitMeta): Create the LocalBuilders for all the temporary
5078         variables here.
5079         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
5080         non-iterator variables.
5081
5082 2005-06-05  Martin Baulig  <martin@ximian.com>
5083
5084         * statement.cs (Foreach.TemporaryVariable): Create the
5085         LocalBuilder in the Emit phase and not in Resolve since in some
5086         situations, we don't have an ILGenerator during Resolve; see
5087         2test-19.cs for an example.
5088
5089 2005-06-04  Martin Baulig  <martin@ximian.com>
5090
5091         The big Foreach rewrite - Part II.
5092
5093         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
5094         with `PropertyInfo ienumerator_getcurrent'.
5095
5096         * codegen.cs (VariableStorage): Removed.
5097
5098         * statement.cs
5099         (Foreach): Derive from Statement, not ExceptionStatement.
5100         (Foreach.CollectionForeach): New nested class.  Moved all the code
5101         dealing with collection foreach here.
5102         (Foreach.ForeachHelperMethods): Removed.
5103         (Foreach.TemporaryVariable): Implement IMemoryLocation.
5104
5105 2005-05-23  Martin Baulig  <martin@ximian.com>
5106
5107         * statement.cs (Try.DoResolve): Don't create a `finally' if we
5108         don't need to.  Fix #75014.
5109
5110 2005-05-26  Raja R Harinath  <rharinath@novell.com>
5111
5112         Improve user-defined conversion handling.
5113         * convert.cs (GetConversionOperators): Rewrite.  Return only the
5114         applicable operators.
5115         (AddConversionOperators): New.  Helper for GetConversionOperators.
5116         (FindMostEncompassedType, FindMostEncompassingType): Verify that
5117         there is only one most encompassed/encompassing type.
5118         (FindMostSpecificSource, FindMostSpecificTarget): Remove
5119         "applicable operator" handling.
5120         (UserConversion): Move cache here from GetConversionOperators.
5121         Directly cache the chosen operator, rather than the whole
5122         MethodGroup.
5123         (ExplicitNumericConversion): Fix buggy implementation of Decimal
5124         case.  Allow conversion of decimal to sbyte and byte too.
5125         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
5126         New static methods.  Used to avoid allocating EmptyExpressions in
5127         convert.cs.
5128
5129 2005-05-24  Duncan Mak  <duncan@novell.com>
5130
5131         * ecore.cs (CastFromDecimal): New class for casting a decimal to
5132         another class, used in Convert.ExplicitNumericConversion.
5133         (CastToDecimal): New class, similar to above, but casts to
5134         System.Decimal, used in Convert.ImplicitNumericConversion and also
5135         in explicit convesion from double/float to decimal.
5136
5137         * convert.cs (ImplicitNumericConversion): Handle implicit
5138         conversions to System.Decimal.
5139         (ExplicitNumericConversion): handle explicit conversions to
5140         System.Decimal.
5141
5142         This fixes #68711.
5143         
5144 2005-05-20  Miguel de Icaza  <miguel@novell.com>
5145
5146         * typemanager.cs: Do not throw an exception in the TypeBuilder
5147         case, we take care of it on the TypeCode.
5148
5149 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
5150         
5151         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
5152         is back.
5153         
5154         * cs-parser.jay: Catch more lexical errors.
5155         
5156         * report.cs: Add one more Error method.
5157         
5158         * rootcontext.cs,
5159         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
5160
5161 2005-05-20  Martin Baulig  <martin@ximian.com>
5162
5163         * class.cs (TypeContainer.CircularDepException): Removed.
5164         (TypeContainer.DefineType): Removed the `InTransit' stuff.
5165         (TypeContainer.CheckRecursiveDefinition): Check for circular class
5166         (CS0146) and interface (CS0529) dependencies here.
5167
5168 2005-05-20  Martin Baulig  <martin@ximian.com>
5169
5170         * expression.cs (New.DoResolve): Move the CS0712 check above the
5171         CS0144 check; otherwise it can never be reached.
5172
5173 2005-05-20  Martin Baulig  <martin@ximian.com>
5174
5175         * cs-parser.jay: Fix CS0080 check; add CS0231 and CS0257 from MCS.
5176
5177 2005-05-20  Martin Baulig  <martin@ximian.com>
5178
5179         * class.cs (TypeContainer.DefineType): Fix CS0698 check.
5180
5181         * typemanager.cs (TypeManager.IsAttributeType): New public method.
5182
5183 2005-05-19  Martin Baulig  <martin@ximian.com>
5184
5185         * delegate.cs
5186         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
5187         to disable error reporting.
5188
5189         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
5190         here since we don't want to report an error; see the new test-336.cs.
5191
5192 2005-05-19  Raja R Harinath  <rharinath@novell.com>
5193
5194         * statement.cs (ToplevelBlock.GetParameterReference)
5195         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
5196         Move here from class Block.
5197         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
5198         * expression.cs (ParameterReference.DoResolveBase): Likewise.
5199
5200 2005-05-18  Martin Baulig  <martin@ximian.com>
5201
5202         Fix #74978.
5203
5204         * flowanalysis.cs
5205         (FlowBranching.Reachability): Add non-static public And() and Or()
5206         methods.
5207         (FlowBranchingSwitch): New class; do the `break_origins' thing
5208         like in FlowBranchingLoop.
5209         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
5210         reachability, not just locals and parameters.
5211         (FlowBranching.MergeChild): Remove some of the hacks for loop and
5212         switch; MergeBreakOrigins() now takes care of that.
5213
5214 2005-05-18  Martin Baulig  <martin@ximian.com>
5215
5216         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
5217         a loop and may leave it, reset the barrier; fixes #74974.
5218
5219 2005-05-16  Raja R Harinath  <rharinath@novell.com>
5220
5221         Fix test-382.cs.  Emit values of decimal constants.
5222         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
5223         Carved out of ...
5224         (TypeContainer.AddField): ... this.
5225         (TypeContainer.EmitFieldInitializers): Allow the list of fields
5226         with initializers to include 'Const's.
5227         (ClassPart.RegisterFieldForInitialization): Forward to
5228         PartialContainer.
5229         * const.cs (Const.Const): Pass initializer to base class.
5230         (Const.Define): In case of decimal constants, register them for
5231         initialization in a static constructor.
5232
5233 2005-05-14  Martin Baulig  <martin@ximian.com>
5234
5235         * statement.cs (Block.Resolve): Correctly handle unreachable code;
5236         do not call ResolveUnreachable() on unreachable statements in
5237         here, see the comment in the source code.
5238
5239 2005-05-13  Raja R Harinath  <rharinath@novell.com>
5240
5241         Fix #74934.
5242         * expression.cs (BinaryResolveOperator): If one of the operands of
5243         an equality comparison is 'null' and the other is a pointer type,
5244         convert the null to a NullPointer.
5245         * convert.cs (ImplicitReferenceConversion): If the expression is a
5246         NullLiteral and the target type is a pointer type, return a
5247         NullPointer instead.
5248         (ImplicitConversionStandard): Likewise.
5249
5250 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
5251         
5252         * cs-parser.jay: Set readonly context based on special constructs.
5253         
5254         * expression.cs (LocalVariableReference.DoResolveBase): Improved
5255         readonly variable error handling.
5256         
5257         * rootcontext.cs (EmitCode): Don't verify members when error
5258         occurred.
5259         
5260         * statement.cs (LocalInfo): Add reaodnly context information.
5261         (SetReadOnlyContext, GetReadOnlyContext): New methods.
5262
5263 2005-05-17  Martin Baulig  <martin@ximian.com>
5264
5265         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
5266         #70970. 
5267
5268 2005-05-13  Martin Baulig  <martin@ximian.com>
5269
5270         * statement.cs (Block.Resolve, ResolveUnreachable): Correctly
5271         handle unreachable blocks.
5272
5273 2005-05-13  Martin Baulig  <martin@ximian.com>
5274
5275         * class.cs
5276         (ConstructorInitializer.GetOverloadedConstructor): Don't crash.
5277         (MethodCore.CheckCore): Use TypeManager.IsEqual(); fix #74904 and
5278         #74905. 
5279
5280 2005-05-13  Martin Baulig  <martin@ximian.com>
5281
5282         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
5283         instance variable, not a local.  Fix #74873.
5284         (Block.ResolveUnreachable): Set it to true here.
5285
5286 2005-05-12  Martin Baulig  <martin@ximian.com>
5287
5288         * cs-parser.jay (property_declaration): Pass the `current_class',
5289         not the `current_container' to Property's .ctor.  Fixes #74912.
5290
5291 2005-05-11  Martin Baulig  <martin@ximian.com>
5292
5293         * typemanager.cs (Closure): Copy this from MCS and merge all the
5294         GMCS-specific changes into it.
5295
5296 2005-05-12  Raja R Harinath  <harinath@gmail.com>
5297
5298         Fix #74920.
5299         * typemanager.cs (unmanaged_enclosing_types): New.
5300         (IsUnmanagedType): Avoid infloops by using
5301         'unmanaged_enclosing_types' to talk with recursive invocations.
5302
5303 2005-05-11  Duncan Mak  <duncan@novell.com>
5304
5305         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
5306         continuing to process for 'arg'.
5307         (handle_preprocessing_directive): Check the argument of the #endif
5308         directive and report error CS1025 if there are any trailing
5309         characters.
5310
5311         According to the C# spec, having even whitespace after the #endif
5312         directive is illegal; however, because we call arg.TrimEnd ()
5313         beforehand, we have the same behavior as csc, allowing whitespace
5314         after the directive.
5315
5316         Fixes #74892.
5317
5318 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
5319
5320         Fix #74863.
5321         
5322         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
5323         (Constructor.GetObsoleteAttribute): Implemented correctly.
5324
5325 2005-05-10  Martin Baulig  <martin@ximian.com>
5326
5327         * generic.cs (Constraints.Resolve): Report CS0246 if we cannot
5328         resolve the type; fixes #74864.
5329         (DefaultValueExpression): Create the LocalTemporary in Emit(), not
5330         in DoResolve(); fixes #74862.
5331
5332 2005-05-10  Martin Baulig  <martin@ximian.com>
5333
5334         * support.cs (ReflectionParameters.ParameterModifier): Use
5335         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
5336         and `ParameterAttributes.In'.  Fixes #74884.
5337
5338 2005-05-10  Martin Baulig  <martin@ximian.com>
5339
5340         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Don't use
5341         the cache if we're just looking for `MemberTypes.NestedType' in a
5342         generic instance.
5343
5344         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
5345         constraints if we're still resolving the type tree.
5346         (Expression.MemberLookup): If we're resolving the type tree, only
5347         look for `MemberTypes.NestedType' since we're only interested in
5348         getting types.
5349
5350         * class.cs (TypeContainer.DefineType): Don't resolve the type
5351         parameters here; do this later in ResolveType() after the type
5352         tree has been resolved.
5353         (TypeContainer.ResolveType): New public method; this is called
5354         after the type tree is resolved and before the types are being
5355         populated.  We resolve the generic constraints here.
5356         (TypeContainer.DoDefineMember): Check the constraints on our base
5357         class and interfaces.
5358
5359         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Make this protected;
5360         set the `ResolvingTypeTree' flag on the EmitContext.
5361
5362         * codegen.cs (EmitContext.ResolvingTypeTree): New public field.
5363
5364 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
5365
5366         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
5367         
5368         * expression.cs (Argument.GetParameterModifier): Turned to property.
5369         (Invocation.Error_InvalidArguments): Add more descriptive errors.
5370         
5371         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
5372         its C# equivalent.
5373         
5374 2005-05-09  Raja R Harinath  <rharinath@novell.com>
5375
5376         Fix #74852.
5377         * decl.cs (MemberCache.AddMethods): Register override methods,
5378         rather than non-override methods.
5379         * typemanager.cs (RegisterOverride): New.
5380         (IsOverride): Update.
5381
5382 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
5383
5384         * typemanager.cs (TypeManager): Moved InitGenerics to Reset method.
5385
5386 2005-05-06  Martin Baulig  <martin@ximian.com>
5387
5388         * attribute.cs
5389         (Attributable.IsClsComplianceRequired): Fix typo in the method name.
5390         (AttributeTester.AnalyzeTypeCompliance): Add generics support.
5391
5392 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
5393
5394         Fix #73105.
5395         
5396         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
5397         recursive declaration.
5398         
5399         * statement.cs (Block.ResolveMeta): Report any error in resolving.
5400         
5401 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
5402
5403         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
5404         
5405         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
5406
5407 2005-05-05  Raja R Harinath  <rharinath@novell.com>
5408
5409         Fix #74797.
5410         * decl.cs (DeclSpace.FamilyAccessible): 
5411         Use TypeManager.IsNestedFamilyAccessible.
5412
5413         Fix reopened #64812.
5414         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
5415         internal'.
5416
5417 2005-05-04  Raja R Harinath  <rharinath@novell.com>
5418             Abin Thomas  <projectmonokochi@rediffmail.com>
5419             Anoob V E  <projectmonokochi@rediffmail.com>
5420             Harilal P R  <projectmonokochi@rediffmail.com>
5421
5422         Fix #64812.
5423         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
5424         allow access to all static members.
5425
5426 2005-05-04  Martin Baulig  <martin@ximian.com>
5427
5428         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
5429
5430 2005-05-04  Martin Baulig  <martin@ximian.com>
5431
5432         Fix #74655.
5433
5434         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
5435         section at the end; make things work if `default' is not the last
5436         section.        
5437
5438 2005-05-04  Martin Baulig  <martin@ximian.com>
5439
5440         Fix #70400.
5441
5442         * statement.cs (Switch): Replaced the `got_default' field with a
5443         `default_section' one.
5444         (Switch.CheckSwitch): Set `default_section' here.
5445         (Switch.Resolve): If we're a constant switch and the constant is
5446         not found, use the default section.
5447
5448 2005-05-03  Martin Baulig  <martin@ximian.com>
5449
5450         * expression.cs (ArrayAccess.EmitGetLength): New public method.
5451
5452         * statement.cs (Foreach.ArrayForeach): New nested class.
5453         (Foreach.TemporaryVariable): New nested class.
5454         (Foreach.EmitArrayForeach): Removed; this is now in the new
5455         ArrayForeach class.
5456
5457 2005-05-03  Raja R Harinath  <rharinath@novell.com>
5458
5459         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
5460         more conservative.
5461         (VerifyPendingMethods): Revert change below.
5462
5463         * typemanager.cs (IsOverride, RegisterNonOverride): New.
5464         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
5465         that used to trigger warning -28.  Remove warning -28.
5466         * expression.cs (Invocation.OverloadResolve): Use
5467         TypeManager.IsOverride to distinguish override methods.
5468
5469         Fix #74773.
5470         * pending.cs (VerifyPendingMethods): If a base type implements the
5471         requested interface, don't bother checking individual methods of
5472         the base type.  As a side-effect, this prevents the creation of
5473         unnecessary proxies.
5474
5475 2005-05-02  Martin Baulig  <martin@ximian.com>
5476
5477         Fix #70182.
5478
5479         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
5480         Also `And' the locals if the old vector is null.
5481         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
5482         null; in this case we basically reset all the variables.        
5483
5484 2005-05-02  Martin Baulig  <martin@ximian.com>
5485
5486         Fix #74529.
5487
5488         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
5489         Added `FlowBranching branching' argument; always `and' the
5490         variables instead of `or'ing them unless we're an infinite loop.
5491
5492         * statement.cs (While.Resolve): Create a new sibling unless we're
5493         infinite.       
5494
5495 2005-05-02  Martin Baulig  <martin@ximian.com>
5496
5497         Fix #70140.
5498
5499         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
5500         arguments; use it instead of creating a new TopLevelBlock.
5501         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
5502         our ConstructorInitializer.
5503
5504         * statement.cs
5505         (TopLevelBlock.TopLevelBranching): New public property.
5506         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
5507         and create our `TopLevelBranching'.
5508
5509         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
5510         anonymous method host, use `block.TopLevelBranching' rather than
5511         creating a new branching.
5512
5513 2005-04-20  Miguel de Icaza  <miguel@novell.com>
5514
5515         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
5516         a ScopeInfo, if any of the current children is a child of the new
5517         entry, move those children there.
5518
5519 2005-04-30  Martin Baulig  <martin@ximian.com>
5520
5521         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
5522         at the beginning of a SwitchSection.  Fix #73335.
5523
5524 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
5525
5526         Fix #74378
5527         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
5528         
5529         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
5530         (FieldExpr.DoResolve): Obsolete members are ignored for field
5531         initializers.
5532         
5533 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
5534
5535         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
5536         of arrays detection.
5537
5538         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
5539         verification.
5540         (Field.VerifyClsCompliance): Volatile fields are not compliant.
5541
5542         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
5543         arrays report.
5544
5545 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
5546
5547         * cs-parser.jay: Use the prefered version of -unsafe in error
5548         message.
5549
5550 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
5551
5552         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
5553         circumstances.
5554
5555 2005-04-20  John Luke  <john.luke@gmail.com>
5556
5557         * driver.cs: fix typo in error message, --outout to --output
5558
5559 2005-04-30  Martin Baulig  <martin@ximian.com>
5560
5561         * attribute.cs (Attribute.CheckSecurityActionValidity): Correctly
5562         handle the .NET 2.x security attributes.
5563
5564 2005-04-30  Martin Baulig  <martin@ximian.com>
5565
5566         * typemanager.cs
5567         (TypeManager.ExpandInterfaces): Don't add things twice.
5568
5569         * class.cs
5570         (TypeContainer.VerifyClsCompliance): Allow generic instances.
5571
5572 2005-04-29  Martin Baulig  <martin@ximian.com>
5573
5574         * generic.cs (Constraints.ResolveTypes): Expand interfaces.
5575
5576         * anonymous.cs: Added support for anonymous generic methods.
5577
5578 2005-04-29  Martin Baulig  <martin@ximian.com>
5579
5580         * typemanager.cs (TypeManager.GetInterfaces): Correctly handle
5581         generic instances.
5582
5583 2005-04-29  Martin Baulig  <martin@ximian.com>
5584
5585         * generic.cs (TypeManager.HasConstructorConstraint): Removed.
5586
5587         * expression.cs (New.DoResolve): Fix the CS0304 check.
5588
5589 2005-04-29  Martin Baulig  <martin@ximian.com>
5590
5591         * typemanager.cs (TypeManager.GetFullName): Updated to the new
5592         naming schema.
5593
5594         * class.cs (MethodCore.IsDuplicateImplementation): If we're an
5595         explicit interface implementation, compare the interface types.
5596         (MethodData.Define): Use the new naming scheme from the latest
5597         .NET 2.x beta2.
5598         (MemberBase.DoDefineBase): Resolve `InterfaceType' here.
5599
5600         * decl.cs (MemberName.GetMemberName): Removed.
5601         (MemberName.MethodName, FullName): New properties.
5602
5603 2005-04-25  Raja R Harinath  <rharinath@novell.com>
5604
5605         * gmcs.exe.config: Update v2.0.40607 -> v2.0.50215.
5606
5607 2005-04-22  Martin Baulig  <martin@ximian.com>
5608
5609         * generic.cs (GenericMethod): Create the EmitContext in the
5610         `Define()'; in `Define(MethodBuilder)', create the type parameters
5611         before calling `Define()'.  Fixes #73933.
5612
5613 2005-04-22  Martin Baulig  <martin@ximian.com>
5614
5615         * generic.cs
5616         (Constraints.Resolve): Make things work wrt. the new type lookup system.
5617         (ConstructedType.ResolveAsTypeTerminal): Don't override this.
5618
5619         * ecore.cs (Expression.ResolveAsTypeTerminal): If `te' is a
5620         ConstructedType, check its constraints.
5621
5622 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
5623
5624         * codegen.cs (InRefOutArgumentResolving): New field.
5625         
5626         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
5627         fields outside contructor.
5628         
5629         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
5630         
5631 2005-04-19  Miguel de Icaza  <miguel@novell.com>
5632
5633         * anonymous.cs (CaptureContext.EmitParameterInstance): The
5634         parameter code was not completed ever, so it was not as up-to-date
5635         as local variables.  Must finish it.
5636
5637         The bug fix was to compare the Toplevel of the block, not the
5638         current block.  Thanks for Ben for pointing this out. 
5639
5640 2005-04-19  Raja R Harinath  <rharinath@novell.com>
5641
5642         * decl.cs (AddMethods): Use the declaring type of the problem
5643         method to determine if we want to squash a warning.
5644
5645 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
5646
5647         * attribute.cs: Removed debug output.
5648
5649         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
5650         
5651         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
5652         Report.Stderr.
5653         
5654 2005-04-18  Raja R Harinath  <rharinath@novell.com>
5655
5656         Fix #74481.
5657         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
5658         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
5659         all null comparisons against reference types.
5660
5661 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
5662
5663         Fix# 74565
5664         * class.cs (TypeContainer.CircularDepException) New nested
5665         exception class.
5666         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
5667         (TypeContainer.DefineType): Removed error, reset InTransit before
5668         exit.
5669         (Class.DefineType): Throw exception when is in Transit.
5670         Catch exception and report error.
5671         (Struct.DefineType): Throw exception when is in Transit.
5672         Catch exception and report error.
5673         (Interface.DefineType): Throw exception when is in Transit.
5674         Catch exception and report error.
5675
5676         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
5677         handle nested exception handlers.
5678
5679         * flowanalysis.cs (InTryWithCatch): New method, search for try with
5680         a catch.
5681
5682         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
5683         InFinally and InCatch storage.
5684
5685         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
5686         (Catch.Resolve): Set and Restore ec.InCatch.
5687         (Try.Resolve): Set and Restore ec.InFinally.
5688         (Try.HasCatch): True when try has catch.
5689
5690 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
5691
5692         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
5693           for the same event member, so exclude such cases from warning 419.
5694           Fixed bug #74633.
5695
5696 2005-04-16  Miguel de Icaza  <miguel@novell.com>
5697
5698         * expression.cs (Binary.ResolveOperator): Apply patch from John
5699         Luke to fix bug 59864: operators &, | and ^ on enumerations
5700         require that the same enum type on both sides.
5701
5702         * driver.cs: Add warnings to old flag usage, this is to assist
5703         people who produce Makefiles and hope that the Makefiles will be
5704         used on Windows.
5705
5706         * class.cs (TypeContainer.EmitType): Moved the definition of the
5707         special $PRIVATE$ field from the resolve phase to the Emit phase.
5708         During resolve we do not know if we are a struct with
5709         HasExplicitLayout, we know this only after the attributes for the
5710         type are emitted.
5711
5712         Set the FieldOffset to zero on the dummy field that we create for
5713         the class.   Fixes 74590.
5714
5715 2005-04-16  Raja R Harinath  <rharinath@novell.com>
5716
5717         Fix #73834.
5718         * ecore.cs (PropertyExpr.resolved): New.
5719         (DoResolve): Use it to handle a case of double resolution here.
5720         Handle a case of identical-name-and-type-name.
5721         * expression.cs (ArrayCreation.CheckIndices): Avoid double
5722         resolution by storing the results of expression resolution back
5723         into the "probes" array.
5724
5725 2005-04-15  Raja R Harinath  <rharinath@novell.com>
5726
5727         Fix cs0208-7.cs and cs0208-8.cs.
5728         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
5729         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
5730         error reporting to point out the reason a struct is not unmanaged.
5731
5732 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5733
5734         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
5735           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
5736
5737 2005-04-13  Raja R Harinath  <rharinath@novell.com>
5738
5739         Fix #74528.
5740         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
5741         IdenticalNameAndTypeName here.
5742         (EventExpr.InstanceResolve): Likewise.
5743
5744 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
5745
5746         C# 2.0 DefaultCharSetAttribute implementation
5747         
5748         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
5749         which allows us to set GlobalNamespace for every resolve.
5750         (Attribute.ResolveArguments): Cut from Resolve.
5751         (Attribute.GetCharSetValue): Returns CharSet named argument.
5752         (Attribute.DefinePInvokeMethod): Gets default charset from
5753         module settings.
5754         (GlobalAttribute.ResolveAsTypeStep): Override.
5755         (GlobalAttribute.ResolveArguments): Override.
5756         
5757         * class.cs (TypeAttr): Is protected.
5758         
5759         * codegen.cs (ModuleClass.DefaultCharSet): New member.
5760         (ModuleClass.DefaultCharSetType): New memeber.
5761         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
5762         
5763         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
5764         charset from module.
5765         
5766         * delegate.cs (TypeAttr): Override.
5767         (Delegate.DefineType): Use this TypeAttr.
5768         
5769         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
5770         at very early stage (before types are defined) to resolve model
5771         module attributes. It will probably not work with corlib but it
5772         should be ok.
5773         
5774         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
5775         charset from module.
5776         
5777         * typemanager.cs (default_charset_type): New type.
5778
5779 2005-04-13  Raja R Harinath  <rharinath@novell.com>
5780
5781         * decl.cs (MemberCache.AddMethods): Don't warn if
5782         System.Object.Finalize has buggy MethodAttributes.
5783
5784         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
5785         removed below.
5786
5787 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5788
5789         * doc.cs : detect ambiguous reference to overloaded members.
5790           Fixed bug #71603. MS 1.1 csc does not detect it.
5791
5792 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5793
5794         * doc.cs : delegates must not be referenced with parameters.
5795           Fixed bug #71605.
5796
5797 2005-04-12  Miguel de Icaza  <miguel@novell.com>
5798
5799         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
5800
5801 2005-04-10  Miguel de Icaza  <miguel@novell.com>
5802
5803         * driver.cs (MainDriver): Stop processing if the CLS stage found
5804         errors. 
5805
5806         (CompilerCallableEntryPoint.InvokeCompiler): Always
5807         reset after execution;   Take a TextWriter argument for the
5808         output.
5809
5810         * report.cs: Use the error stream instead of hardcoding stderr. 
5811
5812 2005-04-09  Miguel de Icaza  <miguel@novell.com>
5813
5814         * class.cs: Reduce code paths to test, too small of an
5815         optimization to make it worth the extra testing.  Always perform
5816         it. 
5817
5818 2005-04-08  Raja R Harinath  <rharinath@novell.com>
5819
5820         Fix #74510.
5821         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
5822         operators that had errors reported on them.
5823
5824 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
5825
5826         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
5827         argument types.
5828         (Attribute.Resolve): Add named argument type checking.
5829         
5830         * class.cs (FixedField.Define): Use IsPrimitiveType
5831         
5832         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
5833         
5834         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
5835         unsafe parameter types.
5836         
5837         * statement.cs (Using.ResolveExpression): Add better error description.
5838         
5839         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
5840         
5841 2005-04-08  Raja R Harinath  <rharinath@novell.com>
5842
5843         Fix #74484.
5844         * attribute.cs (Attribute.GetAttributeUsage): Resolve
5845         AttributeUsageAttribute in the emitcontext of the attribute class,
5846         not in the emitcontext of the attributable entity it was attached to.
5847         * cs-parser.jay: Use 'current_class', not 'current_container',
5848         when creating a GlobalAttribute.
5849
5850 2005-04-08  Alp Toker  <alp@atoker.com>
5851
5852         * pending.cs: The fix to #58413 failed to compile methods implementing
5853         interfaces with/without params modifiers and vice versa, even though
5854         params modifiers aren't part of the signature. Make the modifier check
5855         less strict as in csc.
5856
5857 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
5858             Anoob V E  <projectmonokochi@rediffmail.com>
5859             Harilal P R  <projectmonokochi@rediffmail.com>
5860
5861         Fix #58413.
5862         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
5863         modifiers of pending methods.
5864         (PendingImplementation.PendingImplementation): Initialize it.
5865         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
5866         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
5867         with ParameterData.  Add check for modifiers.
5868         * class.cs (MethodData.Define): Update to changes.
5869
5870 2005-04-07  Raja R Harinath  <rharinath@novell.com>
5871
5872         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
5873
5874 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
5875
5876         * class.cs (PropertyMethod.Define): Check private accessor in abstract
5877         property.
5878         
5879         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
5880         
5881         * rootcontext.cs,
5882         * typemanager.cs: Registered RequiredAttributeAttribute.
5883         
5884 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
5885
5886         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
5887         Warning CS0169 is back at level 3.
5888         (IMethodData.SetMemberIsUsed): New method.
5889         
5890         * decl.cs (IsUsed): New value; moved from FieldBase.Status
5891         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
5892         
5893         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
5894
5895         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
5896         contants.
5897         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
5898         is used.
5899         
5900         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
5901         is used.
5902         
5903         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
5904         to avoid the problems with nested types.
5905
5906 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
5907             Anoob V.E  <projectmonokochi@rediffmail.com>
5908             Harilal P.R  <projectmonokochi@rediffmail.com>
5909             Raja R Harinath  <rharinath@novell.com>
5910
5911         Fix #73820.
5912         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
5913         attribute.
5914         * typemanager (GetConstructor): Make public.
5915
5916 2005-04-05  John Luke  <john.luke@gmail.com>
5917             Raja R Harinath  <rharinath@novell.com>
5918
5919         Fix #62232.
5920         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
5921         struct too.  Return false quicker in a few cases.
5922         (VerifyUnManaged): Use it.
5923
5924 2005-04-05  Raja R Harinath  <rharinath@novell.com>
5925
5926         Fix #74041.
5927         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
5928         not 'unreachable_seen'.
5929
5930 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
5931
5932         * attribute.cs (Attribute.GetValue): Removed unused.
5933         
5934         * codegen.cs (CodeGen.TrimExt): Removed unused.
5935         
5936         * cs-parser.jay (output): Removed unused.
5937         
5938         * cs-tokenizer.cs (hex_digits): Removed unused.
5939         
5940         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
5941         
5942         * expression.cs (Indirection.LoadExprValue): Removed unused.
5943         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
5944         
5945         * iterators.cs (Iterator.param_types): Removed unused.
5946         
5947         * statement.cs (Goto.block): Removed unused.
5948         (ToplevelBlock.did): Removed unused.
5949         (Switch.ResolveConstantSwitch): Removed unused.
5950
5951 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
5952
5953         * rootcontext.cs: Allow mcs to bootstrap with the compilation
5954         resetting thingy.
5955
5956 2005-04-19  Martin Baulig  <martin@ximian.com>
5957
5958         Merged r42462 from MCS and made it work for GMCS.
5959
5960         * class.cs (MethodCore.ds): Moved this field to `MemberBase'.
5961
5962         * generic.cs (GenericMethod.Define): Removed `return_type' argument.
5963
5964 2005-04-01  Raja R Harinath  <rharinath@novell.com>
5965
5966         Fix #74232 and cs0208-3.cs.
5967         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
5968         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
5969         unmanaged type.  Don't use FieldBuilders when 't' is a
5970         TypeBuilder.  Use ModFlags and MemberType fields.
5971         * class.cs (MemberBase.member_type): Rename from MemberType.
5972         (MemberBase.MemberType): New property.  Determines member_type on
5973         demand.
5974         (MemberBase.DoDefine): Don't initialize MemberType here.
5975         (FieldMember.Define): Likewise.
5976
5977 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
5978
5979         Fix #74241
5980         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
5981         Attributes are emitted there.
5982         
5983 2005-04-01  Raja R Harinath  <rharinath@novell.com>
5984
5985         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
5986         keyword in 'partial enum' too.
5987         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
5988         is not allowed).
5989         Report from Kamil Skalski <nazgul@omega.pl>.
5990
5991         Fix #74309.
5992         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
5993         have partial containers too.
5994
5995         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
5996         in block' checks to Block.CheckInvariantMeaningInBlock.
5997         * statement.cs (Block.GetKnownVariableInfo): Make private.
5998         (Block.IsVariableUsedInChildBlock): Remove.
5999         (Block.IsVariableUsedInBlock): Likewise.
6000         (Block.CheckInvariantMeaningInBlock): New.  Show location of
6001         conflicting declaration.
6002         (Block.AddVariable): Make error messages less long-winded and more
6003         specific.  Show location of conflicting declaration.
6004         * parameter.cs (Parameters.Location): New readonly property.
6005
6006 2005-03-31  Raja R Harinath  <rharinath@novell.com>
6007
6008         Clean up semantics of invoking ResolveMemberAccess.
6009         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
6010         can have an instance, ensure that we pass in a non-TypeExpression
6011         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
6012         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
6013         argument.  Update to changes and simplify.
6014         (FieldExpr.Emitinstance): Remove CS0120 check.
6015         (PropertyExpr.EmitInstance): Likewise.
6016         * expression.cs (Argument.Resolve): Likewise.
6017         (Invocation.DoResolve): Update to changes in semantics of
6018         InstanceExpression.
6019
6020 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
6021
6022         Fix #74241
6023         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
6024         customization.
6025         
6026         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
6027
6028 2005-03-31  Raja R Harinath  <rharinath@novell.com>
6029
6030         Fix difference in behaviour with commandline invocation.
6031         * driver.cs (Driver.Reset): New.
6032         (CompilerCallableEntryPoint): Call it.
6033
6034         * statement.cs (If.Resolve): Avoid spurious "uninitialized
6035         variable" warnings if the boolean expression failed to resolve.
6036
6037 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
6038
6039         * attribute.cs: Fix the union of several permissions when some of them
6040         are unrestricted (so the result isn't an unrestricted permission set).
6041         Fix #74036.
6042
6043 2005-03-30  Raja R Harinath  <rharinath@novell.com>
6044
6045         * ecore.cs (MemberExpr): New class.  Convert from interface
6046         IMemberExpr.
6047         (MemberExpr.ResolveMemberAccess): Refactor and move here from
6048         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
6049         error checks.
6050         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
6051         (MethodGroupExpr.IsExplicitImpl): Remove.
6052         (Expression.GetFieldFromEvent): Remove.
6053         (SimpleName.MemberStaticCheck): Remove.
6054         (SimpleName.DoSimpleNameResolve): Update to changes.
6055         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
6056         (MemberAccess.IdenticalNameAndTypeName): Remove.
6057         (MemberAccess.error176): Move to MemberExpr.
6058         (MemberAccess.DoResolve): Update to changes.
6059         (BaseAccess.DoResolve): Likewise.
6060
6061 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
6062
6063         C# 2.0 Conditional attribute class implementation
6064         
6065         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
6066         Analyzes class whether it has attribute which has ConditionalAttribute
6067         and its condition is not defined.
6068         
6069         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
6070         (Class.IsExcluded): New method. Search for at least one defined
6071         condition in ConditionalAttribute of attribute class.
6072
6073 2005-03-30  Raja R Harinath  <rharinath@novell.com>
6074
6075         * ecore.cs (PropertyExpr): Derive from Expression, not
6076         ExpressionStatement.
6077         (PropertyExpr.EmitStatement): Remove.
6078
6079 2005-03-29  Raja R Harinath  <rharinath@novell.com>
6080
6081         Fix #74060.
6082         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
6083         internal field "value__" of an enum be private.  The examples for
6084         "value__" that I found on MSDN all used FieldAttributes.Private.
6085
6086         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
6087         Don't mention IL method attribute names.
6088
6089         Fix #47991.  Remove a TODO.
6090         * statement.cs (Block.Toplevel): Make into a field.
6091         (Block.Parameters): Move into ToplevelBlock.
6092         (Block.known_variables): Rename from child_variable_names.
6093         (Block.Block): Remove variants that take Parameters.  Initialize
6094         'Toplevel' with the immediately surrounding toplevel block.
6095         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
6096         LocalInfo parameter.
6097         (Block.GetKnownVariableInfo): New.
6098         (Block.IsVariableNameUsedInChildBlock): Update.
6099         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
6100         the block, even though it may not be in scope.
6101         (Block.AddVariable): Remove Parameters parameter.  Use
6102         Toplevel.Parameters instead.
6103         (Block.AddConstant): Remove Parameters parameter.
6104         (Block.GetParameterReference): Update to use Toplevel.Parameters.
6105         (Block.IsParamaterReference): Likewise.
6106         (Block.IsLocalParameter): Likewise.  Simplify a lot.
6107         (ToplevelBlock.Parameters): New.  Moved from Block.
6108         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
6109         initialize Parameters to a non-null value.
6110         * cs-parser.jay: Update to changes.
6111         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
6112         simple names that mean different things in the same block.  Use
6113         Block.IsVariableNameUsedInBlock.
6114
6115 2005-03-28  Raja R Harinath  <rharinath@novell.com>
6116
6117         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
6118
6119 2005-03-26  Raja R Harinath  <harinath@acm.org>
6120
6121         Fix #73038.
6122         * assign.cs (Assign.DoResolve): When the RHS of an assignment
6123         fails to resolve, ensure that the LHS is still resolved as an
6124         lvalue.
6125
6126 2005-03-25  Raja R Harinath  <harinath@acm.org>
6127
6128         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
6129         ec.ContainerType.
6130         (Enum.current_ec): Remove.
6131         (Enum.LookupEnumValue): Remove EmitContext argument.
6132         Just uses the one created during DefineType.
6133         (Enum.FindMembers): Update.
6134         * expression.cs (MemberAccess.DoResolve): Update.
6135
6136 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
6137
6138         * assign.cs (Assign.DoResolve): Check for CS1717 when
6139         source and target are same (uses Equals).
6140
6141         * expression.cs (LocalVariableReference, ParameterReference,
6142         This): Implemented Equals, GetHashCode.
6143
6144         * statement.cs (Block.GetParameterReference): Removed useless
6145         local variable.
6146
6147 2005-03-22  Raja R Harinath  <rharinath@novell.com>
6148
6149         Fix cs0128.cs
6150         * statement.cs (Block.AddVariable): Ensure that we skip implicit
6151         blocks before deciding whether the error is cs0136 or cs0128.
6152
6153         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
6154         (using_alias_directive, using_namespace_directive): Pass
6155         MemberName, not an expression to Namespace.UsingAlias and
6156         Namespace.Using.
6157         (MakeName): Use the MemberName of the namespace.
6158         * namespace.cs (Namespace.MemberName): New.
6159         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
6160         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
6161         Likewise.
6162         * decl.cs (MemberName.Name): Make readonly.
6163         (MemberName.FromDotted): New "constructor".
6164         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
6165         (MemberCore.Name): Compute from MemberName on demand.
6166         (MemberCore.SetMemberName): Provide a way to change the
6167         MemberName.
6168         (MemberCore.AddToContainer): Don't take a fullname parameter.
6169         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
6170         fully qualified name of the container to the member name.
6171         (TypeContainer.AddToTypeContainer): Use a fully qualified name
6172         only if the type is a member of the root container.
6173         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
6174         MemberName.Left rather than searching for an embedded ".".
6175         (PartialContainer.CreatePart): Update to changes in RootContext.
6176         (MemberBase.ShortName): Turn into a property.  Use
6177         MemberCore.SetMemberName.
6178         (MemberBase.ExplicitInterfaceName): Remove.
6179         (MemberBase.UpdateMemberName): Remove.
6180         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
6181         (PropertyBase.SetMemberName): New override.
6182         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
6183         (Tree.GetDecl): New.
6184         (Tree.AllDecls): Rename from Decls.
6185         * attribute.cs, enum.cs, report.cs: Update to changes.
6186         * driver.cs (MainDriver): Use MemberName.FromDotted on
6187         RootContext.MainClass.
6188
6189 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
6190
6191         * class.cs (FixedField.Define): Check for CS1664 and more sanity
6192         checks.
6193
6194         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
6195
6196 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
6197
6198         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
6199         property accessor modifiers.
6200
6201         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
6202         fixed buffer attribute (CS1716).
6203         (PropertyMethod.HasCustomAccessModifier): When property accessor
6204         has custom modifier.
6205
6206         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
6207         modifiers.
6208         (PropertyExpr.DoResolveLValue): Add CS0272.
6209
6210 2005-03-17  Miguel de Icaza  <miguel@novell.com>
6211
6212         * convert.cs: When converting to a pointer, use the proper Conv.U
6213         or Conv.I depending on the source data type.
6214
6215         * cs-tokenizer.cs: Make the size for large decimal constants,
6216         fixes #72957.
6217
6218 2005-03-17  Martin Baulig  <martin@ximian.com>
6219
6220         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
6221         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
6222
6223 2005-03-17  Martin Baulig  <martin@ximian.com>
6224
6225         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
6226         to bool so we can return an error condition.
6227         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
6228         returned an error.
6229
6230 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
6231
6232         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
6233         attributes.
6234
6235 2005-03-16  Raja R Harinath  <rharinath@novell.com>
6236
6237         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
6238         Refactor to avoid traversing the list of assemblies, and to avoid
6239         string concatenation.
6240         * typemanager.cs (guid_attr_type): Remove.
6241         (negative_hits, pointers, references): Remove hashes.
6242         (type_hash): New.
6243         (GetConstructedType): New.  Uses type_hash to handle constructed
6244         types (arrays, references, pointers).
6245         (GetReferenceType, GetPointerType): Use it.
6246         (GetNestedType): New.  Uses type_hash to handle nested types of
6247         reflected types.
6248         (LookupType, LookupTypeDirect): Remove.
6249         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
6250         'types' hash and LookupTypeReflection directly.
6251         (params_string, params_object): Use GetConstructedType.
6252         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
6253         top-level types.
6254         (Namespace.Lookup): Use cached_types.
6255         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
6256         provided by old TypeManager.LookupType.
6257         * rootcontext.cs (MakeFQN): Remove.
6258         * decl.cs (DeclSpace.MakeFQN): Likewise.
6259         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
6260         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
6261         TypeManager.GetConstructedType.
6262         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
6263
6264 2005-04-16  Zoltan Varga  <vargaz@freemail.hu>
6265
6266         * cs-parser.jay: Fix build.
6267
6268 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
6269
6270         * class.cs (TypeContainer.CircularDepException) New nested
6271         (MethodCore.CheckBase): Report CS1715 for properties and indexers.
6272
6273         * cs-parser.jay: Reports CS1527 for any namespace element.
6274
6275         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
6276         Added CS0407.
6277
6278         * expression.cs (ParameterReference.IsAssigned): Changed error to
6279         CS0269.
6280         (Error_WrongNumArguments): Moved CS0245 detection here.
6281
6282         * statement.cs (Return.Resolve): Add CS1622 report.
6283
6284 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
6285
6286         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
6287
6288 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
6289
6290         * attribute.cs expression.cs: Get rid of some allocations.
6291
6292 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
6293
6294         * doc.cs : just eliminate the latest change.
6295
6296 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6297
6298         * doc.cs : commented out the latest change. It breaks xml-030.cs
6299
6300 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6301
6302         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
6303           fail. So invoke CreateType() in FindDocumentedType().
6304
6305 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6306
6307         * cs-tokenizer.cs : added IsKeyword().
6308         * doc.cs : Detect keyword incorrectly used as identifier.
6309           Allow identifiers prefixed by @.
6310
6311 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
6312
6313         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
6314         It caused exception in namespace resolving (again!).
6315         
6316         * class.cs (Class.ctor): Removed exit.
6317         (PropertyMethod.ctor): ditto.
6318         
6319         * codegen.cs (Codegen.Reset): Reset static data.
6320         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
6321         
6322         * cs-tokenizer.cs (Cleanup): Removed.
6323         
6324         * driver.cs (GetSystemDir): Rewrote to one line command.
6325         It caused problem with unloaded dynamic modules.
6326         (UnixParseOption): Removed Exit.
6327         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
6328         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
6329         Now can be mcs used as library.
6330         
6331         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
6332         empty location.
6333         
6334         * location.cs (Reset): Reset static data.
6335         
6336         * namespace.cs (Reset): Reset static data.
6337         
6338         * report.cs (Report.Reset): Reset static data.
6339         
6340         * rootcontext.cs (RootContext.Reset): Reset static data.
6341         
6342         * tree.cs (RootTypes.ctor): Use Location.Null
6343         
6344         * typemanager.cs (TypeManager.Reset): Reset static data.
6345         (CoreLookupType): Removed Exit.
6346         (TypeHandle.Reset): Reset static data.
6347         
6348 2005-03-10  Raja R Harinath  <rharinath@novell.com>
6349
6350         Fix #73516.
6351         * typemanager.cs (ComputeNamespaces): Import namespaces from
6352         referenced modules too.
6353
6354 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6355
6356         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
6357         than '.'.
6358
6359 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6360
6361         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
6362         enclosing DeclSpace.  This ensures that a name-lookup populates
6363         more caches and there are fewer 'TypeExpression's.  Carve out
6364         nested type lookup into ...
6365         (LookupNestedTypeInHierarchy): ... this.
6366
6367 2005-04-15  Martin Baulig  <martin@ximian.com>
6368
6369         Merged r41590 from MCS and make it work in the generics land.
6370
6371         * generic.cs (TypeParameter.UpdateConstraints): Removed the
6372         `check' argument.
6373
6374         * class.cs (PartialContainer.UpdateConstraints): Removed.
6375         (PartialContainer.CheckConstraints): Removed.
6376         (PartialContainer.SetParameterInfo): Store the constraints here.
6377         (PartialContainer.DefineTypeParameters): New public method;
6378         resolve the type parameter's constraints here.  Note that the
6379         PartialContainer doesn't have an EmitContext anymore, so we must
6380         do this in the ClassPart.
6381
6382 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6383
6384         Clean up a few partial-class semantics.  
6385         Fixes test-357.cs and cs1618-2.cs.
6386         * cs-parser.jay (struct_declaration): Use 'current_class' as
6387         parent of newly-created struct.  Remove call to Register ().
6388         Use 'pop_current_class' to complete handing the current struct.
6389         (interface_declaration): Likewise.
6390         (class_declaration): Likewise.
6391         (enum_declaration): Use 'current_class' as parent of newly created
6392         enum.
6393         (delegate_declaration): Likewise.
6394         (pop_current_class): New function.  This is used to handle closing
6395         up the 'current_class' and 'current_container', and pointing them
6396         to the enclosing class/container.
6397         (CSharpParser): Initialize 'current_class' too.
6398         * decl.cs (MemberCore): Add check for invariant: a partial
6399         container is not a parsed entity, and thus does not enclose any
6400         parsed members.
6401         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
6402         (DeclSpace.BaseTypeExpr): Use it.
6403         (DeclSpace.LookupType): Add check for invariant.
6404         * class.cs (TypeContainer): Add check for invariant: a nested
6405         class should have the same NamespaceEntry as its enclosing class.
6406         (TypeContainer.EmitFieldInitializers): Make virtual.
6407         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
6408         MemberCore.
6409         (TypeContainer.Register): Remove.
6410         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
6411         null.  Use TypeResolveEmitContext for resolving base types and
6412         interfaces.  Move initialization of Parts.TypeBuilder here from
6413         ...
6414         (TypeContainer.DefineNestedTypes): ... here.
6415         (PartialContainer): Take a Namespace not a NamespaceEntry.
6416         (PartialContainer.Create): Don't use Register.  Call the
6417         appropriate Add... function directly.
6418         (ClassPart): Take both the PartialContainer and the enclosing
6419         class as constructor arguments.
6420         (ClassPart.EmitFieldInitializers): Override.
6421         (ClassPart.PartFindNestedTypes): Remove.
6422         (FieldBase.GetInitializerExpression): Resolve the initializer
6423         expression in the emit context of the enclosing class.
6424         * tree.cs (RootTypes): Remove Register ().
6425         
6426 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
6427
6428         * cs-parser.jay: Removed CS0134.
6429         
6430         * driver.cs: Removed CS1901.
6431         
6432         * expression.cs (SizeOf.DoResolve): Don't report CS0233
6433         for predefined types.
6434
6435 2005-03-07  Duncan Mak  <duncan@novell.com>
6436
6437         * codegen.cs (Save):  Catch UnauthorizedAccessException as
6438         well. Fixes bug #73454.
6439
6440 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
6441
6442         * cs-tokenizer.cs (xtoken): Add CS1035.
6443         
6444         * class.cs (MethodData.Define): Add CS0683.
6445         (FieldMember.ctor): Add CS0681.
6446
6447 2005-03-07  Raja R Harinath  <rharinath@novell.com>
6448
6449         * ecore.cs (SimpleName.DoResolve): Rename from
6450         SimpleName.DoResolveAllowStatic.
6451         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
6452         Pass 'intermediate' flag to MemberStaticCheck.
6453         (SimpleName.MemberStaticCheck): Skip "static check" only in case
6454         of "intermediate" lookups via MemberAccess.
6455         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
6456         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
6457
6458 2005-03-07  Raja R Harinath  <rharinath@novell.com>
6459
6460         Fix #73394.
6461         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
6462         slipped in because of variable names that are identical to a
6463         builtin type's BCL equivalent ('string String;', 'int Int32;').
6464         (PropertyExpr.EmitInstance): Likewise.
6465
6466 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
6467
6468         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
6469         
6470         * report.cs (warning_ignore_table): Made public.
6471
6472 2005-03-04  Raja R Harinath  <rharinath@novell.com>
6473
6474         Fix #73282.
6475         * class.cs (MethodData.Emit): Pass 'container' to
6476         container.GetObsoleteAttribute instead of 'container.Parent'.
6477
6478 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
6479
6480         * cs-parser.jay: Add 1534 error test.
6481
6482         * iterators.cs (Yield.CheckContext): Add error 1629.
6483         (Iterator.ctor): Save unsafe modifier.
6484         (MoveNextMethod.DoEmit): Restore unsafe context.
6485
6486         * namespace.cs (UsingAlias): Better error message.
6487
6488 2005-03-03  Dan Winship  <danw@novell.com>
6489
6490         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
6491         the warning message [#73219]
6492
6493 2005-03-03  Raja R Harinath  <rharinath@novell.com>
6494
6495         Fix compile with MCS 1.0.0.0.
6496         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
6497         w_restore to not depend on string constant folding.
6498
6499 2005-03-03  Raja R Harinath  <rharinath@novell.com>
6500
6501         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
6502         CS0246 check to users who passed 'silent = false'.
6503         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
6504         check.
6505         (SimpleName.SimpleNameResolve): Update.
6506         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
6507         (MemberAccess.IdenticalNameAndTypeName): Update.
6508         * doc.cs (FindDocumentedTypeNonArray): Update.
6509
6510 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
6511
6512         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
6513         * parameters.cs (ComputeAndDefineParameters): Remove.
6514         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
6515         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
6516         Use GetParameterInfo.
6517
6518 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
6519
6520         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
6521
6522 2005-03-02  Raja R Harinath  <rharinath@novell.com>
6523
6524         Unify DeclSpace.LookupType and DeclSpace.FindType.
6525         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
6526         is in charge of defining nested types on demand.
6527         (DeclSpace.LookupType): Use it when the current_type is a
6528         TypeBuilder.  Use LookupTypeDirect for reflected types.
6529         (DeclSpace.FindType): Remove.
6530         (DeclSpace.LookupInterfaceOrClass): Likewise.
6531         (DeclSpace.DefineTypeAndParents): Likewise.
6532         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
6533         DeclSpace.LookupType.
6534         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
6535         * typemanager.cs (LookupType): Simplify.
6536         (AddUserType): Remove type from negative_hits.
6537         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
6538         * class.cs (TypeContainer.FindMembers): Move handling of nested
6539         types ...
6540         (TypeContainer.FindMembers_NestedTypes): ... here.
6541         (TypeContainer.FindNestedType): Implement override.
6542         (ClassPart.FindNestedType): Delegate to PartialContainer.
6543         (ClassPart.PartFindNestedType): Looks up the nested types of the
6544         part alone.
6545
6546 2005-04-14  Martin Baulig  <martin@ximian.com>
6547
6548         * generic.cs (ConstructedType): Moved all the type lookup and
6549         nested class logic into SimpleName.
6550         (ConstructedType.ResolveConstructedType): Our underlying type is
6551         already fully resolved; all the type lookup stuff is in
6552         SimpleName.
6553
6554         * ecore.cs (SimpleName.ResolveAsTypeStep): Resolve nested
6555         constructed types here instead of in ConstructedType.
6556
6557         * decl.cs (MemberName.GetTypeExpression): Always create a
6558         SimpleName, not a ConstructedType.
6559         (DeclSpace.ResolveNestedType): Removed; this is now in SimpleName.
6560
6561 2005-03-02  Martin Baulig  <martin@ximian.com>
6562
6563         * class.cs (TypeContainer.DoDefineMembers): We also need a default
6564         static constructor in static classes.
6565
6566 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
6567
6568         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
6569         sizeParamIndex is not specified.
6570
6571 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
6572
6573         Fix #73117
6574         * report.cs (WarningMessage.IsEnabled): Missing null check.
6575
6576 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6577
6578         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
6579         in the fields and not in the properties.
6580
6581 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
6582
6583         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
6584         fields as well.
6585
6586 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6587
6588         * attribute.cs: Small refactoring (improved robustness).
6589         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
6590         (ValidateGuid): Removed.
6591         (Resolve): Removed referenced to above mentioned.
6592         (GetAttributeUsage): Made private and changed to work without
6593         class assistance.
6594         (GetIndexerAttributeValue): Don't crash.
6595         (GetConditionalAttributeValue): Ditto.
6596         (GetClsCompliantAttributeValue): Ditto.
6597         (ExtractSecurityPermissionSet): All attributes exceptions are
6598         error 648.
6599         (GetPropertyValue): New helper.
6600         (GetMethodImplOptions): New method.
6601         (DefinePInvokeMethod): Reuse common code. Implemented handling of
6602         some missing properties.
6603         
6604         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
6605         (Method.ApplyAttributeBuilder): Updated.
6606         
6607         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
6608         exception.
6609
6610 2005-02-28  Raja R Harinath  <rharinath@novell.com>
6611
6612         Fix #73052.
6613         * report.cs (Report.SymbolRelatedToPreviousError): Handle
6614         non-simple types (array, pointer, reference).
6615
6616 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6617
6618         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
6619
6620         * class.cs (MethodCore.IsDuplicateImplementation): Special error
6621         for operators.
6622         (Method.CheckBase): Catch wrong destructor here.
6623         (MethodData.Define): Add errors 550, 668.
6624
6625         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
6626
6627         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
6628
6629         * pending.cs (VerifyPendingMethods): Add error 551.
6630
6631         * typemanager.cs (CSharpName): Next error report helper.
6632
6633 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
6634
6635         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
6636         attributes. Removed useless attribute double check.
6637         It saves almost 2MBs for corlib.
6638
6639 2005-02-25  Raja R Harinath  <rharinath@novell.com>
6640
6641         Fix #72924.
6642         * statement.cs (ExpressionStatement.Resolve): Make robust to being
6643         called twice in case of error.
6644
6645 2005-02-23  Chris Toshok  <toshok@ximian.com>
6646
6647         Fix compiler portions of #72827.
6648         * statement.cs (Block.Emit): call Begin/EndScope on the
6649         EmitContext instead of the ILGenerator.
6650
6651         * codegen.cs (EmitContext.BeginScope): new method, call
6652         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
6653         we have one.)
6654         (EmitContext.BeginScope): same, but EndScope and CloseScope
6655
6656         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
6657         offset and call the superclass's OpenScope(int) with it.
6658         (SymbolWriter.CloseScope): get the current il
6659         offset and call superclass's CloseScope(int) with it.
6660
6661 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
6662
6663         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
6664         CS1677 for out and ref as well.
6665
6666         * class.cs (Method.Define): Add error CS1599 detection.
6667         
6668         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
6669         
6670         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
6671         
6672         * delegate.cs (Delegate.Define): Add error CS1599 detection.
6673         
6674         * support.cs.cs (ModifierDesc): New helper method.
6675
6676 2005-02-23  Raja R Harinath  <rharinath@novell.com>
6677             Abin Thomas  <projectmonokochi@rediffmail.com>
6678             Anoob V E  <projectmonokochi@rediffmail.com>
6679             Harilal P R  <projectmonokochi@rediffmail.com>
6680
6681         Fix #57851, #72718.
6682         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
6683         MemberLookup (used for error reporting) actually returns a result.
6684         Fix error report number (122, not 112).
6685
6686 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
6687             Anoob V E  <projectmonokochi@rediffmail.com>
6688             Harilal P R  <projectmonokochi@rediffmail.com>
6689
6690         Fix #71134.
6691         * pending.cs (PendingImplementation.GetAbstractMethods):
6692         Find NonPublic members too.
6693
6694 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
6695
6696         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
6697         Fixed error 217.
6698         
6699         * class.cs (MethodCore.CheckMethodAgainstBase):
6700         Add error 239 report.
6701
6702 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6703
6704         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
6705         
6706         * class.cs (Operator.Define): Add error 217 report.
6707         
6708 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6709
6710         Fix #68955.
6711         * expression.cs (Invocation.IsApplicable): Make public.
6712         (Invocation.IsParamsMethodApplicable): Likewise.
6713         * delegate.cs (Delegate.VerifyApplicability): Don't use
6714         Invocation.VerifyArgumentCompat for parameter applicability
6715         testing.  Use Invocation.IsApplicable and
6716         Invocation.IsParamsMethodApplicable.
6717
6718 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6719
6720         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
6721         
6722         * class.cs (Operator.Define): Add error 217 report.
6723         
6724 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6725
6726         * namespace.cs (UsingEntry.Resolve): Undo change below.
6727
6728 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6729
6730         Fix #72756.
6731         * ecore.cs (Expression.MemberLookupFailed): Add argument to
6732         disable the error message when the extended MemberLookup also
6733         fails.
6734         (Expression.MemberLookupFinal): Update.
6735         (SimpleName.DoSimpleNameResolve): Update.
6736         * expression.cs (MemberAccess.ResolveNamespaceOrType):
6737         Don't use MemberLookupFinal.
6738         (New.DoResolve): Update.
6739         (BaseAccess.CommonResolve): Update.
6740
6741 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6742
6743         Fix #72732.
6744         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
6745         occured previously, don't resolve again.
6746
6747 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6748
6749         Fix #69949
6750         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
6751         argument. Call ResolveAttributeUsage for unresolved.
6752         when types doesn't match ctor arguments.
6753         
6754         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
6755         for nested attribute classes.
6756         (Class.attribute_usage): Removed.
6757         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
6758         for attribute class.
6759         
6760         * ecore.cs (IsAttribute): Removed.
6761         
6762         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
6763         
6764         * rootcontext.cs (RegisterAttribute): Removed, attributes are
6765         now normal types.
6766         (attribute_types): Removed.
6767         (EmitCode): Global attributes are emited as the latest.
6768
6769 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
6770
6771         * class.cs (EmitFieldInitializers): Don't emit field initializer
6772         for default values when optimilization is on.
6773         
6774         * constant.cs (Constant.IsDefaultValue): New property.
6775         
6776         * driver.cs: Add /optimize handling.
6777         
6778         * constant.cs,
6779         * ecore.cs,
6780         * literal.cs: Implement new IsDefaultValue property.
6781         
6782         * rootcontext.cs (Optimize): New field, holds /optimize option.
6783
6784 2005-02-18  Raja R Harinath  <rharinath@novell.com>
6785
6786         Fix crasher in re-opened #72347.
6787         * namespace.cs (Namespace.Lookup): Return null if
6788         DeclSpace.DefineType returns null.
6789
6790         Fix #72678.
6791         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
6792
6793 2005-02-18  Raja R Harinath  <rharinath@novell.com>
6794
6795         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
6796         now returns null if it cannot resolve to an lvalue.
6797         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
6798         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
6799         returned null.  Remove check for SimpleName.
6800         (EventExpr.DoResolveLValue): New.
6801         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
6802         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
6803         error from ...
6804         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
6805         avoid CS0131 error.
6806         (Unary.ResolveOperator): Move CS0211 check ...
6807         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
6808         CS0131 error.
6809         (Unary.DoResolveLValue): Simplify.
6810         (AddressOf.DoResolveLValue): New.
6811         (ArrayAccess.DoResolveLValue): New.
6812
6813 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
6814
6815         * attribute.cs (Attribute.Resolve): Add arguments casting for
6816         when types doesn't match ctor arguments.
6817
6818 2005-02-16  Raja R Harinath  <rharinath@novell.com>
6819
6820         Fix parts of #63202.
6821         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
6822         lookup of operator in base type.  Ensure that all checks happen
6823         when the operator resolves to an "op_..." method.
6824
6825 2005-02-15  Raja R Harinath  <rharinath@novell.com>
6826
6827         Fix #71992.
6828         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
6829         'ignore_cs0104' parameter.  Pass it to ...
6830         (NamespaceEntry.Lookup): ... this.
6831         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
6832         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
6833         (TypeLookupExpression.DoResolveAsTypeStep): Update.
6834         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
6835         Update.  Request that cs0104 errors be ignored.
6836         (ComposedCast.ResolveAsTypeStep): Update.
6837
6838 2005-02-14  Raja R Harinath  <rharinath@novell.com>
6839
6840         Fix #59209.
6841         * expression.cs (Invocation.BetterFunction): Remove support for
6842         comparing virtual functions and their overrides.
6843         (Invocation.IsOverride): New.
6844         (Invocation.OverloadResolve): Don't consider 'override' functions
6845         during candidate selection.  Store them in a lookaside list.
6846         If the selected method is a 'virtual' function, use the list to
6847         find any overrides that are closer to the LHS type.
6848
6849 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
6850
6851         * expression.cs (New.DoResolve): Add complex core type reduction.
6852         (New.Constantify): Converts complex core type syntax like 'new int ()'
6853         to simple constant.
6854         
6855 2005-02-14  Raja R Harinath  <rharinath@novell.com>
6856
6857         * decl.cs (EntryType.EntryType): New constructor to create an
6858         updated copy of a cache entry.
6859         (MemberCache.AddMethods): Use it.
6860         (MemberCache.ClearDeclaredOnly): Remove.
6861         (MemberCache.MemberCache): Update.
6862
6863 2005-02-11  Miguel de Icaza  <miguel@novell.com>
6864
6865         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
6866         variable.  This one is represents the actual low-level declaration
6867         of the method, as opposed to the semantic level `IsStatic'.   
6868
6869         An anonymous method which is hosted into a static method might be
6870         actually an instance method.  IsStatic would reflect the
6871         container, while MethodIsStatic represents the actual code
6872         generated.
6873
6874         * expression.cs (ParameterReference): Use the new MethodIsStatic
6875         instead of IsStatic.
6876
6877         * anonymous.cs (AnonymousMethod.Compatible): Pass the
6878         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
6879         set on the current EmitContext. 
6880
6881         * expression.cs (Cast): Overload DoResolveLValue so we can pass
6882         resolve our casted expression as an LValue.  This triggers the
6883         proper LValue processing that is later required by Assign.
6884
6885         This fixes 72347.
6886
6887         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
6888
6889 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
6890
6891         C# 2.0 Fixed buffer implementation
6892
6893         * anonymous.cs: Update after RegisterHelperClass renaming.
6894
6895         * attribute.cs (AttributeTester.fixed_buffer_cache):
6896         Cache of external fixed buffers.
6897         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
6898         implementation if field is fixed buffer else null.
6899
6900         * class.cs
6901         (TypeContainer.AddField): Accept FieldMember instead of Field.
6902         (FieldBase.IsFieldClsCompliant): Extracted code from
6903         VerifyClsCompliance descendant customization.
6904         (FixedField): New class handles fixed buffer fields.
6905         (FixedFieldExternal): Keeps information about imported fixed
6906         buffer.
6907         (IFixedField): Make access to internal or external fixed buffer
6908         same.
6909
6910         * cs-parser.jay: Add fixed buffer parsing.
6911
6912         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
6913         buffer.
6914
6915         * expression.cs (Indirection): Extended implementation to accept
6916         fixed buffer field.
6917         (PointerArithmetic.Emit): Get element from fixed buffer as well.
6918         (ElementAccess.MakePointerAccess): Get type as parameter.
6919         (DoResolve): Add fixed buffer field expression conversion.
6920         (DoResolveLValue): Ditto.
6921         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
6922         (ArrayPtr): Derives from FixedBufferPtr.
6923         (ArrayPtr.Emit): Add extra emit for array elements.
6924
6925         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
6926
6927         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
6928         for compiler generated types.
6929         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
6930
6931         * statement.cs (Fixed): Refactored to be easier add fixed buffer
6932         and consume less memory.
6933         (Fixed.Resolve): Add fixed buffer case.
6934
6935         * typemanager.cs (compiler_generated_attr_ctor,
6936         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
6937         (HasElementType): Add our own implementation to work on every
6938         runtime.
6939
6940 2005-02-11  Miguel de Icaza  <miguel@novell.com>
6941
6942         * anonymous.cs (CaptureContext): Track whether `this' has been
6943         referenced.   
6944
6945         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
6946         only captured `this' if it was implicitly done (instance
6947         methods/variables were used). 
6948
6949         * codegen.cs (EmitContext.CaptureThis): New method to flag that
6950         `this' must be captured.
6951
6952 2005-01-30  Miguel de Icaza  <miguel@novell.com>
6953  
6954         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
6955         is null it means that there has been no need to capture anything,
6956         so we just create a sibling.
6957
6958         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
6959
6960         Just a partial fix.  The other half is fairly elusive.
6961         
6962 2005-02-10  Raja R Harinath  <rharinath@novell.com>
6963
6964         Fix #52586, cs0121-4.cs.
6965         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
6966         and return a hashtable.
6967         (MemberCache.ClearDeclaredOnly): New.
6968         (MemberCache.MemberCache): Update to change.  Make a deep copy of
6969         the method_hash of a base type too.
6970         (MemberCache.AddMethods): Adapt to having a deep copy of the base
6971         type methods.  Overwrite entries with the same MethodHandle so
6972         that the ReflectedType is correct.  The process leaves in base
6973         virtual functions and their overrides as distinct entries.
6974         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
6975         matters since it was boxed in a ArrayList before.
6976         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
6977         modifier.
6978         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
6979         case of a virtual function and its override (choose the overload
6980         as better).
6981         (Invocation.OverloadResolve): Avoid 'override' members during
6982         'applicable_type' calculation.
6983
6984 2005-03-28  Raja R Harinath  <rharinath@novell.com>
6985
6986         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
6987         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
6988         GetTypeHandle.  It is possible for a reflected type to derive from
6989         a TypeBuilder (e.g., int[] derives from the TypeBuilder
6990         System.Array during mscorlib compilation).
6991         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
6992         contain a method_hash, don't create one either.  Don't create a
6993         deep copy of the base cache's method_hash.
6994         (MemberCache.SetupCache): Rename back from DeepCopy.
6995         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
6996         already initialized.  If we see an override function, add its
6997         underlying base virtual function to the member_hash too.
6998
6999 2005-02-09  Raja R Harinath  <rharinath@novell.com>
7000
7001         Combine two near-redundant caches.
7002         * typemanager.cs (method_params): Rename from method_internal_params.
7003         (TypeManager.GetParameterData): New.  Replace
7004         Invocation.GetParameterData.
7005         (TypeManager.LookupParametersByBuilder): Remove.
7006         * expression.cs (Invocation.method_parameter_cache): Remove.
7007         (Invocation.GetParameterData): Remove.
7008         Update to changes.
7009         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
7010         Update to changes.
7011
7012 2005-02-08  Raja R Harinath  <rharinath@novell.com>
7013
7014         Fix #72015.
7015         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
7016         TypeManager.multicast_delegate_type is null, resolve it by looking
7017         up "System.MulticastDelegate".
7018         * rootcontext.cs (RootContext.ResolveCore): Simplify.
7019
7020 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
7021             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
7022             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
7023
7024         Fix cs0164.cs.
7025         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
7026         (LabeledStatement.AddReference): New.  Set 'referenced'.
7027         (Goto.Resolve): Use it.
7028
7029 2005-02-05  John Luke  <john.luke@gmail.com>
7030
7031         * driver.cs: remove duplicate -doc line in Usage ()
7032
7033 2005-02-04  Raja R Harinath  <rharinath@novell.com>
7034
7035         * location.cs (Location.AddFile): Fix CS2002 error report.
7036
7037 2005-02-02  Martin Baulig  <martin@ximian.com>
7038
7039         * delegate.cs (Delegate.DefineType): Report an internal error if
7040         TypeManager.multicast_delegate_type is null.  See bug #72015 for
7041         details.        
7042
7043 2005-02-02  Raja R Harinath  <rharinath@novell.com>
7044
7045         Fix a crasher in a variant of #31984.
7046         * const.cs (Constant.CheckBase): New override that defers the
7047         new-or-override check in case the base type hasn't been populated
7048         yet.
7049         (Constant.Define): Ensure the new-or-override check is performed.
7050
7051 2005-02-01  Duncan Mak  <duncan@ximian.com>
7052
7053         * const.cs (LookupConstantValue): Check that `ce' is not null
7054         before calling GetValue ().
7055
7056 2005-02-01  Raja R Harinath  <rharinath@novell.com>
7057
7058         Fix test-334.cs (#69519).
7059         * cs-parser.jay (using_alias_directive): Pass in an expression to
7060         NamespaceEntry.UsingAlias.
7061         (using_namespace_directive): Pass in an expression to
7062         NamespaceEntry.Using.
7063         (namespace_name): Don't flatten to a string.
7064         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
7065         (NamespaceEntry.AliasEntry.Resolve): Lookup using
7066         ResolveAsTypeStep.
7067         (NamespaceEntry.UsingEntry): Likewise.
7068         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
7069         changes.
7070         (NamespaceEntry.LookupForUsing): Remove.
7071         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
7072         names.
7073         (NamespaceEntry.Lookup): Remove support for dotted names.
7074
7075 2005-02-01  Raja R Harinath  <rharinath@novell.com>
7076
7077         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
7078         split into two.
7079         (NamespaceEntry.ImplicitParent): Compute on demand.
7080         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
7081         parallels the current.
7082         (NamespaceEntry.LookupForUsing): Use it.
7083         (NamespaceEntry.Lookup): If the current namespace-entry is
7084         implicit, don't search aliases and using tables.
7085
7086 2005-02-01  Raja R Harinath  <rharinath@novell.com>
7087
7088         Fix #31984.
7089         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
7090         BaseCache here.
7091         (TypeContainer.BaseCache): Compute on demand.
7092         (TypeContainer.FindMembers): Define constants and types if they're
7093         not already created.
7094         (FieldMember.Define): Move resetting of ec.InUnsafe before error
7095         check.
7096         * const.cs (Constant.Define): Make idempotent.
7097
7098 2005-01-29  Miguel de Icaza  <miguel@novell.com>
7099
7100         * pending.cs: Produce better code (no nops produced by using Ldarg
7101         + value).
7102         
7103         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
7104         i - 1' it should be arg + 1.
7105
7106         Fixes bug #71819.
7107
7108 2005-01-28  Raja R Harinath  <rharinath@novell.com>
7109
7110         * attribute.cs (Attribute.CheckAttributeType): Make private
7111         non-virtual.
7112         (Attribute.ResolveType): Make virtual.
7113         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
7114         handling of RootContext.Tree.Types.
7115
7116 2005-01-27  Raja R Harinath  <rharinath@novell.com>
7117
7118         Update attribute-handling to use the SimpleName/MemberAccess
7119         mechanisms.
7120         * cs-parser.jay (attribute): Pass in an expression to the
7121         constructors of Attribute and GlobalAttribute.
7122         * attribute.cs (Attribute): Take an expression for the name.
7123         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
7124         passed in attribute name expression.
7125         (Attribute.CheckAttributeType): Use it.
7126         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
7127         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
7128         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
7129         argument to prevent error messages if the lookup fails.
7130
7131 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
7132
7133         * expression.cs (Indirection): Implemented IVariable interface
7134         to support indirection in AddressOf operator.
7135         (PointerArithmetic.Emit): Add optimalization for case where
7136         result can be precomputed.
7137
7138 2005-01-26  Martin Baulig  <martin@ximian.com>
7139
7140         * class.cs (TypeContainer.AttributeTargets): Return the correct
7141         AttributeTargets depending on our `Kind' instead of throwing an
7142         exception; fixes #71632.
7143
7144 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
7145
7146         Fix #71257
7147         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
7148         constant members.
7149
7150 2005-03-17  Martin Baulig  <martin@ximian.com>
7151
7152         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
7153         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
7154
7155 2005-03-17  Martin Baulig  <martin@ximian.com>
7156
7157         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
7158         to bool so we can return an error condition.
7159         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
7160         returned an error.
7161
7162 2005-03-17  Martin Baulig  <martin@ximian.com>
7163
7164         * generic.cs (TypeMananager.IsIEnumerable): New public method.
7165
7166         * convert.cs (Convert.ImplicitReferenceConversion(Exists)): Allow
7167         converting from an array-type of T to `IEnumerable<T>'.
7168
7169 2005-03-16  Martin Baulig  <martin@ximian.com>
7170
7171         * generic.cs (Nullable.Unwrap): Implement IAssignMethod.
7172         (Nullable.LiftedUnaryMutator): New public class.
7173
7174         * expression.cs (UnaryMutator.DoResolve): Added support for
7175         Nullable Types.
7176
7177 2005-03-14  Martin Baulig  <martin@ximian.com>
7178
7179         * generic.cs (Nullable.NullCoalescingOperator): Implemented.
7180
7181 2005-03-14  Martin Baulig  <martin@ximian.com>
7182
7183         * generic.cs (Nullable.LiftedBinaryOperator): Added support for
7184         the comparision operators `<', `>', `<=' and `>='.
7185
7186 2005-03-13  Martin Baulig  <martin@ximian.com>
7187
7188         * generic.cs
7189         (Nullable.NullLiteral): Renamed to `Nullable.NullableLiteral' to
7190         avoid confusion with the `NullLiteral'.
7191         (Nullable.LiftedBinaryOperator): Correctly implement `==' and '!='.
7192
7193 2005-03-13  Martin Baulig  <martin@ximian.com>
7194
7195         * expression.cs (Binary.ResolveOperator): For `==' and `!=', allow
7196         comparing arbitrary types with the null literal.
7197
7198 2005-03-13  Martin Baulig  <martin@ximian.com>
7199
7200         * generic.cs (Nullable.LiftedBinaryOperator): Add support for the
7201         boolean operators '&&', '||', '&' and '|'.
7202         (Nullable.OperatorTrueOrFalse): New public class.
7203
7204         * ecore.cs (Expression.GetOperatorTrue/False): Return an `Expression'
7205         instead of a `StaticCallExpr'; added support for nullables.
7206
7207 2005-03-10  Martin Baulig  <martin@ximian.com>
7208
7209         * expression.cs
7210         (ArrayAccess.EmitDynamicInitializers): Use `etype.IsValueType'
7211         rather than `etype.IsSubclassOf (TypeManager.value_type)'.      
7212
7213 2005-03-07  Martin Baulig  <martin@ximian.com>
7214
7215         * generic.cs (Nullable.Unwrap): Implement IMemoryLocation and make
7216         it work if `expr' is not an IMemoryLocation.
7217         (Nullable.Lifted): Implement IMemoryLocation.
7218         (Nullable.LiftedConversion.ResolveUnderlying): Use the correct
7219         target type.
7220
7221 2005-03-05  Martin Baulig  <martin@ximian.com>
7222
7223         * generic.cs (Nullable.Unwrap, Wrap): New protected classes.
7224         (Nullable.Lifted): New abstract class; rewrote the lifted conversions.
7225         (Nullable): Added support for lifted unary and binary operators.
7226
7227         * expression.cs (Unary.DoResolve): Added support for nullable types.
7228         (Binary.DoResolve): Likewise.
7229         (Conditional.DoResolve): Likewise.
7230
7231 2005-03-02  Martin Baulig  <martin@ximian.com>
7232
7233         * decl.cs (DeclSpace.SetParameterInfo): Make this virtual.
7234
7235         * class.cs (ClassPart.SetParameterInfo): Override this.
7236         (PartialContainer.SetParameterInfo): Override this.
7237         (TypeContainer.CheckConstraints): New protected method.
7238         (PartialContainer.CheckConstraints): Override this and check
7239         whether the same contraints were specified in all parts of a
7240         partial generic type definition.
7241         (PartialContainer.UpdateConstraints): New public method.
7242
7243         * generic.cs (TypeParameter.UpdateConstraints): New public method.
7244
7245 2005-03-02  Martin Baulig  <martin@ximian.com>
7246
7247         Committing a patch from Carlos Alberto Cortez to fix #72887.
7248
7249         * convert.cs (Convert.ExplicitReferenceConversionExists): Allow
7250         casts from `T []' to `int []'.
7251
7252 2005-03-02  Martin Baulig  <martin@ximian.com>
7253
7254         * generic.cs (TypeManager.IsEqual): Make this symmetric.
7255
7256         * expression.cs (Binary.ResolveOperator): When resolving a
7257         BinaryDelegate, use `TypeManager.IsEqual (l, r)' rather than just
7258         `=='.  Fixes #71866.  See gen-127.cs.
7259
7260 2005-03-02  Martin Baulig  <martin@ximian.com>
7261
7262         * class.cs (TypeContainer.DoDefineMembers): We also need a default
7263         static constructor in static classes.
7264
7265 2005-03-02  Martin Baulig  <martin@ximian.com>
7266
7267         * generic.cs
7268         (NullableType.Name, NullableType.FullName): Add a "?" to the name.
7269         (Nullable.LiftedConversion): Added support for user-defined
7270         conversions.
7271
7272         * cs-tokenizer.cs (Tokenizer.PutbackCloseParens): New public method.
7273
7274         * cs-parser.jay: Use ComposedCast everywhere instead of
7275         NullableType, so we don't need to check for NullableType
7276         everywhere.
7277         (conditional_expression): Added `INTERR CLOSE_PARENS' rule for the
7278         case where we'll be resolved into a `parenthesized_expression_0'
7279         afterwards.
7280
7281         * convert.cs
7282         (Convert.UserDefinedConversion): Added nullable conversions.
7283
7284 2005-02-28  Martin Baulig  <martin@ximian.com>
7285
7286         * generic.cs (TypeManager.IsNullableType): New static method.
7287         (Nullable): New abstract class.
7288         (Nullable.NullLiteral): New public class.
7289         (Nullable.LiftedConversion): New public class.
7290
7291         * cs-parser.jay (non_expression_type): Changed `builtin_types' to
7292         `builtin_types opt_nullable'.
7293
7294         * convert.cs
7295         (Convert.ImplicitConversionStandard): Added nullable conversions.
7296         (Convert.ExplicitConversionStandard): Likewise.
7297         (Convert.ExplicitConversion): Likewise.
7298
7299 2005-02-26  Martin Baulig  <martin@ximian.com>
7300
7301         * expression.cs (ComposedCast.DoResolveAsTypeStep): Allow `dim' to
7302         begin with a "?", for instance "?[]".  Don't do a type lookup if
7303         `dim' is empty.
7304
7305 2005-02-25  Martin Baulig  <martin@ximian.com>
7306
7307         The first part of Nullable Types :-)
7308
7309         * generic.cs (NullableType): New public class.
7310         (NullCoalescingOperator): New public class.
7311         (TypeArguments.Resolve): Add a CS0306 check.
7312
7313         * cs-parser.jay (opt_error_modifier): Removed, this was unused.
7314         (opt_nullable): New rule.
7315         (type): Added `opt_nullable' to `namespace_or_type_name',
7316         `builtin_types' and `pointer_type'.
7317         (array_type): Added `opt_nullable'.
7318         (opt_rank_specifier_or_nullable): New rule; this is the
7319         combination of `opt_rank_specifier' and `opt_nullable'.
7320         (opt_error): New rule; catch errors here.
7321         (nullable_type_or_conditional): New rule; we use this to check for
7322         nullable and still detect the conditional operator.
7323         (local_variable_type): Use `opt_rank_specifier_or_nullable'
7324         instead `opt_rank_specifier'.
7325
7326         * expression.cs (ComposedCast.DoResolveAsTypeStep): Added support
7327         for nullables.
7328
7329 2005-02-24  Martin Baulig  <martin@ximian.com>
7330
7331         * README, README.Changes: Removed; they're old and obsolete.
7332
7333 2005-02-22  Martin Baulig  <martin@ximian.com>
7334
7335         * generic.cs (TypeParameter.Resolve): If resolving the constraints
7336         returned an error, set `constraints' to null to avoid a crash
7337         later on.
7338         (TypeParameter.ResolveType): Likewise.
7339
7340 2005-02-22  Martin Baulig  <martin@ximian.com>
7341
7342         * generic.cs
7343         (Constraints.ResolveTypes): Protect against being called twice.
7344         (Constraints.CheckInterfaceMethod): Don't call ResolveTypes().
7345         (TypeParameter.ResolveType): New public method; calls
7346         constraints.ResolveTypes().
7347         (TypeParameter.DefineType): Moved constraints.ResolveType() out
7348         into the new ResolveType().
7349         (GenericMethod.Define): Call ResolveType() on all our
7350         TypeParameter's.        
7351
7352 2005-02-21  Martin Baulig  <martin@ximian.com>
7353
7354         * generic.cs
7355         (TypeManager.generic_nullable_type): New static public field.
7356         (TypeManager.InitGenericCoreType): Lookup "System.Nullable`1".
7357
7358         * rootcontext.cs
7359         (RootContext.ResolveCore): Resolve "System.Nullable`1".
7360
7361 2005-02-15  Martin Baulig  <martin@ximian.com>
7362
7363         * generic.cs (ConstructedType.Constraints): Correctly check
7364         constraints if the argument type is a type parameter; fixes
7365         #72326. 
7366
7367 2005-02-02  Martin Baulig  <martin@ximian.com>
7368
7369         * delegate.cs (Delegate.DefineType): Report an internal error if
7370         TypeManager.multicast_delegate_type is null.  See bug #72015 for
7371         details.        
7372
7373 2005-01-29  Miguel de Icaza  <miguel@novell.com>
7374
7375         * pending.cs: Produce better code (no nops produced by using Ldarg
7376         + value).
7377         
7378         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
7379         i - 1' it should be arg + 1.
7380
7381         Fixes bug #71819.
7382         
7383 2005-01-26  Martin Baulig  <martin@ximian.com>
7384
7385         * cs-parser.jay (indexer_declarator): Don't report an error if we
7386         have type parameters since we can be an explicit interface
7387         implementation; fixes #71449.
7388
7389 2005-01-26  Martin Baulig  <martin@ximian.com>
7390
7391         * class.cs (TypeContainer.AttributeTargets): Return the correct
7392         AttributeTargets depending on our `Kind' instead of throwing an
7393         exception; fixes #71632.
7394
7395 2005-01-26  Martin Baulig  <martin@ximian.com>
7396
7397         * delegate.cs (Delegate.DefineType): Correctly define our type
7398         parameters.  Fixes #71483.
7399
7400 2005-01-25  Raja R Harinath  <rharinath@novell.com>
7401
7402         Fix #71602.
7403         * expression.cs (MemberAccess.DoResolve): Don't complain with
7404         cs0572 when the LHS of a member access has identical name and type
7405         name.
7406
7407 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
7408
7409         Fix #71651, #71675
7410         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
7411         CreatePermission.
7412         Create custom PermissionSet only for PermissionSetAttribute.
7413
7414 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
7415
7416         Fix #71649
7417         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
7418         delegates in static class.
7419
7420 2005-01-24  Martin Baulig  <martin@ximian.com>
7421
7422         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
7423         merging an implicit block, just use its reachability.
7424
7425         * statement.cs (Block.Resolve): Make the unreachable code check
7426         work wrt. implicit blocks; see test-337 from #63842.
7427
7428 2005-01-21  Alp Toker  <alp@atoker.com>
7429  
7430         * cs-parser.jay: destructor_declaration's container is PartialContainer
7431         not Class when partial types are used, so use Kind prop instead of
7432         'is'.
7433         
7434 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
7435
7436         * cs-parser.jay: Improve error reporting when an interface
7437         declares new types.
7438
7439 2005-01-20  Dick Porter  <dick@ximian.com>
7440
7441         * support.cs: SeekableStreamReader fix from Sandor Dobos
7442         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
7443         chars are read.  Fixes bug 70369.
7444
7445 2005-01-20  Raja R Harinath  <rharinath@novell.com>
7446
7447         * cs-parser.jay (catch_clause): Simplify current_block handling
7448         somewhat.
7449
7450 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
7451
7452         * convert.cs (ImplicitStandardConversionExists): Synchronize the
7453         code with ImplicitStandardConversion to handle the implicit
7454         conversion of method groups into valid delegate invocations. 
7455
7456         The problem is that in parameter handling we were using this code
7457         path.  Fixes bug #64698
7458
7459 2005-01-19  Raja R Harinath  <rharinath@novell.com>
7460
7461         * cs-parser.jay: Fix several infelicities.
7462         - Avoid assigning to the parser value stack.  Code like 
7463           '$3 = null' is unclean.  Synthesize a value for the code block
7464           instead. 
7465         - Avoid using oob_stack for storing location information.  Use ...
7466         (_mark_): ... this.  New (empty) rule.  Saves the current location
7467         in $$.
7468         (foreach_statement): Avoid using oob_stack for current_block
7469         handling.  Use technique used in for_statement and
7470         using_statement.  Synthesize a value for the code block to store
7471         additional intermediate information.
7472
7473 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
7474
7475         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
7476         of a different type is only allowed to private fields of a
7477         containing type, not on fields of a base class.
7478
7479         See test-174.cs and error cs0122-9.cs
7480
7481 2005-01-13  Raja R Harinath  <rharinath@novell.com>
7482
7483         Fix test-335.cs (bug #58126).
7484         * cs-parser.jay (argument): Split out non-expression parts of the
7485         rule into 'non_simple_argument'.
7486         (invocation_expression): Support parenthesized invocations with
7487         multiple arguments, and with single non-simple arguments.
7488
7489 2005-01-13  Raja R Harinath  <rharinath@novell.com>
7490
7491         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
7492         places.
7493
7494 2005-01-12  Raja R Harinath  <rharinath@novell.com>
7495
7496         Fix cs0038-1.cs, cs1640-6.cs.
7497         * ecore.cs (Expression.Resolve): Remove special-case for
7498         SimpleName in error-handling.
7499         (Expression.almostMatchedMembers): Relax access permission to
7500         protected.
7501         (Expression.MemberLookupFailed): Handle duplicates in
7502         almostMatchedMembers list.
7503         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
7504         * expression.cs (New.DoResolve): Report CS1540 for more cases.
7505         * typemanager.cs (GetFullNameSignature): Use the MethodBase
7506         overload if the passed in MemberInfo is a MethodBase.
7507
7508 2005-01-25  Martin Baulig  <martin@ximian.com>
7509
7510         * doc.cs
7511         (DocUtil.emptyParamList): Removed; use `Type.EmptyTypes' instead.
7512
7513 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
7514
7515         Fix #70749
7516         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
7517         for non-CAS & merge permission sets properly.
7518
7519 2005-01-11  Raja R Harinath  <rharinath@novell.com>
7520
7521         Improve standard-compliance of simple name and member access 
7522         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
7523         * ecore.cs (FullNamedExpression): New abstract base class 
7524         for Namespaces and TypeExpressions.
7525         (ResolveFlags.SimpleName): Remove.
7526         (SimpleName): Remove support for dotted names.
7527         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
7528         DeclSpace.FindType and DeclSpace.LookupType.
7529         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
7530         (Expression.ExprClassName): Make member function.
7531         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
7532         a namespace.  Remove creation of dotted "SimpleName"s.
7533         (MemberAccess.DoResolve): Likewise.
7534         * decl.cs (DeclSpace.Cache): Make private.
7535         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
7536         (DeclSpace.FindType): Update.
7537         (DeclSpace.LookupType): Move here from RootContext.  Return a 
7538         FullNamedExpression.
7539         * namespace.cs (Namespace): Derive from FullNamedExpression
7540         so that it can be part of expression resolution.
7541         (Namespace.Lookup): Return an FullNamedExpression.
7542         (NamespaceEntry.LookupAlias): Lookup aliases only in current
7543         namespace.
7544         * rootcontext.cs (NamespaceLookup): Remove.
7545         (LookupType): Move to DeclSpace.
7546         * attribute.cs (CheckAttributeType): Update.
7547         * doc.cs (FindDocumentedType): Remove allowAlias argument.
7548         (FindDocumentedTypeNonArray): Likewise.
7549
7550 2005-01-11  Raja R Harinath  <rharinath@novell.com>
7551
7552         Fix cs0509.cs, cs1632.cs.
7553         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
7554         is the same as IsInterface.
7555         (TypeContainer.GetClassBases): Likewise.
7556         * statement.cs (LabeledStatement.ig): New field.
7557         (LabeledStatement.LabelTarget): Save ILGenerator which created the
7558         label.
7559         (LabeledStatement.DoEmit): Check that the label was created with
7560         the same ILGenerator.
7561
7562 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
7563
7564         Fix #71058
7565         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
7566         accessors to its properties.
7567
7568         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
7569         from accessors to property.
7570         
7571 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
7572
7573         Fix #70722
7574         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
7575         only for overrides.
7576         
7577 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
7578
7579         * attribute.cs: Check for null and empty strings.  
7580
7581         I have lost another battle to Paolo.
7582
7583 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
7584
7585         Fix #70942
7586         * class.cs (PropertyMethod): Set Parent field in ctors.
7587         (SetMethod.InternalParameters): Add unsafe switch hack.
7588         Override MarkForDuplicationCheck where it is appropriate.
7589
7590         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
7591         It says whether container allows members with the same name.
7592         Base default is no.
7593         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
7594         Removed is_method parameter.
7595
7596 2005-01-06  Duncan Mak  <duncan@ximian.com>
7597
7598         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
7599         because the previous change led to incorrect reporting of CS1032
7600         ("Cannot define/undefine preprocessor symbols after first token in
7601         file"). Instead of using `tokens_seen' as the only flag that
7602         triggers CS1040, introduce `comments_seen'. This new flag is used
7603         to signify having seen comments on the current line, so it is
7604         unset after a newline.
7605
7606 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
7607
7608         * doc.cs : When searching for a type, find nested type too.
7609           This fixes bug #71040.
7610
7611 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
7612
7613         * doc.cs :
7614           - Warn missing member comment on those classes which also does not
7615             have doc comments. Fixed bug #71041.
7616           - Don't warn missing doc comment on default constructor.
7617             Fixed bug #71042.
7618
7619 2005-01-06  Duncan Mak  <duncan@ximian.com>
7620
7621         * cs-tokenizer.cs (xtoken): After handling traditional C-style
7622         comments, set `tokens_seen' to true. This allows us to detect
7623         misplaced preprocessor directives (i.e. not at the beginning of
7624         the a line, nor after whitespaces). In that case, report error
7625         CS1040. This fixes bug #56460.
7626
7627         * cs-parser.jay (interface_member_declaration): Add checks for
7628         IsExplicitImpl, and report CS0541 error if an interface member is
7629         defined as an explicit interface declaration.
7630
7631 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
7632
7633         Fix #70817
7634         * class.cs (PropertyMethod): Set Parent field in ctors.
7635         (SetMethod.InternalParameters): Add unsafe switch hack.
7636         
7637         * decl.cs (MemberCore.Parent): Cannot be readonly.
7638
7639 2005-01-06  Raja R Harinath  <rharinath@novell.com>
7640
7641         * decl.cs (DeclSpace.ResolveType): Remove.
7642         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
7643         Merge in code from ...
7644         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
7645         * class.cs, enum.cs: Update to changes.
7646
7647 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
7648
7649         * anonymous.cs: Ensure that we init the scope of our parent if it
7650         has not been initialized yet.
7651
7652 2004-12-30  Duncan Mak  <duncan@ximian.com>
7653
7654         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
7655         if field.FieldBuilder is null. Fixes #70758.
7656
7657         * convert.cs: Fixed some typos and updated some of the comments.
7658         (ImplicitStandardConversionExists):
7659         (TryImplicitIntConversion): If `target_type' is an interface and
7660         the type of `ic' implements this interface, return true or a new
7661         BoxedCast instead of null. This fixes #70468.
7662
7663 2004-12-29  Duncan Mak  <duncan@ximian.com>
7664
7665         * expression.cs (Argument.Emit): Check that Expr is
7666         IMemoryLocation before casting to it, and report CS1510 otherwise.
7667
7668         This fixes #70402.
7669
7670 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
7671
7672         * statement.cs (Block.ThisVariable): remove the recursion here, to
7673         make the --profile more sane.
7674
7675 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
7676
7677         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
7678         assembly, by JB Evain.
7679
7680 2004-12-17  Raja R Harinath  <rharinath@novell.com>
7681
7682         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
7683           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
7684         "parent" refers to enclosing type/class.  "base" refers to superclass.
7685
7686 2004-12-17  Raja R Harinath  <rharinath@novell.com>
7687
7688         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
7689         Ensure that we only have GlobalAttributes.
7690         * attribute.cs (Attribute.Emit): Make non-virtual.
7691         (GlobalAttribute.Emit): Remove.
7692         (Attribute.Resolve): Make virtual.
7693         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
7694         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
7695         the argument. Don't create one.
7696         (Attribute.GetObsoleteAttribute): Likewise.
7697         (Attribute.GetClsCompliantAttributeValue): Likewise.
7698         * class.cs, decl.cs: Update to changes.
7699
7700 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
7701
7702         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
7703         
7704         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
7705         
7706         * statement.cs (Foreach.Resolve): Add error 186 report.
7707
7708 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
7709
7710         * expression.cs (Conditional.DoResolve): Add warning 429.
7711         
7712         * statement.cs (If.Resolve): Add warning 665.
7713
7714 2004-12-16  Raja R Harinath  <rharinath@novell.com>
7715
7716         New invariant: RootContext.Tree.Types.NamespaceEntry == null
7717         except when in the parser, and in GlobalAttribute.
7718         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
7719         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
7720         RootContext.Tree.Types.NamespaceEntry once work is done.
7721         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
7722         and resets RootContext.Tree.Types.NamespaceEntry.
7723
7724 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
7725
7726         * cs-parser.jay: Don't create a block for every variable.
7727
7728 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
7729
7730         * location.cs: Provide extra information.
7731
7732         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
7733         variables from the captured environment, it is the ldarg_0.
7734
7735 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
7736
7737         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
7738         find a conclusion.
7739         
7740         * class.cs: Changed warning level for 169 to avoid developer
7741         displeasure from warning flooding. It will be changed back when they
7742         fix most of current BCL warnings.
7743         
7744         * RootContext.cs: Pushed default WarningLevel to 3.
7745         
7746         * statement.cs: Removed unused variable.
7747
7748 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
7749
7750         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
7751         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
7752         Add error 502 report.
7753         (StaticClass.DefineType): Add error 441 report.
7754         (Class.AllowedModifiersProp): New virtual property as temporary
7755         extension to AllowedModifiers.
7756         (Class.DefineType): Add error 418 report. Moved ModFlags check here
7757         to share implementation with StaticClass and don't call virtual
7758         methods from ctor.
7759         
7760         * driver.cs (MainDriver): Add error 1558 test.
7761
7762         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
7763         report. Moved error 36 test here.
7764
7765         * statement.cs (Throw.Resolve): Add error 724 report.
7766
7767         * typemanager.cs: Add out_attribute_type core type.
7768         
7769 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
7770
7771         * class.cs (TypeContainer.VerifyClsCompliance): Add error
7772         3018 report.
7773         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
7774
7775         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
7776         3017 report.
7777         
7778         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
7779
7780         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
7781         Add error 3023 report.
7782         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
7783
7784         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
7785         implementation.
7786
7787 2004-12-12  John Luke  <john.luke@gmail.com>
7788
7789         * driver.cs (AddArgs): take -- into account when
7790         adding arguments, fixes bug 65710 
7791
7792 2004-12-12  Martin Baulig  <martin@ximian.com>
7793
7794         * expression.cs (Unary.TryReduceNegative): Added support for
7795         SByteConstant and ByteConstant.
7796         (Unary.Reduce): Check error values from TryReduceNegative().
7797
7798 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
7799
7800         * attributes.cs (Attribute.Resolve): Avoid multiple error report
7801         and report exception as error 182.
7802
7803 2004-12-10  Raja R Harinath  <rharinath@novell.com>
7804
7805         * driver.cs (Main): Fix message when there are warnings.
7806
7807 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
7808
7809         * delegate.cs: Fixed my fix from yesterday, sorry about that.
7810
7811 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
7812
7813         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
7814         Reduced number of warnings.
7815         
7816         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
7817
7818 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
7819
7820         * driver.cs: Removed message.
7821
7822         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
7823
7824 2004-12-08    <vargaz@freemail.hu>
7825
7826         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
7827
7828 2004-12-08  Martin Baulig  <martin@ximian.com>
7829
7830         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
7831         instead of a CS3002 for properties and indexer.
7832
7833 2004-12-08  Martin Baulig  <martin@ximian.com>
7834
7835         * decl.cs (MemberName.ToString): Make this work again.
7836
7837 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
7838
7839         * attribute.cs (Resolve): Add error 591 detection.
7840
7841         * class.cs (FieldMember.Define): Add error 1547 detection.
7842         (Indexer.Define): Add error 620 detection.
7843         (Operator.Define): Add error 590 detection.
7844
7845         * ecore.cs: Missing argument for error 79.
7846
7847         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
7848         detection.
7849
7850 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
7851
7852         Fix #70106
7853         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
7854         only.
7855
7856 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
7857
7858         * cs-parser.jay : handle doc comments on implicit/explicit operators.
7859           Some operator comments were suppressed.
7860         * doc.cs : Implicit/explicit operator name in doc comments are like
7861           "op_Explicit(type)~returnType", so added suffix handling.
7862
7863 2005-01-21  Alp Toker  <alp@atoker.com>
7864
7865         * cs-parser.jay: destructor_declaration's container is PartialContainer
7866         not Class when partial types are used, so use Kind prop instead of 'is'.
7867
7868 2004-12-12  Martin Baulig  <martin@ximian.com>
7869
7870         * expression.cs (Unary.TryReduceNegative): Added support for
7871         SByteConstant and ByteConstant.
7872         (Unary.Reduce): Check error values from TryReduceNegative().
7873
7874 2004-12-11  Martin Baulig  <martin@ximian.com>
7875
7876         * support.cs (ReflectionParameters.ParameterName): If we have a
7877         `gpd', call `ParameterName' on it.
7878
7879         * parameter.cs (Parameter.GetParameterAttributes): New static method.
7880
7881         * pending.cs (PendingImplementation.DefineProxy): Call
7882         DefineParameter() for all of the MethodBuilder's arguments.
7883
7884 2004-12-09  Martin Baulig  <martin@ximian.com>
7885
7886         * doc.cs (DocUtil): Make this a static class.
7887
7888 2004-12-09  Martin Baulig  <martin@ximian.com>
7889
7890         * expression.cs (Invocation.InferType): Moved the type inference
7891         implementation into TypeManager.
7892
7893         * generics.cs (TypeManager): Moved the type inference
7894         implementation here.
7895
7896 2004-12-09  Martin Baulig  <martin@ximian.com>
7897
7898         * typemanager.cs (TypeManager): Make this a partial class.
7899
7900         * generics.cs
7901         (TypeManager): Move the generics part of `TypeManager' here.
7902
7903 2004-12-08  Martin Baulig  <martin@ximian.com>
7904
7905         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
7906         instead of a CS3002 for properties and indexer.  Added CS3024
7907         check for generic interfaces.
7908
7909         * attributes.cs (AttributeTester.AnalyzeTypeCompliance): Generic
7910         instances are not CLS-compliant.
7911
7912 2004-12-08  Martin Baulig  <martin@ximian.com>
7913
7914         * cs-parser.jay
7915         (void_pointer_expression): New rule for `void*', `void**' etc.
7916         (typeof_expression): Add `void_pointer_expression'; fixes #66846.       
7917
7918 2004-12-08  Martin Baulig  <martin@ximian.com>
7919
7920         * expression.cs (Invocation.InferType): Removed the hack for
7921         MethodCore.MayUnify().  
7922
7923         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Make
7924         this actually work.
7925
7926         * class.cs (MethodCore.MayUnify): Use
7927         TypeManager.MayBecomeEqualGenericTypes().       
7928
7929 2004-12-08  Martin Baulig  <martin@ximian.com>
7930
7931         * expression.cs (Is.DoResolve, As.DoResolve): If we're a type
7932         parameter, box it.  Fixes #69233.
7933
7934 2004-12-08  Martin Baulig  <martin@ximian.com>
7935
7936         * generic.cs (ConstructedType.CheckConstraints): Valuetypes always
7937         have the ctor constraint.  Fixes #68326.
7938
7939 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
7940
7941         * cs-parser.jay : interface comment was not consumed because of
7942           extra opt_semicolon before doc handling.
7943
7944 2004-12-03  Raja R Harinath  <rharinath@novell.com>
7945
7946         Fix test-327.cs, test-328.cs, and put in early infrastructure
7947         for eventually fixing #52697.
7948         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
7949         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
7950         from other methods.
7951         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
7952         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
7953         (VerifyUsing, error246): Update.
7954         * rootcontext.cs (RootContext.NamespaceLookup): Just use
7955         'NamespaceEntry.LookupNamespaceOrType'.
7956
7957 2004-12-07  Martin Baulig  <martin@ximian.com>
7958
7959         * driver.cs: Call it "BETA SOFTWARE" :-)
7960
7961 2004-12-06  Raja R Harinath  <rharinath@novell.com>
7962
7963         Fix crash on cs0657-17.cs.
7964         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
7965         Use RootContext.Tree.Types, not 'new RootTypes ()'.
7966         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
7967         the case where the NamespaceEntry gets overwritten.
7968
7969 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
7970
7971         Fixed #69195, #56821
7972         * ecore.cs (ResolveBoolean): Tiny refactoring.
7973
7974         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
7975         of right expression resolving when left is false constant and
7976         operator is LogicalAnd OR true constant and operator is LogicalOr.
7977
7978         * statement.cs (ResolveUnreachable): Always reports warning.
7979
7980 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
7981
7982         * class.cs: Distinguish between 1721 and 1722 (just a little help
7983         for the programmer).
7984
7985 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
7986
7987         * delegate.cs: Only allow this on new versions of the language. 
7988
7989 2004-12-02  Duncan Mak  <duncan@ximian.com>
7990
7991         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
7992         Expression class.
7993         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
7994         here as a static method. Take an additional bool out parameter
7995         `must_do_cs1540_check' for signaling to InstanceResolve.
7996         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
7997         member field from PropertyExpr class and made it an argument of
7998         the method instead.
7999         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
8000         check for MarshalByRefObject, and report CS0122 instead of CS1540.
8001         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
8002         and `remove_accessor' as well as InstanceResolve: report CS0122
8003         where applicable.
8004
8005         Fixes #70129.
8006
8007 2004-12-07  Martin Baulig  <martin@ximian.com>
8008
8009         * decl.cs (DeclSpace.AddToContainer): Report correct errors CS0694
8010         and CS0692 where appropriate.
8011
8012 2004-12-06  Martin Baulig  <martin@ximian.com>
8013
8014         * class.cs (MethodCore.MayUnify): Moved the CS0408 check here from
8015         IsDuplicateImplementation() and improved it.
8016
8017         * expression.cs (Invocation.InferTypeArguments): Added
8018         `Type[] inferred_class_types' argument (for MethodCore.MayUnify)
8019         and removed the "ref" modifier from `infered_types'.
8020
8021         * decl.cs (MemberName.ToString): Removed the exception.
8022
8023 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
8024
8025         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
8026           comments are allowed.
8027
8028 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
8029
8030         * delegate.cs: Add checks for subtypes in paramaters and return values
8031         in VerifyMethod () to add support for Covariance/Contravariance
8032         in delegates.
8033         
8034 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
8035
8036         * report.cs: Remove extra closing parenthesis.
8037
8038         * convert.cs (Error_CannotImplicitConversion): If the name of the
8039         types are the same, provide some extra information.
8040
8041 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
8042
8043         Fix bug #70102
8044         * attribute.cs (Resolve): Improved implementation of params
8045         attribute arguments.
8046
8047         * support.cs (ParameterData): Add HasParams to be faster.
8048
8049 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
8050
8051         all things are for /doc support:
8052
8053         * doc.cs: new file that supports XML documentation generation.
8054         * mcs.exe.sources: added doc.cs.
8055         * driver.cs:
8056           Handle /doc command line option.
8057           Report error 2006 instead of 5 for missing file name for /doc.
8058           Generate XML documentation when required, after type resolution.
8059         * cs-tokenizer.cs:
8060           Added support for picking up documentation (/// and /** ... */),
8061           including a new XmlCommentState enumeration.
8062         * cs-parser.jay:
8063           Added lines to fill Documentation element for field, constant,
8064           property, indexer, method, constructor, destructor, operator, event
8065           and class, struct, interface, delegate, enum.
8066           Added lines to warn incorrect comment.
8067         * rootcontext.cs :
8068           Added Documentation field (passed only when /doc was specified).
8069         * decl.cs:
8070           Added DocComment, DocCommentHeader, GenerateDocComment() and
8071           OnGenerateDocComment() and some supporting private members for
8072           /doc feature to MemberCore.
8073         * class.cs:
8074           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
8075         * delegate.cs:
8076           Added overriden DocCommentHeader.
8077         * enum.cs:
8078           Added overriden DocCommentHeader and GenerateDocComment().
8079
8080 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
8081
8082         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
8083         unwrapping the enumeration values, chain to
8084         DoConstantNumericPromotions again, so we can promote things to the
8085         fundamental types (takes care of enums that are bytes, sbytes).
8086
8087         Fixes bug #62054.
8088
8089 2004-12-01  Raja R Harinath  <rharinath@novell.com>
8090
8091         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
8092         Fix long-standing bug in type-lookup.  Use FindType instead of
8093         LookupType when ec.ResolvingTypeTree.
8094         (Attribute.ResolveType, Attribute.Resolve)
8095         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
8096         Update to changes.
8097         (Attributes.Search): Remove internal version.  Update.
8098         (Attributes.SearchMulti): Update.
8099         (Attributes.GetClsCompliantAttribute): Remove.
8100         (Attributes.GetIndexerNameAttribute): Remove.
8101         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
8102         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
8103         * class.cs (Indexer.Define): Likewise.
8104
8105 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
8106
8107         Fix bug #68790
8108         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
8109         MarshallByReference members access.
8110
8111         * expression.cs: Use CheckMarshallByRefAccess;
8112         Better error CS0197 message.
8113
8114         * report.cs: Print whole related error message.
8115
8116 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
8117
8118         * class (GetClassBases): Better error 60 report.
8119         (EventProperty): Disabled warning 67 detection.
8120
8121 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
8122
8123         Fix bug #60324
8124         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
8125
8126         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
8127         precise values.
8128
8129 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
8130
8131         Fix bug #49488
8132         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
8133
8134         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
8135
8136 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
8137
8138         * attribute.cs (Attribute.Resolve): Refine error reporting and
8139         report a cs0117 if the identifier does not exist, to distinguish
8140         from 0617 which is a miss-use of the actual identifier.
8141
8142         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
8143         between cs0070 and cs0079.
8144
8145         * class.cs (MemberBase.DoDefine): When reporting a wrong
8146         accessibility level, we use MethodCore to compare instead of
8147         Method (this was a regression in some refactoring effort).
8148
8149         So now we correctly report cs0056 again.
8150
8151         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
8152         testing the target_type (which was known to be object_type) and
8153         not the source type (which is anonymous_method).
8154
8155         Fixed reporting of error cs1660.
8156
8157         * expression.cs (UserCast.Source): Expose the underlying cast.
8158
8159         * statement.cs (Switch.SwitchGoverningType): Sort the list of
8160         allowed types to find a match to int32 first (most common).
8161
8162         In addition, it ignores any ImplicitUserConversions that did an
8163         internal implicit conversion (as the switch statement allows only
8164         one integral conversion to exist).
8165
8166         * class.cs (PartialContainer.Create): rename `name' to
8167         `member_name' for clarity.  Then replace the string calls with a
8168         call to MemberName.GetPartialName, as now using
8169         MemberName.ToString is an error (this is due to the side effects
8170         it had, that were fixed in the past).
8171
8172         This will restore the error reporting on a number of partial class
8173         errors that were missusing this (and getting an exception as a
8174         results, which is now just a plain textual warning, because
8175         yyparse debug output would crash otherwise).
8176
8177 2004-11-26  Raja R Harinath  <rharinath@novell.com>
8178
8179         * Makefile (PROGRAM_INSTALL_DIR): Remove.
8180
8181 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
8182
8183         * rootcontext.cs (LookupType): Make sure to cache lookups that
8184         don't give us a negative result. This saves about 5% of corlib
8185         compilation time.
8186
8187 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
8188
8189         * report.cs (AbstractMessage.Print): messages are sent to stderr
8190
8191         * class.cs (TypeContainer.GetClassBases): It is an error to have a
8192         non-interface in the list of interfaces (at this point, either
8193         parent was properly set, or a base class is being listed in the
8194         interfaces section).
8195
8196         This flags error 1722, and resolves the crash from bug 69259.
8197
8198 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
8199
8200         * statement.cs (Using.EmitExpressionFinally): make this work right
8201         for valuetypes. Fixes 69926.
8202
8203 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
8204
8205         * const.cs (Const.ChangeType): Cope with the "0 literal can be
8206         converted to an enum" here, before we try to change the underlying
8207         type.  This code exists, but it is a different code path than the
8208         one used while encoding constants.
8209
8210         (ImplicitReferenceConversionExists): In addition, resynchronized
8211         the code here, so it matches the same code in
8212         ImplicitReferenceConversionExists for the `from any class-type S
8213         to any interface-type T'.       
8214
8215 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
8216
8217         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
8218
8219 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
8220
8221         * cs-parser.jay: Use verbosity accordingly. 
8222
8223 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
8224
8225         * expression.cs (Unary.ResolveOperator): Do not report warning;
8226         AddressOf reads from variable.
8227         
8228         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
8229
8230 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
8231
8232         Fix bug #69462
8233
8234         * attribute.cs (Attributable): Removed CheckTargets.
8235         (Attributes.Emit): Explicit attribute targets are tested here.
8236
8237         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
8238         not enabled for interfaces.
8239
8240         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
8241         (GetAssemblyName): Ouch next bug there.
8242
8243 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
8244
8245         * expression.cs: Error 275 added.
8246         
8247 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
8248
8249         Fix bug #69177 (Implemented decimal constant support)
8250
8251         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
8252         (BinaryFold): Add DecimalConstant.
8253
8254         * const.cs (Define): Decimal constant 
8255         (is not constant.
8256         (ChangeType): Add decimal type handling.
8257         (LookupConstantValue): Don't set value for decimal type but
8258         emit DecimalConstantAttribute. Needed for constant optimization.
8259
8260         * constant.cs (ToDecimal): New method.
8261         (ConvertToDecimal): New method.
8262         (IntConstant): Implemented ConvertToDecimal.
8263         (DecimalConstant.Emit): Emit optimized version for decimals in
8264         int range.
8265
8266         * expression.cs (ResolveOperator): Changed order of constant
8267         reduction to work correctly with native types which have
8268         overloaded operators.
8269         (ResolveMemberAccess): Extract constant value from attribute
8270         for decimal type.
8271
8272         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
8273
8274         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
8275         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
8276         (ChangeType): Decimal is special.
8277         (TypeToCoreType): Add decimal type.
8278
8279 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
8280
8281         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
8282         decimal types.
8283
8284 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
8285
8286         * class.cs (EventField.ApplyAttributeBuilder): Fix error
8287         test cs1667-5.cs.
8288
8289 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
8290
8291         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
8292
8293         * pending.cs (PendingImplementation): Grab only interfaces.
8294
8295 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
8296
8297         * statement.cs (ForeachHelperMethods): Add location member and
8298         error 202 detection.
8299
8300 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
8301
8302         * expression.cs (DoResolveBase): Fixed wrong warning for out
8303         variables.
8304
8305 2004-12-04  Martin Baulig  <martin@ximian.com>
8306
8307         * convert.cs (Convert.TypeParameter_to_Null): Use the constraints
8308         to check whether the conversion is ok.
8309
8310         * typemanager.cs (TypeManager.GetTypeArguments): Just return
8311         `Type.EmptyTypes' if we're not a generic TypeContainer.
8312
8313 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
8314
8315         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
8316         old bug: when converting from the null literal to a pointer,
8317         return an EmptyCast, not the NullLiteral.
8318
8319         This fixes #69921, the recent null_type changes probably made this
8320         bug more prominent.
8321
8322 2004-12-03  Martin Baulig  <martin@ximian.com>
8323
8324         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
8325         method as our child, call AnonymousMethod.Compatible() on it.
8326
8327 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
8328
8329         * class.cs (FieldBase): Use an unused bit field from the field to
8330         encode the `has_offset' property from the FieldMember.  This saves
8331         a couple of Ks on bootstrap compilation.
8332
8333         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
8334         method as our child, return the AnonymousMethod resolved
8335         expression.
8336
8337         * expression.cs (New.DoResolve): Allow return values from
8338         NewDelegate to also include AnonymousMethods.
8339
8340         Fixes #70150.
8341
8342 2004-11-29  Raja R Harinath  <rharinath@novell.com>
8343
8344         * decl.cs (MemberCore.MemberName): Remove readonly to fix an error
8345         cs1648 report.
8346         * rootcontext.cs (ResolveCore::interfaces_first_stage): Add
8347         System.Runtime.InteropServices._Exception, since it's a base
8348         interface of the core type System.Exception in the net_2_0 profile.
8349
8350 2004-11-27  Martin Baulig  <martin@ximian.com>
8351
8352         * ecore.cs (Expression.StoreFromPtr): Use `stobj' for generic parameters.
8353
8354 2004-11-26  Raja R Harinath  <rharinath@novell.com>
8355
8356         * Makefile: Convert to use executable.make.
8357         * gmcs.exe.sources: New.
8358
8359 2004-11-25  Martin Baulig  <martin@ximian.com>
8360
8361         * expression.cs (Invocation.InferType): Added support for byref types.
8362
8363 2004-11-25  Martin Baulig  <martin@ximian.com>
8364
8365         * statement.cs (Foreach.FetchMethodMoveNext): Wrap `mi.ReturnType'
8366         in TypeManager.TypeToCoreType().
8367
8368 2004-11-25  Martin Baulig  <martin@ximian.com>
8369
8370         * iterators.cs (Iterator.DoDefineMembers): Override and lookup the
8371         "Dispose" method from the `current_type'.
8372         (Iterator.EmitMoveNext): Use the `dispose_method' we looked up in
8373         DoDefineMembers() instead of using the MethodBuilder; this is
8374         required for generic iterators.
8375
8376         * class.cs (TypeContainer.DoDefineMembers): Make this virtual.
8377
8378 2004-11-24  Martin Baulig  <martin@ximian.com>
8379
8380         * ecore.cs (Expression.LoadFromPtr): Use `ldobj' for generic parameters.
8381
8382 2004-11-20  Martin Baulig  <martin@ximian.com>
8383
8384         * expression.cs (Invocation.InferType): Correctly infer generic
8385         instances; see gen-103.cs.
8386         (Invocation.InferTypeArguments): If a generic method doesn't have
8387         any unbound type parameters, we don't need to infer anything.
8388
8389 2004-11-19  Raja R Harinath  <rharinath@novell.com>
8390
8391         * Makefile (gmcs.exe): Update to new location of bootstrap mcs.exe.
8392
8393 2004-11-17  Raja R Harinath  <rharinath@novell.com>
8394
8395         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
8396         (TypeHandle.GetMemberCache): New.
8397         (TypeHandle.TypeHandle): Update.
8398         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
8399         (TypeManager.LookupParentInterfacesCache):
8400         Rename from LookupInterfaceCache.  Optimize slightly.
8401         (TypeManager.MemberLookup_FindMembers): Update.
8402         * decl.cs (MemberCache.MemberCache): Set Container to null in the
8403         multi-type variant.
8404         (AddCacheContents): Rename from AddHashtable.
8405         * class.cs (TypeContainer.parent_container): Remove.
8406         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
8407         (TypeContainer.DoDefineMembers): Don't initialize it.
8408         Update to name changes.
8409         
8410 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
8411
8412         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
8413         that factors the code to check access modifiers on override.  
8414
8415         (PropertyBase): Use the code here.
8416
8417         Patch from Lluis S'anchez, fixes bug #69361.
8418
8419 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
8420
8421         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
8422         routine that is used to report the use of a captured variable
8423         whose address has been taken.
8424
8425         There are two checks: one when variables are being captured and
8426         the other check is when the address of a variable is taken. 
8427         
8428         (because an anonymous methods might be resolved before *or* after
8429         the address has been taken) and 
8430
8431         * expression.cs (Conditional.DoResolve): Remove the special
8432         casing that Martin added to trueExpr and falseExpr being both
8433         NullLiteral.  We get the right behavior now just by introducing
8434         the null_type into the compiler. 
8435
8436         * convert.cs (ExplicitConversion): Change the code to use
8437         null_type instead of testing `expr is NullLiteral'.
8438         (ImplicitConversionStandard): use null_type too.
8439         (ImplicitReferenceConversionExists): use null_type too.
8440         (ImplicitReferenceConversion): use null_type too.
8441
8442         * literal.cs: The type of `NullLiteral' is now null_type instead
8443         of object_type. 
8444         (Resolve): Set the type here.
8445
8446         * typemanager.cs: Introduce null_type.
8447
8448 2004-11-18  Martin Baulig  <martin@ximian.com>
8449
8450         * rootcontext.cs
8451         (RootContext.LookupType): Return a `Type', not a `TypeExpr'.
8452
8453 2004-11-18  Martin Baulig  <martin@ximian.com>
8454
8455         * ecore.cs (TypeExpr.DoResolveAsTypeStep): Make this protected.
8456
8457 2004-11-18  Martin Baulig  <martin@ximian.com>
8458
8459         * generic.cs (Constraints.Resolve): Take an `EmitContext' instead
8460         of a `DeclSpace'.  If one of our constraints is a `ConstructedType',
8461         call ResolveConstructedType() on it to resolve it without checking
8462         constraints.
8463         (Constraints.ResolveTypes): Check them here.
8464         (ConstructedType.DoResolveAsTypeStep): Fully resolve ourselves,
8465         but don't check constraints.
8466         (ConstructedType.ResolveAsTypeTerminal): Override this and also
8467         check constraints here.
8468         (ConstructedType.ResolveConstructedType): New public method.  This
8469         is called from DoResolveAsTypeStep() and Constraints.Resolve() to
8470         resolve ourselves without checking constraints.
8471
8472         * ecore.cs (Expression.ResolveAsTypeTerminal): Make this virtual.
8473
8474 2004-11-18  Martin Baulig  <martin@ximian.com>
8475
8476         * decl.cs
8477         (DeclSpace.CurrentType): Changed type from `TypeExpr' to `Type'.
8478
8479         * delegate.cs (Delegate.DefineType): Always create the EmitContext.
8480
8481 2004-11-18  Martin Baulig  <martin@ximian.com>
8482
8483         * ecore.cs (TypeExpr.ResolveType): Removed.
8484         (Expression.ResolveAsTypeTerminal): We always return a fully
8485         resolved `TypeExpr', so we can just access its `Type'.
8486
8487         * class.cs (TypeContainer.DefineType): Resolve `CurrentType' here.
8488
8489 2004-11-17  Martin Baulig  <martin@ximian.com>
8490
8491         * ecore.cs (IAlias.Type): Replaced with ResolveAsType() to make
8492         sure we don't return any unresolved TypeExpr's.
8493         (TypeAliasExpression): The .ctor now takes an `IAlias' instead of
8494         a `TypeExpr'.
8495         (Expression.ResolveAsTypeTerminal): Make sure `te.Type != null'.
8496
8497         * expression.cs (MemberAccess.ResolveAsTypeStep): Don't return any
8498         unresolved `ConstructedType's.
8499
8500 2004-11-17  Martin Baulig  <martin@ximian.com>
8501
8502         * ecore.cs (TypeExpr.ResolveType): Don't make this virtual.
8503
8504 2004-11-17  Martin Baulig  <martin@ximian.com>
8505
8506         * ecore.cs
8507         (Expression.ResolveAsTypeTerminal): Removed the `bool silent' argument.
8508
8509         * decl.cs (DeclSpace.ResolveType): Removed.
8510         (DeclSpace.ResolveTypeExpr): Removed the `bool silent' argument.
8511
8512 2004-11-17  Martin Baulig  <martin@ximian.com>
8513
8514         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
8515         direction, like FindMembers() does.  Fixes #69546, testcase is in
8516         test-315.cs.    
8517
8518 2004-11-16  Martin Baulig  <martin@ximian.com>
8519
8520         This is based on a patch from Marek Safar, see bug #69082.
8521         Fixes bugs #63705 and #67130.
8522
8523         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
8524         method; create a MemberCache for an interface type and cache the
8525         result.
8526
8527         * decl.cs (IMemberContainer.ParentContainer): Removed.
8528         (IMemberContainer.ParentCache): New property.
8529         (MemberCache.SetupCacheForInterface): Removed.
8530         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
8531         to create a cache for an interface's "parent".
8532
8533         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
8534         interfaces too.
8535
8536 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
8537
8538         * statement.cs: Avoid adding bools to a hashtable.
8539
8540 2004-11-15  Martin Baulig  <martin@ximian.com>
8541
8542         * decl.cs (MemberName.GetPartialName): Removed, use GetTypeName() instead.
8543
8544 2004-11-11  Martin Baulig  <martin@ximian.com>
8545
8546         * typemanager.cs (TypeManager.GetMethodName): New method.
8547
8548         * class.cs (MethodData.Define): Include the generic arity in the
8549         name of an explicit interface; also add it to the method name.
8550
8551         * pending.cs (PendingImplementation.InterfaceMethod): The method
8552         name now includes the generic arity.
8553
8554 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
8555
8556         * expression.cs (Invocation.OverloadResolve): Flag error if we are
8557         calling an unsafe method from a safe location.
8558
8559 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
8560
8561         Fix #69167
8562         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
8563
8564 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
8565
8566         * namespace.cs (VerifyUsing): use GetPartialName instead of
8567         ToString. 
8568
8569 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
8570
8571         * statement.cs (Return.Resolve): Fix regression in typo: if
8572         `in_exc', we have to request a NeedReturnLabel, this was a typo
8573         introduced in the anonymous method check-in.  Fixes #69131.
8574
8575         * Indexers were using the ShortName when defining themselves,
8576         causing a regression in the compiler bootstrap when applying the
8577         patch from 2004-11-02 (first part), now they use their full name
8578         and the bug is gone.
8579
8580 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
8581
8582         * driver.cs: Strip the path from the names of embedded resources. Fixes
8583         #68519.
8584
8585 2004-11-04  Raja R Harinath  <rharinath@novell.com>
8586
8587         Fix error message regression: cs0104-2.cs.
8588         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
8589         (AliasEntry.Resolve): Update.
8590         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
8591         'silent' flag.
8592         (RootContext.LookupType): Update.
8593
8594 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
8595
8596         * cs-parser.jay: Add support for handling accessor modifiers
8597         * class: Add support port accessor modifiers and error checking,
8598         define PropertyMethod.Define as virtual (not abstract anymore)
8599         * ecore.cs: Add checking for proeprties access with access modifiers
8600         * iterators.cs: Modify Accessor constructor call based in the modified
8601         constructor
8602 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
8603
8604         * expression.cs (StringConcat): Handle being called twice,
8605         as when we have a concat in a field init with more than two
8606         ctors in the class
8607
8608 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
8609
8610         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
8611         special case explicit implementations, we should always produce
8612         the .property or .event declaration.
8613         
8614         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
8615         since it will not return correct data if people use this
8616         unresolved in the presence of using statements (see test-313).
8617
8618         * class.cs (MethodData.Define): If we are an explicit interface
8619         implementation, set the method name to the full name of the
8620         interface plus the name of the method.  
8621
8622         Notice that using the method.MethodName.GetFullName() does not
8623         work, as it will only contain the name as declared on the source
8624         file (it can be a shorthand in the presence of using statements)
8625         and not the fully qualifed type name, for example:
8626
8627         using System;
8628
8629         class D : ICloneable {
8630                 object ICloneable.Clone ()  {
8631                 }
8632         }
8633
8634         Would produce a method called `ICloneable.Clone' instead of
8635         `System.ICloneable.Clone'.
8636
8637         * namespace.cs (Alias.Resolve): Use GetPartialName.
8638         
8639 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
8640
8641         * cs-parser.jay: Add error 1055 report.
8642
8643 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
8644
8645         * assign.cs (Assign.DoResolve): Only do the transform of
8646         assignment into a New if the types are compatible, if not, fall
8647         through and let the implicit code deal with the errors and with
8648         the necessary conversions. 
8649
8650 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
8651
8652         * cs-parser.jay: Add error 1031 report.
8653
8654         * cs-tokenizer.cs: Add location for error 1038.
8655
8656 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8657
8658         * cs-parser.jay: Add error 1016 report.
8659
8660 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8661
8662         * cs-parser.jay: Add errors 1575,1611 report.
8663
8664 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8665
8666         * cs-parser.jay: Add error 1001 report.
8667
8668 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8669
8670         Fix #68850
8671         * attribute.cs (GetMarshal): Add method argument for
8672         caller identification.
8673
8674         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
8675         agument for GetMarshal and RuntimeMissingSupport.
8676
8677 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8678
8679         * attribute.cs (ExtractSecurityPermissionSet): Removed
8680         TypeManager.code_access_permission_type.
8681
8682         * typemanager.cs: Removed TypeManager.code_access_permission_type.
8683
8684 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
8685
8686         * expression.cs (LocalVariableReference.DoResolveLValue): Check
8687         for obsolete use of a variable here.   Fixes regression on errors
8688         cs0619-25 and cs0619-26.
8689
8690 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
8691
8692         Fix #62358, implemented security attribute encoding.
8693
8694         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
8695         Tests permitted SecurityAction for assembly or other types.
8696         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
8697         data from SecurityPermissionAttribute to PermisionSet class.
8698
8699         * class.cs (ApplyAttributeBuilder): Added special handling
8700         for System.Security.Permissions.SecurityAttribute based types.
8701
8702         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
8703         special handling for System.Security.Permissions.SecurityAttribute
8704         based types.
8705
8706         * enum.cs (ApplyAttributeBuilder): Added special handling
8707         for System.Security.Permissions.SecurityAttribute based types.
8708
8709         * parameter.cs (ApplyAttributeBuilder): Added special handling
8710         for System.Security.Permissions.SecurityAttribute based types.
8711
8712         * rootcontext.cs: Next 2 core types.
8713
8714         * typemanager.cs (TypeManager.security_permission_attr_type):
8715         Built in type for the SecurityPermission Attribute.
8716         (code_access_permission_type): Build in type.
8717
8718 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
8719
8720         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
8721         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
8722         all of this information into
8723         EmitContext.EmitCapturedVariableInstance.
8724         
8725         * codegen.cs (EmitCapturedVariableInstance): move here the
8726         funcionality of emitting an ldarg.0 in the presence of a
8727         remapping.   This centralizes the instance emit code.
8728
8729         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
8730         then emit a load of this: it means that we have reached the
8731         topmost ScopeInfo: the one that contains the pointer to the
8732         instance of the class hosting the anonymous method.
8733
8734         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
8735         captures to the topmost CaptureContext.
8736
8737 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
8738
8739         * expression.cs (LocalVariableReference): Move the knowledge about
8740         the iterators into codegen's EmitCapturedVariableInstance.
8741
8742 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
8743
8744         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
8745         all code paths return a value from an anonymous method (it is the
8746         same as the 161 error, but for anonymous methods).
8747
8748 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
8749
8750         The introduction of anonymous methods in the compiler changed
8751         various ways of doing things in the compiler.  The most
8752         significant one is the hard split between the resolution phase
8753         and the emission phases of the compiler.
8754
8755         For instance, routines that referenced local variables no
8756         longer can safely create temporary variables during the
8757         resolution phase: they must do so from the emission phase,
8758         since the variable might have been "captured", hence access to
8759         it can not be done with the local-variable operations from the runtime.
8760         
8761         * statement.cs 
8762
8763         (Block.Flags): New flag `IsTopLevel' to indicate that this block
8764         is a toplevel block.
8765
8766         (ToplevelBlock): A new kind of Block, these are the blocks that
8767         are created by the parser for all toplevel method bodies.  These
8768         include methods, accessors and anonymous methods.
8769
8770         These contain some extra information not found in regular blocks:
8771         A pointer to an optional CaptureContext (for tracking captured
8772         local variables and parameters).  A pointer to the parent
8773         ToplevelBlock.
8774         
8775         (Return.Resolve): Catch missmatches when returning a value from an
8776         anonymous method (error 1662).
8777         Invoke NeedReturnLabel from the Resolve phase instead of the emit
8778         phase.
8779
8780         (Break.Resolve): ditto.
8781
8782         (SwitchLabel): instead of defining the labels during the
8783         resolution phase, we now turned the public ILLabel and ILLabelCode
8784         labels into methods called GetILLabelCode() and GetILLabel() that
8785         only define the label during the Emit phase.
8786
8787         (GotoCase): Track the SwitchLabel instead of the computed label
8788         (its contained therein).  Emit the code by using
8789         SwitchLabel.GetILLabelCode ().
8790
8791         (LocalInfo.Flags.Captured): A new flag has been introduce to track
8792         whether the Local has been captured or not.
8793
8794         (LocalInfo.IsCaptured): New property, used to tell whether the
8795         local has been captured.
8796         
8797         * anonymous.cs: Vastly updated to contain the anonymous method
8798         support.
8799
8800         The main classes here are: CaptureContext which tracks any
8801         captured information for a toplevel block and ScopeInfo used to
8802         track the activation frames for various local variables.   
8803
8804         Each toplevel block has an optional capture context associated
8805         with it.  When a method contains an anonymous method both the
8806         toplevel method and the anonymous method will create a capture
8807         context.   When variables or parameters are captured, they are
8808         recorded on the CaptureContext that owns them, for example:
8809
8810         void Demo () {
8811              int a;
8812              MyDelegate d = delegate {
8813                  a = 1;
8814              }
8815         }
8816
8817         Here `a' will be recorded as captured on the toplevel
8818         CapturedContext, the inner captured context will not have anything
8819         (it will only have data if local variables or parameters from it
8820         are captured in a nested anonymous method.
8821
8822         The ScopeInfo is used to track the activation frames for local
8823         variables, for example:
8824
8825         for (int i = 0; i < 10; i++)
8826                 for (int j = 0; j < 10; j++){
8827                    MyDelegate d = delegate {
8828                         call (i, j);
8829                    }
8830                 }
8831
8832         At runtime this captures a single captured variable `i', but it
8833         captures 10 different versions of the variable `j'.  The variable
8834         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
8835         recorded on a child.  
8836
8837         The toplevel ScopeInfo will also track information like the `this'
8838         pointer if instance variables were referenced (this is necessary
8839         as the anonymous method lives inside a nested class in the host
8840         type of the method). 
8841
8842         (AnonymousMethod): Expanded to track the Toplevel, implement
8843         `AnonymousMethod.Compatible' to tell whether an anonymous method
8844         can be converted to a target delegate type. 
8845
8846         The routine now also produces the anonymous method content
8847
8848         (AnonymousDelegate): A helper class that derives from
8849         DelegateCreation, this is used to generate the code necessary to
8850         produce the delegate for the anonymous method that was created. 
8851
8852         * assign.cs: API adjustments for new changes in
8853         Convert.ImplicitStandardConversionExists.
8854
8855         * class.cs: Adjustments to cope with the fact that now toplevel
8856         blocks are of type `ToplevelBlock'. 
8857
8858         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
8859         insteda of standard blocks.
8860
8861         Flag errors if params arguments are passed to anonymous methods.
8862
8863         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
8864         `CurrentAnonymousMethod' which points to the current Anonymous
8865         Method.  The variable points to the AnonymousMethod class that
8866         holds the code being compiled.  It is set in the new EmitContext
8867         created for the anonymous method.
8868
8869         (EmitContext.Phase): Introduce a variable and an enumeration to
8870         assist in enforcing some rules about when and where we are allowed
8871         to invoke certain methods (EmitContext.NeedsReturnLabel is the
8872         only one that enfonces this right now).
8873
8874         (EmitContext.HaveCaptureInfo): new helper method that returns
8875         whether we have a CapturedContext initialized.
8876
8877         (EmitContext.CaptureVariable): New method used to register that a
8878         LocalInfo must be flagged for capturing. 
8879
8880         (EmitContext.CapturedParameter): New method used to register that a
8881         parameters must be flagged for capturing. 
8882         
8883         (EmitContext.CapturedField): New method used to register that a
8884         field must be flagged for capturing. 
8885
8886         (EmitContext.HaveCapturedVariables,
8887         EmitContext.HaveCapturedFields): Return whether there are captured
8888         variables or fields. 
8889
8890         (EmitContext.EmitMethodHostInstance): This is used to emit the
8891         instance for the anonymous method.  The instance might be null
8892         (static methods), this (for anonymous methods that capture nothing
8893         and happen to live side-by-side with the current method body) or a
8894         more complicated expression if the method has a CaptureContext.
8895
8896         (EmitContext.EmitTopBlock): Routine that drives the emission of
8897         code: it will first resolve the top block, then emit any metadata
8898         and then emit the code.  The split is done so that we can extract
8899         any anonymous methods and flag any captured variables/parameters.
8900         
8901         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
8902         during this phase, the ILGenerator should not be used as labels
8903         and local variables declared here might not be accessible to any
8904         code that is part of an anonymous method.  
8905
8906         Exceptions to this include the temporary variables that are
8907         created by some statements internally for holding temporary
8908         variables. 
8909         
8910         (EmitContext.EmitMeta): New routine, in charge of emitting all the
8911         metadata for a cb
8912
8913         (EmitContext.TemporaryReturn): This method is typically called
8914         from the Emit phase, and its the only place where we allow the
8915         ReturnLabel to be defined other than the EmitMeta.  The reason is
8916         that otherwise we would have to duplicate a lot of logic in the
8917         Resolve phases of various methods that today is on the Emit
8918         phase. 
8919
8920         (EmitContext.NeedReturnLabel): This no longer creates the label,
8921         as the ILGenerator is not valid during the resolve phase.
8922
8923         (EmitContext.EmitThis): Extended the knowledge in this class to
8924         work in anonymous methods in addition to iterators. 
8925
8926         (EmitContext.EmitCapturedVariableInstance): This emits whatever
8927         code is necessary on the stack to access the instance to a local
8928         variable (the variable will be accessed as a field).
8929
8930         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
8931         EmitContext.EmitAddressOfParameter): Routines to support
8932         parameters (not completed at this point). 
8933         
8934         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
8935         will also remove the parameters.
8936
8937         * convert.cs (Convert): Define a `ConstantEC' which points to a
8938         null.  This is just to prefity some code that uses
8939         ImplicitStandardConversion code and do not have an EmitContext
8940         handy.
8941
8942         The idea is to flag explicitly that at that point in time, it is
8943         known that the conversion will not trigger the delegate checking
8944         code in implicit conversions (which requires a valid
8945         EmitContext). 
8946
8947         Everywhere: pass new EmitContext parameter since
8948         ImplicitStandardConversionExists now requires it to check for
8949         anonymous method conversions. 
8950
8951         (Convert.ImplicitStandardConversionExists): If the type of an
8952         expression is the anonymous_method_type, and the type is a
8953         delegate, we invoke the AnonymousMethod.Compatible method to check
8954         whether an implicit conversion is possible. 
8955
8956         (Convert.ImplicitConversionStandard): Only do implicit method
8957         group conversions if the language level is not ISO_1.
8958
8959         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
8960         MethodInfo for the Invoke method.  used by Delegate and
8961         AnonymousDelegate.
8962
8963         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
8964         method conversions if the target type is a delegate.
8965
8966         Removed extra debugging nops.
8967
8968         (LocalVariableReference): Turn the `local_info' into a public
8969         field. 
8970
8971         Add `prepared' field, the same hack used for FieldExprs to cope
8972         with composed assignments, as Local variables do not necessarily
8973         operate purely on the stack as they used to: they can be captured
8974         fields. 
8975
8976         Add `temp' for a temporary result, like fields.
8977
8978         Refactor DoResolve and DoResolveLValue into DoResolveBase.
8979
8980         It now copes with Local variables that are captured and emits the
8981         proper instance variable to load it from a field in the captured
8982         case. 
8983
8984         (ParameterReference.DoResolveBase): During the resolve phase,
8985         capture parameters if we are in an anonymous method.
8986
8987         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
8988         anonymous method, use the EmitContext helper routines to emit the
8989         parameter reference.
8990
8991         * iterators.cs: Set RemapToProxy to true/false during the
8992         EmitDispose class.
8993
8994         * parameters.cs (GetParameterByName): New helper method. 
8995
8996         * typemanager.cs (anonymous_method_type) a new type that
8997         represents an anonyous method.  This is always an internal type,
8998         used as a fencepost to test against the anonymous-methodness of an
8999         expression. 
9000         
9001 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
9002
9003         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
9004         561 report.
9005         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
9006
9007 2004-11-10  Martin Baulig  <martin@ximian.com>
9008
9009         * expression.cs (Invocation.BetterFunction): If two methods have
9010         equal parameter types, but only one of them is generic, the
9011         non-generic one wins.
9012         (New.DoResolve): Don't set `is_struct' to false if we're a generic
9013         instance; just use `Type.IsValueType' to determine whether
9014         something is a struct or not.
9015         (MemberAccess.DoResolveAsTypeStep): Don't modify the `args' field,
9016         so we can be called multiple times.
9017
9018 2004-11-10  Martin Baulig  <martin@ximian.com>
9019
9020         * generic.cs (TypeParameter.DefineConstraints): New public method.
9021         (TypeParameter.CheckAccessLevel): Override this and return true.
9022         (ConstructedType.ResolveType): Renamed to DoResolveType(), don't
9023         override ResolveType() anymore.
9024         (ConstructedType.DoResolveAsTypeStep): Call DoResolveType() here.
9025
9026 2004-11-10  Martin Baulig  <martin@ximian.com>
9027
9028         * rootcontext.cs (RootContext.LookupType): If we're a nested type,
9029         call DeclSpace.ResolveNestedType() on it.
9030
9031 2004-11-10  Martin Baulig  <martin@ximian.com>
9032
9033         * support.cs (ReflectionParameters.ParameterModifier): If `gpd' is
9034         non-null, call ParameterModifier() on it.
9035
9036 2004-11-10  Martin Baulig  <martin@ximian.com>
9037
9038         * iterators.cs
9039         (Iterators): Added `current_type' and `this_type' fields.
9040         (Iterators.DefineIterator): Create a new EmitContext and store it
9041         in `ec'; compute `this_type'.
9042
9043 2004-11-10  Martin Baulig  <martin@ximian.com>
9044
9045         * typemanager.cs
9046         (TypeManager.IsPrivateAccessible): New public method.
9047         (Closure.Filter): Use IsPrivateAccessible() instead of IsEqual().
9048
9049 2004-11-10  Martin Baulig  <martin@ximian.com>
9050
9051         * class.cs (TypeContainer.DefineType): Call
9052         TypeBuilder.DefineGenericParameters() before resolving the type
9053         parameters.
9054         (MethodData.parent_method): New protected field.
9055         (MethodData..ctor): Added `MethodInfo parent_method' argument.
9056         (MethodData.Define): Compute `parent_method'.
9057
9058         * decl.cs
9059         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
9060         (MemberCore.GetClsCompliantAttributeValue): Likewise.
9061         (DeclSpace.ec): New protected field; store the EmitContext here.
9062         (DeclSpace.EmitContext): New public property.
9063         (DeclSpace.ResolveType): Un-comment from the [Obsolte] attribute.
9064         (DeclSpace.ResolveNestedType): New public method.
9065         (DeclSpace.ResolveTypeExpr): Just call ResolveAsTypeTerminal() here.
9066         (DeclSpace.NestedAccessible): Added `Type tb' argument.
9067         (DeclSpace.FamilyAccessible): Likewise.
9068         (DeclSpace.FindType): Call ResolveNestedType() for nested types.
9069         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
9070         EmitContext.
9071
9072         * delegate.cs (Delegate.Define): Store the EmitContext in the `ec'
9073         field.
9074
9075         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
9076         (Enum.Emit): Don't create a new EmitContext.
9077
9078 2004-10-18  Martin Baulig  <martin@ximian.com>
9079
9080         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
9081         `Type' directly, but call ResolveType() on it.
9082         (Catch.Resolve): Likewise.
9083         (Foreach.Resolve): Likewise.
9084
9085 2004-10-18  Martin Baulig  <martin@ximian.com>
9086
9087         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
9088         `Type' directly, but call ResolveType() on it.
9089         (Probe.DoResolve): Likewise.
9090         (ArrayCreation.LookupType): Likewise.
9091         (TypeOf.DoResolve): Likewise.
9092         (SizeOf.DoResolve): Likewise.
9093
9094 2004-10-18  Raja R Harinath  <rharinath@novell.com>
9095
9096         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
9097         the ResolveType.
9098
9099 2004-10-17  John Luke  <john.luke@gmail.com>
9100
9101         * class.cs (Operator.GetSignatureForError): use CSharpName
9102
9103         * parameter.cs (Parameter.GetSignatureForError): Returns
9104         correct name even if was not defined.
9105
9106 2004-10-13  Raja R Harinath  <rharinath@novell.com>
9107
9108         Fix #65816.
9109         * class.cs (TypeContainer.EmitContext): New property.
9110         (DefineNestedTypes): Create an emitcontext for each part.
9111         (MethodCore.DoDefineParameters): Use container's emitcontext.
9112         Pass type array to InternalParameters.
9113         (MemberBase.DoDefine): Use container's emitcontext.
9114         (FieldMember.Define): Likewise.
9115         (Event.Define): Likewise.
9116         (SetMethod.GetParameterInfo): Change argument to EmitContext.
9117         Pass type array to InternalParameters.
9118         (SetIndexerMethod.GetParameterInfo): Likewise.
9119         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
9120         * delegate.cs (Define): Pass emitcontext to
9121         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
9122         array to InternalParameters.
9123         * expression.cs (ParameterReference.DoResolveBase): Pass
9124         emitcontext to GetParameterInfo.
9125         (ComposedCast.DoResolveAsTypeStep): Remove check on
9126         ec.ResolvingTypeTree.
9127         * parameter.cs (Parameter.Resolve): Change argument to
9128         EmitContext.  Use ResolveAsTypeTerminal.
9129         (Parameter.GetSignature): Change argument to EmitContext.
9130         (Parameters.ComputeSignature): Likewise.
9131         (Parameters.ComputeParameterTypes): Likewise.
9132         (Parameters.GetParameterInfo): Likewise.
9133         (Parameters.ComputeAndDefineParameterTypes): Likewise.
9134         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
9135         * support.cs (InternalParameters..ctor): Remove variant that takes
9136         a DeclSpace.
9137         * typemanager.cs (system_intptr_expr): New.
9138         (InitExpressionTypes): Initialize it.
9139
9140 2004-10-12  Chris Toshok  <toshok@ximian.com>
9141
9142         * cs-parser.jay: fix location for try_statement and catch_clause.
9143
9144 2004-10-18  Martin Baulig  <martin@ximian.com>
9145
9146         * class.cs (FieldMember.Define): Don't access the TypeExpr's
9147         `Type' directly, but call ResolveType() on it.
9148         (MemberBase.DoDefine): Likewise.
9149
9150         * expression.cs (New.DoResolve): Don't access the TypeExpr's
9151         `Type' directly, but call ResolveType() on it.
9152         (ComposedCast.DoResolveAsTypeStep): Likewise.
9153
9154         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
9155         `Type' directly, but call ResolveType() on it.
9156
9157 2004-10-17  John Luke  <john.luke@gmail.com>
9158
9159         * class.cs (Operator.GetSignatureForError): use CSharpName
9160
9161         * parameter.cs (Parameter.GetSignatureForError): Returns
9162         correct name even if was not defined.
9163
9164 2004-10-13  Raja R Harinath  <rharinath@novell.com>
9165
9166         Fix #65816.
9167         * class.cs (TypeContainer.EmitContext): New property.
9168         (DefineNestedTypes): Create an emitcontext for each part.
9169         (MethodCore.DoDefineParameters): Use container's emitcontext.
9170         Pass type array to InternalParameters.
9171         (MemberBase.DoDefine): Use container's emitcontext.
9172         (FieldMember.Define): Likewise.
9173         (Event.Define): Likewise.
9174         (SetMethod.GetParameterInfo): Change argument to EmitContext.
9175         Pass type array to InternalParameters.
9176         (SetIndexerMethod.GetParameterInfo): Likewise.
9177         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
9178         * delegate.cs (Define): Pass emitcontext to
9179         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
9180         array to InternalParameters.
9181         * expression.cs (ParameterReference.DoResolveBase): Pass
9182         emitcontext to GetParameterInfo.
9183         (ComposedCast.DoResolveAsTypeStep): Remove check on
9184         ec.ResolvingTypeTree.
9185         * parameter.cs (Parameter.Resolve): Change argument to
9186         EmitContext.  Use ResolveAsTypeTerminal.
9187         (Parameter.GetSignature): Change argument to EmitContext.
9188         (Parameters.ComputeSignature): Likewise.
9189         (Parameters.ComputeParameterTypes): Likewise.
9190         (Parameters.GetParameterInfo): Likewise.
9191         (Parameters.ComputeAndDefineParameterTypes): Likewise.
9192         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
9193         * support.cs (InternalParameters..ctor): Remove variant that takes
9194         a DeclSpace.
9195         * typemanager.cs (system_intptr_expr): New.
9196         (InitExpressionTypes): Initialize it.
9197
9198 2004-10-12  Chris Toshok  <toshok@ximian.com>
9199
9200         * cs-parser.jay: fix location for try_statement and catch_clause.
9201
9202 2004-10-07  Raja R Harinath  <rharinath@novell.com>
9203
9204         More DeclSpace.ResolveType avoidance.
9205         * decl.cs (MemberCore.InUnsafe): New property.
9206         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
9207         with newly created EmitContext.
9208         (FieldMember.Define): Likewise.
9209         * delegate.cs (Delegate.Define): Likewise.
9210         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
9211         only if normal name-lookup fails.
9212         (TypeExpr.DoResolve): Enable error-checking.
9213         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
9214         (SizeOf.DoResolve): Likewise.
9215         (ComposedCast.DoResolveAsTypeStep): Likewise.
9216         (StackAlloc.DoResolve): Likewise.
9217         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
9218         (Block.Unsafe): New property.
9219         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
9220         (Unsafe): Set 'unsafe' flag of contained block.
9221         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
9222         (Fixed.Resolve): Likewise.
9223         (Catch.Resolve): Likewise.
9224         (Using.ResolveLocalVariableDecls): Likewise.
9225         (Foreach.Resolve): Likewise.
9226
9227 2004-10-05  John Luke <john.luke@gmail.com>
9228
9229         * cs-parser.jay: add location to error CS0175
9230
9231 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
9232
9233         * ecore.cs (Expression.Constantity): Add support for turning null
9234         into a constant.
9235
9236         * const.cs (Const.Define): Allow constants to be reference types
9237         as long as the value is Null.
9238
9239 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
9240
9241         * namespace.cs (NamespaceEntry.Using): No matter which warning
9242         level is set, check if this namespace name has already been added.
9243
9244 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
9245
9246         * expression.cs: reftype [!=]= null should always use br[true,false].
9247         # 67410
9248
9249 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
9250
9251         Fix #67108
9252         * attribute.cs: Enum conversion moved to 
9253         GetAttributeArgumentExpression to be applied to the all
9254         expressions.
9255
9256 2004-10-01  Raja R Harinath  <rharinath@novell.com>
9257
9258         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
9259         * class.c (TypeContainer.DefineType): Flag error if
9260         base types aren't accessible due to access permissions.
9261         * decl.cs (DeclSpace.ResolveType): Move logic to
9262         Expression.ResolveAsTypeTerminal.
9263         (DeclSpace.ResolveTypeExpr): Thin layer over
9264         Expression.ResolveAsTypeTerminal.
9265         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
9266         Refactor code into NestedAccess.  Use it.
9267         (DeclSpace.NestedAccess): New.
9268         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
9269         argument to silence errors.  Check access permissions.
9270         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
9271         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
9272         (Cast.DoResolve): Likewise.
9273         (New.DoResolve): Likewise.
9274         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
9275         (TypeOf.DoResolve): Likewise.
9276
9277         * expression.cs (Invocation.BetterConversion): Return the Type of
9278         the better conversion.  Implement section 14.4.2.3 more faithfully.
9279         (Invocation.BetterFunction): Make boolean.  Make correspondence to
9280         section 14.4.2.2 explicit.
9281         (Invocation.OverloadResolve): Update.
9282         (Invocation): Remove is_base field.
9283         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
9284         (Invocation.Emit): Likewise.
9285
9286 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
9287
9288         * cs-parser.jay: Reverted 642 warning fix.
9289
9290 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9291
9292         Fix bug #66615
9293         * decl.cs (FindMemberWithSameName): Indexer can have more than
9294         1 argument.
9295
9296 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9297
9298         * expression.cs (LocalVariableReference.DoResolveLValue):
9299         Do not report warning 219 for out values.
9300         (EmptyExpression.Null): New member to avoid extra allocations.
9301
9302 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9303
9304         * cs-parser.jay: Fix wrong warning 642 report.
9305
9306         * cs-tokenizer.cs (CheckNextToken): New helper;
9307         Inspect next character if is same as expected.
9308
9309 2004-09-23  Martin Baulig  <martin@ximian.com>
9310
9311         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
9312         (Convert.ImplicitReferenceConversionExists): Likewise.
9313
9314 2004-11-09  Raja R Harinath  <rharinath@novell.com>
9315
9316         * Makefile (DISTFILES): Comment out a few missing files.
9317
9318 2004-10-29  Raja R Harinath  <rharinath@novell.com>
9319
9320         * Makefile (bootstrap_libs,bootstrap_libfiles): New.
9321         (bootstrap-libs): New target.  Invokes the net_2_0_bootstrap profile.
9322         (gmcs.exe): Invoke bootstrap-libs.
9323         (clean-local): Clean the net_2_0_bootstrap profile too.
9324         (PROGRAM_INSTALL_DIR): New.
9325         (install-local): Use it.
9326
9327 2004-10-13  Martin Baulig  <martin@ximian.com>
9328
9329         * generic.cs (TypeManager.InflatedConstraints): New nested class.
9330         (TypeParameter.DefineType): If we're a method type parameter and
9331         that method is overriding something, "inflate" its constraints.
9332
9333 2004-10-12  Martin Baulig  <martin@ximian.com>
9334
9335         * expression.cs (MemberAccess.DoResolve): If we're a SimpleName
9336         and have type arguments, create and resolve a ConstructedType.
9337
9338 2004-10-12  Martin Baulig  <martin@ximian.com>
9339
9340         * decl.cs (MemberCache.FindMemberToOverride): Use
9341         TypeManager.IsEqual() to compare the parameters and Type.Equals()
9342         to compare the invocationType.
9343
9344         * typemanager.cs (TypeManager.IsEqual): Added support for arrays.
9345         When comparing two type parameters, only do the signature-only
9346         comparision for method type parameters.
9347
9348 2004-10-11  Martin Baulig  <martin@ximian.com>
9349
9350         * report.cs: Don't make --fatal abort on warnings, we have
9351         -warnaserror for that.
9352
9353 2004-10-11  Martin Baulig  <martin@ximian.com>
9354
9355         * typemanager.cs
9356         (TypeManager.IsEqualGenericType): Removed, use IsEqual() instead.
9357         (TypeManager.IsEqual): Call ourself recursively instead of using
9358         Type.IsEqual(). 
9359
9360 2004-10-11  Martin Baulig  <martin@ximian.com>
9361
9362         * class.cs (TypeContainer.DefineType): Only call TypeParameter.Define()
9363         on our own type parameters, not on the ones we inherit from a containing
9364         class.
9365
9366         * expression.cs (Invocation.InferType): Use `==', not `Equals()' for
9367         the comparision.
9368
9369         * generic.cs (TypeParameter.Define): We may only be called once.
9370
9371         * pending.cs (Pending.InterfaceMethod): Call TypeManager.Real_IsEqual()
9372         instead of TypeManager.IsEqual().
9373
9374 2004-09-28  Martin Baulig  <martin@ximian.com>
9375
9376         * generic.cs
9377         (GenericConstraints.EffectiveBaseClass): New public property.
9378         (TypeParameter.GenericConstraints): New public property.
9379         (ConstructedType.CheckConstraints): Improved.
9380
9381         * convert.cs (Convert.TypeParam_EffectiveBaseType): New private method.
9382         (Convert.TypeParameterConversion): New private method; use this in
9383         ImplicitReferenceConversion() and ImplicitReferenceConversionExists()
9384         for all conversions related to type parameters.
9385
9386 2004-09-24  Martin Baulig  <martin@ximian.com>
9387
9388         * convert.cs (Convert.ImplicitReferenceConversion): Added implicit
9389         type parameter conversions for type parameters which are known to
9390         be reference types.
9391
9392 2004-09-24  Martin Baulig  <martin@ximian.com>
9393
9394         * generic.cs (GenericConstraints): Added `IsReferenceType' and
9395         `IsValueType' properties.
9396
9397         * support.cs (ReflectionConstraints): Use
9398         Type.GetGenericParameterConstraints() instead of the old hack.
9399
9400 2004-09-24  Martin Baulig  <martin@ximian.com>
9401
9402         * generic.cs (GenericConstraints): Moved here and made it an
9403         abstract class.
9404
9405         * support.cs (GenericConstraints): Moved to generic.cs.
9406
9407 2004-09-24  Martin Baulig  <martin@ximian.com>
9408
9409         * support.cs
9410         (ReflectionConstraints): Un-nested this class and made it public.
9411
9412         * typemanager.cs
9413         (TypeManager.GetTypeParameterConstraints): New public method.
9414         (TypeManager.HasConstructorConstraint): Use the attributes.
9415
9416 2004-09-24  Martin Baulig  <martin@ximian.com>
9417
9418         * support.cs (GenericConstraints): Replaced `HasConstructor',
9419         `IsReferenceType' and `IsValueType' with `Attributes'.
9420         (ReflectionParameters.ReflectionConstraints): Removed the Create()
9421         method and made the .ctor public.
9422
9423         * generic.cs (Constraints.Attributes): New public property.
9424         (Constraints): Renamed `HasConstructor' -> `HasConstructorConstraint',
9425         `IsReferenceType' -> `HasReferenceTypeConstraint' and
9426         `IsValueType' -> `HasValueTypeConstraint'.
9427
9428 2004-09-23  Martin Baulig  <martin@ximian.com>
9429
9430         * generic.cs (Constraints): Reflect latest runtime changes.
9431
9432 2004-09-23  Martin Baulig  <martin@ximian.com>
9433
9434         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
9435         (Convert.ImplicitReferenceConversionExists): Likewise.
9436
9437 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9438
9439         * class.cs (Operator.Define): Add error 448 and 559 report.
9440         
9441 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9442
9443         * class.cs (MemberBase.IsTypePermitted): New protected
9444         method for checking error CS0610.
9445
9446 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9447
9448         * class.cs (TypeContainer.HasExplicitLayout): New property
9449         Returns whether container has StructLayout attribute set Explicit.
9450         (FieldMember): New abstract class for consts and fields.
9451         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
9452         (Field): Reuse FieldMember.
9453
9454         * const.cs (Const): Reuse FieldMember.
9455
9456         * rootcontext.cs: EmitConstants call moved to class.
9457
9458 2004-09-22  Martin Baulig  <martin@ximian.com>
9459
9460         Marek and me just fixed one of our oldest bugs: #28562 :-)
9461
9462         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
9463
9464         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
9465         we're an EnumConstant, just return that.
9466         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
9467         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
9468         to get the value which'll actually be written into the attribute.
9469         However, we have to use GetValue() to access the attribute's value
9470         in the compiler.        
9471
9472 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9473
9474         * constant.cs (Constant.IsNegative): New abstract property
9475         IsNegative.
9476
9477         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
9478         (StackAlloc.DoResolve): Reused IsNegative.
9479
9480 2004-09-22  Martin Baulig  <martin@ximian.com>
9481
9482         * typemanager.cs (TypeManager.LookupGenericTypeContainer): New
9483         public method; like LookupTypeContainer, but also works for
9484         generic instances.
9485
9486         * report.cs (Report.SymbolRelatedToPreviousError): Use
9487         TypeManager.LookupGenericTypeContainer().       
9488
9489 2004-09-22  Martin Baulig  <martin@ximian.com>
9490
9491         Thanks to Peter Sestoft for this bug report.
9492
9493         * expression.cs (Conditional): If both the `trueExpr' and the
9494         `falseExpr' is a NullLiteral, return a NullLiteral.
9495
9496 2004-09-22  Martin Baulig  <martin@ximian.com>
9497
9498         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
9499         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
9500         for the "get_Current" call.
9501
9502 2004-09-21  Martin Baulig  <martin@ximian.com>
9503
9504         * convert.cs (Convert.ImplicitReferenceConversion): When
9505         converting to an interface type, first check whether we're
9506         converting from a reference type.
9507
9508 2004-09-14  Martin Baulig  <martin@ximian.com>
9509
9510         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
9511
9512 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
9513
9514         Fixed bug #61902
9515         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
9516         called and is obsolete then this member suppress message
9517         when call is inside next [Obsolete] method or type.
9518
9519         * expression.cs: Use TestObsoleteMethodUsage member.
9520
9521 2004-09-14  Martin Baulig  <martin@ximian.com>
9522
9523         * genericparser.cs: Removed.
9524
9525 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
9526
9527         * class.cs (MethodCore.CheckBase): Fix bug #65757.
9528
9529 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
9530
9531         * attribute.cs (Attribute.Resolve): Add error 653 report.
9532
9533         * class.cs (Class.ApplyAttributeBuilder): Add error 641
9534         report.
9535         (Method.ApplyAttributeBuilder): Add error 685 report.
9536         (Operator.Define): Add error 564 report.
9537
9538         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
9539
9540         * expression.cs (Invocation.DoResolve): Add error
9541         245 and 250 report.
9542
9543         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
9544         error 674 report.
9545
9546 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9547
9548         * class.cs (ConstructorInitializer.Resolve):
9549         Wrong error number (515->516).
9550
9551 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9552
9553         * class.cs (Indexer.Define): Add error 631 report.
9554
9555 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9556
9557         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
9558
9559 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9560
9561         * expression.cs (Probe.DoResolve): Add error CS0241 report.
9562
9563 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
9564
9565         * cs-parser.jay: Added error CS0241 report.
9566
9567 2004-09-10  Raja R Harinath  <rharinath@novell.com>
9568
9569         * cs-parser.jay (fixed_statement): Introduce a scope for the
9570         declaration in the 'fixed' statement.
9571
9572 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9573
9574         * cs-parser.jay: Added CS0230 error report.
9575
9576 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9577
9578         * cs-parser.jay: Added errors CS0231 and CS0257 report.
9579
9580 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9581
9582         * expression.cs (Argument.Resolve): Added error CS0192 and
9583         CS0199 report.
9584
9585 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9586
9587         C# 2.0 #pragma warning feature
9588
9589         * cs-tokenizer.cs (PreProcessPragma): New method; 
9590         Handles #pragma directive.
9591
9592         * report.cs (WarningRegions): New class; Support
9593         class for #pragma warning directive. It tests whether
9594         warning is enabled for a given line.
9595
9596 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
9597
9598         * const.cs: Add more descriptive error report, tahnks to
9599         Sebastien. 
9600
9601 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
9602
9603         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
9604
9605 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
9606
9607         * expression.cs: Apply patch from Ben: Remove dead code from
9608         ArrayCreation, and remove the TurnintoConstant call in const.cs,
9609         as that code just threw an exception anwyays.
9610
9611         * const.cs: Remove the call to the turnintoconstant, for details
9612         see bug: #63144
9613         
9614         * literal.cs: The type of the null-literal is the null type;  So
9615         we use a placeholder type (literal.cs:System.Null, defined here)
9616         for it.
9617
9618         * expression.cs (Conditional.DoResolve): Remove some old code that
9619         is no longer needed, conversions have been fixed.
9620
9621         (ArrayCreationExpression.DoResolve): Return false if we fail to
9622         resolve the inner expression.
9623
9624 2004-09-07  Raja R Harinath  <rharinath@novell.com>
9625
9626         Fix test-290.cs.
9627         * cs-parser.jay (delegate_declaration): Record a delegate
9628         declaration as a type declaration.
9629         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
9630
9631 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
9632
9633         * parameter.cs: Do not crash if the type can not be resolved. 
9634
9635         * expression.cs: Report errors with unsafe pointers, fixes #64896
9636
9637 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
9638
9639         * expression.cs: Pointer arith always needs to do a conv.i
9640         if the operand is a long. fix 65320
9641
9642 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
9643
9644         Fixed cs0619-37.cs, cs0619-38.cs
9645
9646         * enum.cs (GetObsoleteAttribute): Removed.
9647
9648         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
9649         on Enum member is double staged. The first is tested member
9650         and then enum.
9651
9652 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
9653
9654         Fixed #56986, #63631, #65231
9655
9656         * class.cs: (TypeContainer.AddToMemberContainer): New method,
9657         adds member to name container.
9658         (TypeContainer.AddToTypeContainer): New method, adds type to
9659         name container.
9660         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
9661         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
9662         AddOperator): Simplified by reusing AddToMemberContainer.
9663         (TypeContainer.UserDefinedStaticConstructor): Changed to property
9664         instead of field.
9665         (Method.CheckForDuplications): Fixed implementation to test all
9666         possibilities.
9667         (MemberBase): Detection whether member is explicit interface
9668         implementation is now in constructor.
9669         (MemberBase.UpdateMemberName): Handles IndexerName.
9670         (Accessor): Changed to keep also location information.
9671         (AbstractPropertyEventMethod): Is derived from MemberCore.
9672         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
9673         will be emited or not.
9674         (PropertyBase.AreAccessorsDuplicateImplementation):
9675         Tests whether accessors are not in collision with some method.
9676         (Operator): Is derived from MethodCore to simplify common
9677         operations.
9678
9679         * decl.cs (Flags.TestMethodDuplication): Test for duplication
9680         must be performed.
9681         (DeclSpace.AddToContainer): Adds the member to defined_names
9682         table. It tests for duplications and enclosing name conflicts.
9683
9684         * enum.cs (EnumMember): Clean up to reuse the base structures
9685
9686 2004-09-03  Martin Baulig  <martin@ximian.com>
9687
9688         Merged latest changes into gmcs.  Please keep this comment in
9689         here, it makes it easier for me to see what changed in MCS since
9690         the last time I merged.
9691
9692 2004-09-03  Martin Baulig  <martin@ximian.com>
9693
9694         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
9695         into TypeContainer, to make partial classes work again.
9696
9697 2004-09-03  Martin Baulig  <martin@ximian.com>
9698
9699         * rootcontext.cs (RootContext.V2): Removed.
9700
9701 2004-03-23  Martin Baulig  <martin@ximian.com>
9702
9703         * expression.cs (Invocation.OverloadResolve): Added `bool
9704         may_fail' argument and use it instead of the Location.IsNull() hack.
9705
9706 2004-09-09  Martin Baulig  <martin@ximian.com>
9707
9708         * cs-parser.jay (namespace_declaration): Fixed CS0134 reporting.
9709
9710 2004-09-09  Martin Baulig  <martin@ximian.com>
9711
9712         * generic.cs (TypeParameter.DefineType): Added support for
9713         explicit interface methods.
9714
9715 2004-09-09  Martin Baulig  <martin@ximian.com>
9716
9717         * README.Changes: New document.  Started to list important changes
9718         between MCS and GMCS here.
9719
9720 2004-09-08  Martin Baulig  <martin@ximian.com>
9721
9722         * class.cs
9723         (TypeContainer.CheckRecursiveDefinition): New protected method.
9724         (TypeContainer.DefineType): Move the CS0146 check into
9725         CheckRecursiveDefinition().     
9726
9727 2004-09-06  Martin Baulig  <martin@ximian.com>
9728
9729         * generic.cs (ConstructedType.CheckConstraints): Allow builtin
9730         types for the constructor constraint.
9731
9732 2004-09-03  Martin Baulig  <martin@ximian.com>
9733
9734         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
9735         into TypeContainer, to make partial classes work again.
9736
9737 2004-09-03  Martin Baulig  <martin@ximian.com>
9738
9739         * rootcontext.cs (RootContext.V2): Removed.
9740
9741 2004-03-23  Martin Baulig  <martin@ximian.com>
9742
9743         * expression.cs (Invocation.OverloadResolve): Added `bool
9744         may_fail' argument and use it instead of the Location.IsNull() hack.
9745
9746 2004-09-03  Martin Baulig  <martin@ximian.com>
9747
9748         Merged latest changes into gmcs.  Please keep this comment in
9749         here, it makes it easier for me to see what changed in MCS since
9750         the last time I merged.
9751
9752 2004-09-03  Raja R Harinath  <rharinath@novell.com>
9753
9754         Fix #61128.
9755         * expression.cs (BetterConversion): Don't allow either conversion 
9756         to be null.  Remove redundant implicit conversion test when 'q ==
9757         null' -- when this function is invoked, we already know that the
9758         implicit conversion exists.
9759         (BetterFunction): Assume that 'best' is non-null.  Remove
9760         redundant reimplementation of IsApplicable when 'best' is null.
9761         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
9762         number of arguments.
9763         (IsAncestralType): Extract from OverloadResolve.
9764         (OverloadResolve): Make robust to the MethodGroupExpr being
9765         unsorted.  Implement all the logic of Section 14.5.5.1, and
9766         support overloading of methods from multiple applicable types.
9767         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
9768
9769         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
9770         (RealError, Warning): Append type of report to related symbol.
9771
9772 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
9773
9774         * enum.cs: Fixed CLS-Compliance checks for enum members.
9775         Error tests cs3008-8.cs, cs3014-8.cs
9776
9777 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
9778
9779         Fixed bug #62342, #63102
9780         * class.cs: ImplementIndexer uses member.IsExplicitImpl
9781         like ImplementMethod.
9782
9783 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
9784
9785         * attribute.cs (Attribute.GetAttributeArgumentExpression):
9786         Fixed bug #65170.
9787
9788 2004-09-02  Martin Baulig  <martin@ximian.com>
9789
9790         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
9791         TypeManager.GetArgumentTypes() rather than calling GetParameters()
9792         on the MethodBase.
9793
9794 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
9795
9796         C# 2.0 Static classes implemented
9797
9798         * class.cs (TypeContainer): instance_constructors,
9799         initialized_fields, initialized_static_fields,
9800         default_constructor, base_inteface_types are protected to be
9801         accessible from StaticClass.
9802         (TypeContainer.DefineDefaultConstructor): New virtual method
9803         for custom default constructor generating
9804         (StaticClass): New class to handle "Static classes" feature.
9805
9806         * cs-parser.jay: Handle static keyword on class like instance
9807         of StaticClass.
9808
9809         * driver.cs: Added "/langversion" command line switch with two
9810         options (iso-1, default).
9811
9812 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
9813
9814         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
9815
9816 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
9817
9818         * delegate.cs: Style.
9819
9820 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
9821
9822         * delegate.cs: Add seperate instance expr field for miguel.
9823
9824 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
9825
9826         * PointerArithmetic (Resolve): make sure we are not doing
9827         pointer arith on void*. Also, make sure we are resolved
9828         by not setting eclass until resolve.
9829
9830         All callers: Make sure that PointerArithmetic gets resolved.
9831
9832 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
9833
9834         * ArrayCreation (LookupType): If the type does not resolve 
9835         to an array, give an error.
9836
9837 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
9838
9839         * statement.cs (Try.Resolve): Fixed bug #64222
9840
9841 2004-08-27  Martin Baulig  <martin@ximian.com>
9842
9843         * class.cs
9844         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
9845         crash here.     
9846
9847 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
9848
9849         * ecore.cs (Constantify): Get underlying type via
9850         System.Enum.GetUnderlyingType to avoid StackOverflow on the
9851         Windows in special cases.
9852
9853 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
9854
9855         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
9856         for obtaining also private methods.
9857         (GetRemoveMethod): Used GetRemoveMethod (true)
9858         for obtaining also private methods.
9859
9860 2004-09-02  Martin Baulig  <martin@ximian.com>
9861
9862         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
9863         TypeManager.GetArgumentTypes() rather than calling GetParameters()
9864         on the MethodBase.
9865
9866 2004-08-27  Martin Baulig  <martin@ximian.com>
9867
9868         * class.cs
9869         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
9870         crash here.     
9871
9872 2004-08-25  Martin Baulig  <martin@ximian.com>
9873
9874         * support.cs (ReflectionParameters..ctor): If this is a generic
9875         method, retrieve and store its type parameters.
9876         (InternalParameters..ctor): Added `TypeParameter[]' argument.
9877         (ReflectionParameters.GenericConstraints): The argument specifies
9878         the type parameter, not the method parameter.
9879         (InternalParameters.GenericConstraints): Likewise.
9880
9881         * generic.cs (TypeParameter.DefineType): Correctly handle
9882         constraints wrt. generic methods in interfaces and their
9883         implementations.        
9884
9885 2004-08-24  Martin Baulig  <martin@ximian.com>
9886
9887         * generic.cs (TypeParameter.IsSubclassOf): New public method.
9888         (Constraints.IsSubclassOf): New internal method.
9889
9890         * typemanager.cs (TypeManager.FindMembers): Added special support
9891         for GenericTypeParameterBuilder's.      
9892         (TypeManager.IsSubclassOf, IsFamilyAccessible): Added support for
9893         type parameters.
9894
9895 2004-08-24  Martin Baulig  <martin@ximian.com>
9896
9897         * typemanager.cs
9898         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
9899         this for accessibility checks.
9900         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
9901         IsNestedFamilyAccessible.
9902         (TypeManager.IsSubclassOf): New method, do what the name actually
9903         says.   
9904
9905 2004-08-24  Martin Baulig  <martin@ximian.com>
9906
9907         * expression.cs (MemberAccess.DoResolve): When resolving ourselves
9908         as a SimpleName, include the generic arity.
9909
9910 2004-08-24  Martin Baulig  <martin@ximian.com>
9911
9912         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
9913         MethodAttributes.HideBySig for operators.
9914
9915 2004-08-23  Martin Baulig  <martin@ximian.com>
9916
9917         Back to the old error reporting system :-)
9918
9919         * report.cs (Message): Removed.
9920         (Report.MessageData, ErrorData, WarningData): Removed.
9921         (Report.Error, Warning): Back to the old system.
9922
9923 2004-08-23  Martin Baulig  <martin@ximian.com>
9924
9925         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
9926
9927         * class.cs (TypeContainer.ParentContainer): New public virtual
9928         method; replaces the explicit interface implementation.
9929         (ClassPart.ParentContainer): Override.
9930
9931 2004-08-23  Martin Baulig  <martin@ximian.com>
9932
9933         * statement.cs (Switch): Added support for constant switches; see
9934         #59428 or test-285.cs.
9935
9936 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
9937
9938         Fixed bug #62740.
9939         * statement.cs (GetEnumeratorFilter): Removed useless
9940         logic because C# specs is strict. GetEnumerator must be
9941         public.
9942
9943 2004-08-22  Martin Baulig  <martin@ximian.com>
9944
9945         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
9946         a switch and may break, reset the barrier.  Fixes #59867.
9947
9948 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
9949
9950         CLS-Compliance speed up (~5% for corlib)
9951
9952         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
9953         New method. Tests container for CLS-Compliant names
9954
9955         * class.cs (TypeContainer.VerifyClsName): New method.
9956         Checks whether container name is CLS Compliant.
9957         (Constructor): Implements IMethodData.
9958
9959         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
9960         low-case table for CLS Compliance test.
9961         (MemberCache.VerifyClsParameterConflict): New method.
9962         Checks method parameters for CS3006 error.
9963
9964         * enum.cs (EnumMember): Is derived from MemberCore.
9965         (Enum.VerifyClsName): Optimized for better performance.
9966
9967 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
9968
9969         * report.cs: Renamed Error_T to Error and changed all
9970         references.
9971
9972 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
9973
9974         * class.cs (TypeContainer.IndexerArrayList): New inner class
9975         container for indexers.
9976         (TypeContainer.DefaultIndexerName): New constant for default
9977         indexer name. Replaced all "Item" with this constant.
9978         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
9979
9980         * typemanager.cs (TypeManager.default_member_ctor): Cache here
9981         DefaultMemberAttribute constructor.
9982
9983 2004-08-05  Martin Baulig  <martin@ximian.com>
9984
9985         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
9986         Fix bug #59429.
9987
9988 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
9989
9990         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
9991         multi platforms problem.
9992
9993         * compiler.csproj: Included shared files.
9994
9995 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9996
9997         Fix bug 60333, 55971 in the more general way
9998         * attribute.cs (Attribute.GetAttributeArgumentExpression):
9999         Added arg_type argument for constant conversion.
10000         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
10001
10002 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
10003
10004         Fix bug #59760
10005         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
10006         OperatorArrayList, MethodCoreArrayList for typecontainer
10007         containers. Changed class member types to these new types.
10008         (MethodArrayList.DefineMembers): Added test for CS0659.
10009
10010 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
10011
10012         * cfold.cs: Synchronize the folding with the code in expression.cs
10013         Binary.DoNumericPromotions for uint operands.
10014
10015         * attribute.cs: Revert patch from Raja, it introduced a regression
10016         while building Blam-1.2.1 (hard to isolate a test case).
10017
10018 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
10019
10020         Fix for #55382
10021         * class.cs:
10022         (TypeContainer.Define): Renamed to DefineContainerMembers because of
10023         name collision.
10024         (MethodCore.parent_method): New member. The method we're overriding
10025         if this is an override method.
10026         (MethodCore.CheckBase): Moved from Method class and made common.
10027         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
10028         private.
10029         (MethodCore.CheckForDuplications): New abstract method. For custom
10030         member duplication search in a container
10031         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
10032         method and its return type.
10033         (Event.conflict_symbol): New member. Symbol with same name in the
10034         parent class.
10035
10036         * decl.cs:
10037         (MemberCache.FindMemberWithSameName): New method. The method
10038         is looking for conflict with inherited symbols.
10039
10040 2004-08-04  Martin Baulig  <martin@ximian.com>
10041
10042         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
10043
10044         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
10045
10046 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
10047
10048         * report.cs (Message): New enum for better error, warning reference in
10049         the code.
10050         (MessageData): New inner abstract class. It generally handles printing of
10051         error and warning messages.
10052         Removed unused Error, Warning, Message methods.
10053
10054 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
10055
10056         Fix for cs0592-8.cs test
10057         * attribute.cs
10058         (Attributable.ValidAttributeTargets): Made public.
10059         (Attribute.ExplicitTarget): New member for explicit target value.
10060         (Attribute.CheckTargets): Now we translate explicit attribute
10061         target to Target here.
10062
10063 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
10064
10065         * ecore.cs (MethodGroupExpr): new IsBase property.
10066
10067         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
10068
10069         * delegate.cs (DelegateCreation): store a MethodGroupExpr
10070         rather than an instance expr.
10071
10072         (DelegateCreation.Emit): Use the method group rather than
10073         the instance expression. Also, if you have base.Foo as the
10074         method for a delegate, make sure to emit ldftn, not ldftnvirt.
10075
10076         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
10077
10078         (NewDelegate.DoResolve): Only check for the existance of Invoke
10079         if the method is going to be needed. Use MethodGroupExpr.
10080
10081         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
10082
10083         * expression.cs: For pointer arith., make sure to use
10084         the size of the type, not the size of the pointer to
10085         the type.
10086
10087 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
10088
10089         Fix for #60722
10090         * class.cs (Class): Added error CS0502 test.
10091
10092 2004-08-03  John Luke  <jluke@cfl.rr.com>
10093             Raja R Harinath  <rharinath@novell.com>
10094
10095         Fix for #60997.
10096         * attribute.cs (Attribute.complained_before): New flag.
10097         (Attribute.ResolveType, Attribute.Resolve),
10098         (Attribute.DefinePInvokeMethod): Set it.
10099         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
10100         
10101 2004-08-03  Martin Baulig  <martin@ximian.com>
10102
10103         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
10104         use a user-defined operator; we still need to do numeric
10105         promotions in case one argument is a builtin type and the other
10106         one has an implicit conversion to that type.  Fixes #62322.
10107
10108 2004-08-18  Martin Baulig  <martin@ximian.com>
10109
10110         * class.cs (Method.Define): Use the correct method name when
10111         creating the MethodBuilder for a generic method.
10112
10113 2004-08-17  Martin Baulig  <martin@ximian.com>
10114
10115         * generic.cs (Constraints): Support type parameter constraints.
10116
10117 2004-08-16  Martin Baulig  <martin@ximian.com>
10118
10119         * cs-tokenizer.cs (Tokenizer.TypeOfParsing): New public property.
10120         (Token.GENERIC_DIMENSION): New token; this is returned if we
10121         encounter an unbound generic type in a typeof() expression.
10122
10123         * cs-parser.jay (opt_type_argument_list): Added GENERIC_DIMENSION;
10124         this token is only generated while parsing a typeof() expression.
10125         (typeof_expression): Removed the old unbound_type hack.
10126
10127         * generic.cs (TypeArguments.IsUnbound): New public property.
10128
10129         * decl.cs (MemberName): Added support for unbound types.
10130
10131 2004-08-14  Martin Baulig  <martin@ximian.com>
10132
10133         * typemanager.cs
10134         (TypeManager.IsEqualGenericInstance): New static method.
10135         (TypeManager.IsSubclassOrNestedChildOf, IsSubclassOf): This is
10136         just used to check accessibility, so follow the rules of 26.1.6.        
10137
10138         * expression.cs (MemberAccess.ResolveAsTypeStep): Return a
10139         ConstructedType instead of a TypeExpression if we have type arguments.
10140
10141         * cs-parser.jay (typeof_expression): Support unbound generic types.
10142
10143         * ecore.cs (UnboundTypeExpression): New public class.
10144
10145 2004-08-12  Martin Baulig  <martin@ximian.com>
10146
10147         * typemanager.cs (TypeManager.IsNestedChildOf): Use
10148         TypeManager.IsEqual() rather than `=='.
10149
10150         * decl.cs (DeclSpace.CheckAccessLevel): Use `tb.FullName' for
10151         generic instances as well.
10152
10153 2004-08-12  Martin Baulig  <martin@ximian.com>
10154
10155         * expression.cs (Invocation.InferType): We can only infer method
10156         type parameters.  Fixes #62647.
10157
10158 2004-08-11  Martin Baulig  <martin@ximian.com>
10159
10160         * class.cs (TypeContainer.DefineType): Create the TypeBuilder
10161         before resolving the base classes.
10162
10163 2004-08-06 Gonzalo Paniagua Javier <gonzalo@ximian.com>
10164
10165         * Makefile: install .mdb file too.
10166
10167 2004-08-05  Martin Baulig  <martin@ximian.com>
10168
10169         * ecore.cs (FieldExpr.DoResolveLValue): If we're resolving a field
10170         initializer, the current type is just the TypeBuilder, not the
10171         instantiated generic type.
10172         (FieldExpr.IsFieldInitializer): New public property.
10173
10174 2004-08-04  Martin Baulig  <martin@ximian.com>
10175
10176         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
10177
10178         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
10179
10180 2004-08-03  Martin Baulig  <martin@ximian.com>
10181
10182         * class.cs (MethodData.Define): If we're an explicit
10183         implementation, remove the generic arity from the type name.
10184
10185 2004-08-03  Martin Baulig  <martin@ximian.com>
10186
10187         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
10188         use a user-defined operator; we still need to do numeric
10189         promotions in case one argument is a builtin type and the other
10190         one has an implicit conversion to that type.  Fixes #62322.
10191
10192 2004-08-02  Martin Baulig  <martin@ximian.com>
10193
10194         * class.cs (TypeContainer.ifaces): Make this a `Type[]', not a
10195         `TypeExpr[]' array.
10196         (TypeContainer.GetClassBases): Return the unexpanded list of
10197         interfaces; we expand them later.
10198         (TypeContainer.DefineType): After creating the TypeBuilder, call
10199         TypeManager.ExpandInterfaces() to get an expanded and resolved
10200         list of interfaces.
10201
10202         * ecore.cs (TypeExpr.GetInterfaces): Removed
10203
10204         * generics.cs (Constraints.InterfaceConstraints): Remove.
10205         (TypeParameter.DefineType): Call TypeManager.RegisterBuilder() to
10206         register the interface constraints.
10207
10208         * typemanager.cs
10209         (TypeManager.AddUserType): Removed the `ifaces' argument.
10210         (TypeManager.AddTypeParameter): Likewise.
10211         (TypeManager.AddUserInterface): Removed, was unused.
10212         (TypeManager.RegisterBuilder): Take a `Type[]' instead of a
10213         `TypeExpr[]' array for the interfaces.
10214         (TypeManager.ExpandInterfaces): Call this after the TypeBuilder
10215         has been defined, returns a list of the resolved interfaces types.
10216         (TypeManager.GetInterfaces): Return a `Type[]', not a `TypeExpr[]'.
10217         (TypeManager.GetExplicitInterfaces): Likewise.  
10218
10219 2004-08-02  Martin Baulig  <martin@ximian.com>
10220
10221         * expression.cs (Invocation.EmitCall): If we're invoking a method
10222         on a type parameter, use the new `Constrained' prefix opcode.
10223
10224 2004-08-02  Martin Baulig  <martin@ximian.com>
10225
10226         * statement.cs (LocalInfo.Flags): Added `IsThis'.
10227         (LocalInfo.IsThis): New public property.
10228         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
10229
10230 2004-08-01  Martin Baulig  <martin@ximian.com>
10231
10232         * class.cs (TypeContainer.GetClassBases): Don't set the default
10233         here since we may get called from GetPartialBases().
10234         (TypeContainer.DefineType): If GetClassBases() didn't return a
10235         parent, use the default one.
10236
10237 2004-07-30  Martin Baulig  <martin@ximian.com>
10238
10239         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
10240
10241         * class.cs (SourceMethod): New public class, derive from the
10242         symbol writer's ISourceMethod.
10243         (Method): Use the new symbol writer API.
10244
10245         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
10246         as argument and use the new symbol writer.
10247
10248         * location.cs
10249         (SourceFile): Implement the symbol writer's ISourceFile.
10250         (Location.SymbolDocument): Removed.
10251         (Location.SourceFile): New public property.
10252
10253         * symbolwriter.cs: Use the new symbol writer API.
10254
10255 2004-07-30  Raja R Harinath  <rharinath@novell.com>
10256
10257         * Makefile (install-local): Remove.  Functionality moved to
10258         executable.make.
10259
10260 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
10261
10262         * Makefile: Install mcs.exe.config file together with mcs.exe.
10263         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
10264         correct runtime version.
10265         
10266 2004-07-25  Martin Baulig  <martin@ximian.com>
10267
10268         * class.cs
10269         (TypeContainer.RegisterOrder): Removed, this was unused.
10270         (TypeContainer, interface_order): Removed.
10271         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
10272         TypeContainer as argument since we can also be called with a
10273         `PartialContainer' for a partial class/struct/interface.
10274         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
10275         of checking whether we're an `Interface' - we could be a
10276         `PartialContainer'.
10277         (PartialContainer.Register): Override; call
10278         AddClass()/AddStruct()/AddInterface() on our parent.
10279
10280         * cs-parser.jay (interface_member_declaration): Add things to the
10281         `current_container', not the `current_class'.
10282
10283         * rootcontext.cs (RegisterOrder): The overloaded version which
10284         takes an `Interface' was unused, removed.
10285
10286         * typemanager.cs (TypeManager.LookupInterface): Return a
10287         `TypeContainer', not an `Interface'.
10288         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
10289         contain a `PartialContainer' for an interface, so check it's
10290         `Kind' to figure out what it is.
10291
10292 2004-07-25  Martin Baulig  <martin@ximian.com>
10293
10294         * class.cs (Class.DefaultTypeAttributes): New public constant.
10295         (Struct.DefaultTypeAttributes): Likewise.
10296         (Interface.DefaultTypeAttributes): Likewise.
10297         (PartialContainer.TypeAttr): Override this and add the
10298         DefaultTypeAttributes.
10299
10300 2004-07-25  Martin Baulig  <martin@ximian.com>
10301
10302         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
10303         we can just use the `Parent' field instead.
10304
10305 2004-07-25  Martin Baulig  <martin@ximian.com>
10306
10307         * class.cs (TypeContainer.Emit): Renamed to EmitType().
10308
10309 2004-07-25  Martin Baulig  <martin@ximian.com>
10310
10311         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
10312         our parts before defining any methods.
10313         (TypeContainer.VerifyImplements): Make this virtual.
10314         (ClassPart.VerifyImplements): Override and call VerifyImplements()
10315         on our PartialContainer.
10316
10317 2004-07-25  Martin Baulig  <martin@ximian.com>
10318
10319         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
10320
10321         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
10322         argument, we can just use the `Parent' field instead.
10323
10324         * class.cs
10325         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
10326         (MemberBase.DoDefine): Likewise.
10327
10328 2004-07-24  Martin Baulig  <martin@ximian.com>
10329
10330         * decl.cs (MemberCore.Parent): New public field.
10331         (DeclSpace.Parent): Moved to MemberCore.
10332
10333         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
10334         (MemberBase.ctor): Added TypeContainer argument, pass it to our
10335         parent's .ctor.
10336         (FieldBase, Field, Operator): Likewise.
10337         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
10338         (EventField, Event): Likewise.
10339
10340 2004-07-23  Martin Baulig  <martin@ximian.com>
10341
10342         * class.cs (PartialContainer): New public class.
10343         (ClassPart): New public class.
10344         (TypeContainer): Added support for partial classes.
10345         (TypeContainer.GetClassBases): Splitted some of the functionality
10346         out into GetNormalBases() and GetPartialBases().
10347
10348         * cs-tokenizer.cs (Token.PARTIAL): New token.
10349         (Tokenizer.consume_identifier): Added some hacks to recognize
10350         `partial', but only if it's immediately followed by `class',
10351         `struct' or `interface'.
10352
10353         * cs-parser.jay: Added support for partial clases.
10354
10355 2004-07-23  Martin Baulig  <martin@ximian.com>
10356
10357         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
10358         a `DeclSpace' and also made it readonly.
10359         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
10360         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
10361         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
10362
10363         * cs-parser.jay: Pass the `current_class', not the
10364         `current_container' (at the moment, this is still the same thing)
10365         to a new Method, Property, Event, Indexer or Constructor.
10366
10367 2004-07-23  Martin Baulig  <martin@ximian.com>
10368
10369         * cs-parser.jay (CSharpParser): Added a new `current_class' field
10370         and removed the `current_interface' one.
10371         (struct_declaration, class_declaration, interface_declaration):
10372         Set `current_class' to the newly created class/struct/interface;
10373         set their `Bases' and call Register() before parsing their body.
10374
10375 2004-07-23  Martin Baulig  <martin@ximian.com>
10376
10377         * class.cs (Kind): New public enum.
10378         (TypeContainer): Made this class abstract.
10379         (TypeContainer.Kind): New public readonly field.
10380         (TypeContainer.CheckDef): New public method; moved here from
10381         cs-parser.jay.
10382         (TypeContainer.Register): New public abstract method.
10383         (TypeContainer.GetPendingImplementations): New public abstract
10384         method.
10385         (TypeContainer.GetClassBases): Removed the `is_class' and
10386         `is_iface' parameters.
10387         (TypeContainer.DefineNestedTypes): Formerly known as
10388         DoDefineType().
10389         (ClassOrStruct): Made this class abstract.
10390
10391         * tree.cs (RootTypes): New public type. 
10392
10393 2004-07-20  Martin Baulig  <martin@ximian.com>
10394
10395         * tree.cs (Tree.RecordNamespace): Removed.
10396         (Tree.Namespaces): Removed.
10397
10398         * rootcontext.cs (RootContext.IsNamespace): Removed.
10399
10400         * cs-parser.jay (namespace_declaration): Just create a new
10401         NamespaceEntry here.
10402
10403 2004-07-21  Lluis Sanchez Gual  <lluis@novell.com>
10404
10405         * Makefile: Install gmcs.exe.config file together with gmcs.exe.
10406         * gmcs.exe.config: Renamed from mcs.exe.config. Added supportedRuntime
10407         entry to make sure it runs in the correct runtime version.
10408         
10409 2004-07-18  Martin Baulig  <martin@ximian.com>
10410
10411         * generic.cs (ConstructedType.CheckConstraints): Improved
10412         constraints checking.
10413
10414 2004-07-18  Martin Baulig  <martin@ximian.com>
10415
10416         * expression.cs (Invocation.BetterMethod): Call
10417         TypeManager.TypeToCoreType() on all types and removed my previous
10418         hack; we're already doig the right thing here.
10419
10420 2004-07-17  Martin Baulig  <martin@ximian.com>
10421
10422         * decl.cs (MemberName.MakeName): Create the "class`1" names here.
10423
10424 2004-07-16  Martin Baulig  <martin@ximian.com>
10425
10426         * iterators.cs: Added generics support.
10427
10428 2004-07-16  Martin Baulig  <martin@ximian.com>
10429
10430         * iterators.cs: Rewrote this.  We're now using one single Proxy
10431         class for both the IEnumerable and the IEnumerator interface and
10432         `Iterator' derives from Class so we can use the high-level API.
10433
10434         * class.cs (TypeContainer.AddIterator): New method.
10435         (TypeContainer.DoDefineType): New protected virtual method, which
10436         is called from DefineType().
10437         (TypeContainer.DoDefineMembers): Call DefineType() and
10438         DefineMembers() on all our iterators.
10439         (TypeContainer.Emit): Call Emit() on all our iterators.
10440         (TypeContainer.CloseType): Call CloseType() on all our iterators.
10441
10442         * codegen.cs (EmitContext.CurrentIterator): New public field.
10443
10444 2004-07-15  Martin Baulig  <martin@ximian.com>
10445
10446         * typemanager.cs
10447         (TypeManager.not_supported_exception_type): New type.   
10448
10449 2004-07-14  Martin Baulig  <martin@ximian.com>
10450
10451         * typemanager.cs
10452         (TypeManager.generic_ienumerable_type): New type.
10453         (TypeManager.generic_ienumerator_type): New type.
10454
10455         * rootcontext.cs
10456         (RootContext.interfaces_first_stage): Added
10457         "System.Collections.Generic.IEnumerator`1" and
10458         "System.Collections.Generic.IEnumerable`1".     
10459
10460 2004-07-14  Martin Baulig  <martin@ximian.com>
10461
10462         * iterators.cs: Use real error numbers.
10463
10464 2004-07-14  Martin Baulig  <martin@ximian.com>
10465
10466         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
10467         requires this to be a System.Collection.IEnumerable and not a
10468         class implementing that interface.
10469         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
10470
10471 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
10472
10473         * class.cs: Fixed previous fix, it broke some error tests.
10474
10475 2004-07-12  Martin Baulig  <martin@ximian.com>
10476
10477         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
10478         Fixes #61293.
10479
10480 2004-07-14  Martin Baulig  <martin@ximian.com>
10481
10482         * decl.cs, expression.cs, generic.cs: Use a backqoute (`) and not
10483         an exclamation mark (!) for the generic arity to reflect the
10484         latest spec changes; ie. use "System.Collections.Generic.IList`1".
10485
10486 2004-07-13  Martin Baulig  <martin@ximian.com>
10487
10488         * cs-tokenizer.cs (Tokenizer.parse_less_than): Allow array rank
10489         specifiers being part of a type argument.
10490
10491 2004-07-13  Martin Baulig  <martin@ximian.com>
10492
10493         * expression.cs (MemberAccess.ResolveAsTypeStep): Use the full `!'
10494         name for generic types.
10495
10496 2004-07-13  Martin Baulig  <martin@ximian.com>
10497
10498         * assign.cs (Assign.DoResolve): Moved the CS0131 check up a little
10499         bit to fix #60119.
10500
10501 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
10502
10503         * assign.cs (LocalTemporary): Add new argument: is_address,If
10504         `is_address' is true, then the value that we store is the address
10505         to the real value, and not the value itself.
10506         
10507         * ecore.cs (PropertyExpr): use the new local temporary
10508         stuff to allow us to handle X.Y += z (where X is a struct)
10509
10510 2004-07-08  Martin Baulig  <martin@ximian.com>
10511
10512         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
10513         not always return, just like we're doing in Using.Resolve().
10514
10515 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
10516
10517         * cs-parser.jay (fixed_statement): flag this as Pinned.
10518
10519 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
10520
10521         * typemanager.cs (TypeManager): Removed MakePinned method, this
10522         mechanism is replaced with the .NET 2.x compatible mechanism of
10523         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
10524
10525         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
10526         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
10527         `IsFixed' property which has a different meaning.
10528
10529 2004-07-02  Raja R Harinath  <rharinath@novell.com>
10530
10531         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
10532         visible from inside a nested class, not just the names of the
10533         immediately enclosing class.
10534         Fix for bug #60730.
10535
10536 2004-06-24  Raja R Harinath  <rharinath@novell.com>
10537
10538         * expression.cs (BetterConversion): Remove buggy special-case
10539         handling of "implicit constant expression conversions".  At this
10540         point, we already know that the conversion is possible -- we're
10541         only checking to see which is better.
10542
10543 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10544
10545         * cs-parser.jay: Added error CS0210 test.
10546
10547 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10548
10549         * cs-parser.jay: Added error CS0134 test.
10550
10551 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10552
10553         Fix bug #52507
10554         * cs-parser.jay: Added error CS0145 test.
10555
10556 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10557
10558         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
10559
10560 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
10561         
10562         * expression.cs (StackAlloc.Resolve): The argument may not
10563         be a constant; deal with this case.
10564         
10565 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
10566
10567         * attribute.cs (IndexerName_GetIndexerName): Renamed to
10568         GetIndexerAttributeValue.
10569         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
10570
10571         * class.cs (Indexer.Define): Added error tests for CS0415,
10572         CS0609.
10573
10574 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
10575
10576         * attribute.cs (Attribute.Resolve): Keep field code in sync with
10577         property code.
10578
10579 2004-06-23  Martin Baulig  <martin@ximian.com>
10580
10581         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
10582         neither return nor throw, reset the barrier as well.  Fixes #60457.
10583
10584 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
10585
10586         * class.cs : EventAttributes is now set to None by default.
10587           This fixes bug #60459.
10588
10589 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
10590
10591         Fix bug #60219
10592         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
10593         Don't throw exception but return null (it's sufficient now).
10594
10595 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
10596
10597         * typemanager.cs (GetArgumentTypes): Faster implementation.
10598
10599 2004-06-18  Martin Baulig  <martin@ximian.com>
10600
10601         * attribute.cs (Attribute.Resolve): Check whether we're an
10602         EmptyCast which a Constant child.  Fixes #60333.
10603
10604 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
10605
10606         * statement.cs (EmitCollectionForeach): Account for the fact that
10607         not all valuetypes are in areas which we can take the address of.
10608         For these variables, we store to a temporary variable. Also, make
10609         sure that we dont emit a `callvirt' on a valuetype method.
10610
10611 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10612
10613         * expression.cs (StackAlloc.DoReSolve): Added test for
10614         negative parameter (CS0247).
10615
10616 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10617
10618         Fix bug #59792
10619         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
10620
10621 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10622
10623         Fix bug #59781
10624         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
10625         ulong.
10626
10627 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
10628
10629         Fix bug #58254 & cs1555.cs, cs1556.cs
10630         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
10631
10632 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
10633
10634         * cs-parser.jay: Added error CS1669 test for indexers.
10635
10636 2004-06-18  Martin Baulig  <martin@ximian.com>
10637
10638         * generics.cs (GenericMethod.ctor): Don't take an Attributes
10639         argument.  Fixes #60441.
10640
10641 2004-06-16  Ben Maurer  <bmaurer@ximian.com>
10642         * ecore.cs (MethodGroupExpr.Name): Revert Martin's patch.
10643         The name needs to have the actual name of the method in order
10644         for other tests (such as the one in OverloadResolve for Invoke
10645         on a delegate) to work. As well, it does not really help
10646         error reporting because the method group had multiple methods.
10647         * Makefile: Remove MCS_DEBUG, you can enable with the DEBUG_FLAGS.
10648         Make profiling work.
10649         
10650 2004-06-13  Martin Baulig  <martin@ximian.com>
10651
10652         * cs-parser.jay: Don't allow generic attributes.
10653
10654 2004-06-13  Martin Baulig  <martin@ximian.com>
10655
10656         * class.cs (MemberBase.DoDefineBase): New protected method.
10657         (MemberBase.DoDefine): Compute the `flags' in the new
10658         DoDefineBase() which must be called first.
10659         (Method.Define): Call DoDefineBase() first so we have the flags
10660         when defining the generic method.
10661
10662         * cs-parser.jay (interface_method_declaration): Support generic methods.
10663
10664 2004-06-13  Martin Baulig  <martin@ximian.com>
10665
10666         * decl.cs (TypeName): Removed.
10667         (MemberName): Removed TypeName and MemberNow; now we just have
10668         MemberName.
10669
10670         * cs-parser.jay: Don't distinguish between type arguments and type
10671         parameters in the grammar and simplified the rules a bit.  The
10672         reduce/reduce conflicts are now gone (except the one we inherited
10673         from mcs).
10674
10675 2004-06-11  Martin Baulig  <martin@ximian.com>
10676
10677         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
10678         call this twice: for params and varargs methods.
10679
10680 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
10681
10682         * class.cs:
10683         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
10684
10685 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
10686
10687         * attribute.cs (Attribute.GetValidTargets): Made public.
10688
10689         * class.cs: 
10690         (AbstractPropertyEventMethod): New class for better code sharing.
10691         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
10692         CS1667 report.
10693         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
10694
10695 2004-06-09  Martin Baulig  <martin@ximian.com>
10696
10697         * cs-parser.jay: Removed a reduce/reduce conflict.
10698
10699 2004-06-03  Martin Baulig  <martin@ximian.com>
10700
10701         * generic.cs (ConstructedType.GetMemberAccess): Renamed to
10702         GetSimpleName() and return a SimpleName.
10703
10704         * ecore.cs (SimpleName.Arguments): New public field.
10705         (SimpleName): Added overloaded ctor which takes an additional
10706         TypeArguments argument.
10707         (SimpleName.SimpleNameResolve): Added support for generic methods.
10708         (MethodGroupExpr.ResolveGeneric): New public method.  The code was
10709         formerly in MemberAccess.DoResolve(), but we also need it in
10710         SimpleNameResolve().
10711
10712         * expression.cs (MemberAccess.DoResolve): Use the new
10713         MethodGroupExpr.ResolveGeneric().       
10714
10715 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10716
10717         * decl.cs: If possible, use lookuptypedirect here. We can only do
10718         this if there is no `.' after the namespace. Avoids using
10719         LookupType, which does lots of slow processing.
10720         (FindNestedType) New method, does what it says :-).
10721         * namespace.cs: use LookupTypeDirect.
10722         * rootcontext.cs: use membercache, if possible.
10723         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
10724
10725 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10726
10727         * expression.cs:
10728         According to the spec, 
10729
10730         In a member access of the form E.I, if E is a single identifier,
10731         and if the meaning of E as a simple-name (§7.5.2) is a constant,
10732         field, property, localvariable, or parameter with the same type as
10733         the meaning of E as a type-name (§3.8), then both possible
10734         meanings of E are permitted.
10735
10736         We did not check that E as a simple-name had the same type as E as
10737         a type name.
10738
10739         This trivial check gives us 5-7% on bootstrap time.
10740
10741 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10742
10743         * expression.cs (Invocation.OverloadResolve): Avoid the
10744         use of hashtables and boxing here by allocating on demand.
10745
10746 2004-05-30  Martin Baulig  <martin@ximian.com>
10747
10748         * rootcontext.cs (RootContext.LookupType): Don't cache things if
10749         we're doing a silent lookup.  Don't try to lookup nested types in
10750         TypeManager.object_type (thanks to Ben Maurer).
10751
10752 2004-05-30  Martin Baulig  <martin@ximian.com>
10753
10754         Committing a patch from Ben Maurer.
10755
10756         * rootcontext.cs (RootContext.LookupType): Cache negative results.
10757
10758 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10759
10760         * convert.cs: add a trivial cache for overload operator resolution.
10761
10762 2004-05-31  Marek Safar  <marek.safar@seznam.cz>
10763
10764         * attribute.cs
10765         (AttributeTester.GetObsoleteAttribute): Returns instance of
10766         ObsoleteAttribute when type is obsolete.
10767
10768         * class.cs
10769         (TypeContainer.VerifyObsoleteAttribute): Override.
10770         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
10771         (MethodCode.VerifyObsoleteAttribute): Override.
10772         (MemberBase.VerifyObsoleteAttribute): Override.
10773
10774         * decl.cs
10775         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
10776         and report proper error.
10777
10778         *delegate.cs
10779         (Delegate.VerifyObsoleteAttribute): Override.
10780
10781         * ecore.cs
10782         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
10783         and report proper error.
10784         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
10785
10786         * enum.cs
10787         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
10788         and enum member.
10789
10790         * expression.cs
10791         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
10792         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
10793         Added test for ObsoleteAttribute.
10794
10795         * statement.cs
10796         (Catch): Derived from Statement.
10797
10798 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10799
10800         * decl.cs: If possible, use lookuptypedirect here. We can only do
10801         this if there is no `.' after the namespace. Avoids using
10802         LookupType, which does lots of slow processing.
10803         (FindNestedType) New method, does what it says :-).
10804         * namespace.cs: use LookupTypeDirect.
10805         * rootcontext.cs: use membercache, if possible.
10806         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
10807
10808 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10809
10810         * expression.cs:
10811         According to the spec, 
10812
10813         In a member access of the form E.I, if E is a single identifier,
10814         and if the meaning of E as a simple-name (§7.5.2) is a constant,
10815         field, property, localvariable, or parameter with the same type as
10816         the meaning of E as a type-name (§3.8), then both possible
10817         meanings of E are permitted.
10818
10819         We did not check that E as a simple-name had the same type as E as
10820         a type name.
10821
10822         This trivial check gives us 5-7% on bootstrap time.
10823
10824 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
10825
10826         Fixed bug #59071 & cs0160.cs
10827         * statement.cs (Try.Resolve): Check here whether order of catch
10828         clauses matches their dependencies.
10829
10830 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
10831
10832         Fixed bug #58624
10833         * ecore.cs (SimpleName.SimpleNameResolve): Added test for
10834         unsafe type.
10835
10836 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10837
10838         * expression.cs (Invocation.OverloadResolve): Avoid the
10839         use of hashtables and boxing here by allocating on demand.
10840
10841 2004-05-30  Martin Baulig  <martin@ximian.com>
10842
10843         * rootcontext.cs (RootContext.LookupType): Don't cache things if
10844         we're doing a silent lookup.  Don't try to lookup nested types in
10845         TypeManager.object_type (thanks to Ben Maurer).
10846
10847 2004-05-30  Martin Baulig  <martin@ximian.com>
10848
10849         Committing a patch from Ben Maurer.
10850
10851         * rootcontext.cs (RootContext.LookupType): Cache negative results.      
10852
10853 2004-05-29  Martin Baulig  <martin@ximian.com>
10854
10855         * class.cs (IMethodData.ShouldIgnore): New method.
10856
10857         * typemanager.cs (TypeManager.MethodFlags): Don't take a
10858         `Location' argument, we don't need it anywhere.  Use
10859         `IMethodData.ShouldIgnore ()' instead of
10860         `MethodData.GetMethodFlags ()'.
10861         (TypeManager.AddMethod): Removed.
10862         (TypeManager.AddMethod2): Renamed to AddMethod.
10863
10864 2004-05-29  Martin Baulig  <martin@ximian.com>
10865
10866         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
10867
10868         * convert.cs (Convert.ImplicitReferenceConversion): If we're
10869         converting from a class type S to an interface type and we already
10870         have an object on the stack, don't box it again.  Fixes #52578.
10871
10872 2004-05-29  Martin Baulig  <martin@ximian.com>
10873
10874         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
10875         Added support for `params' parameters.  Fixes #59267.
10876
10877 2004-05-29  Martin Baulig  <martin@ximian.com>
10878
10879         * literal.cs (NullPointer): Provide a private .ctor which sets
10880         `type' to TypeManager.object_type.  Fixes #59048.
10881
10882 2004-05-29  Martin Baulig  <martin@ximian.com>
10883
10884         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
10885         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
10886
10887         * ecore.cs (EventExpr.instance_expr): Make the field private.
10888
10889 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
10890
10891         Fixed bug #50080 & cs0214-2.cs
10892         * expression.cs (Cast.DoResolve): Check unsafe context here.
10893         
10894         * statement.cs (Resolve.DoResolve): Likewise.
10895
10896 2004-05-26  Martin Baulig  <martin@ximian.com>
10897
10898         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
10899
10900         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
10901         (RootContext.LookupType): Pass down the `silent' flag.
10902
10903 2004-05-25  Martin Baulig  <martin@ximian.com>
10904
10905         * expression.cs
10906         (MethodGroupExpr.IdenticalTypeName): New public property.
10907         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
10908         expression actually refers to a type.
10909
10910 2004-05-25  Martin Baulig  <martin@ximian.com>
10911
10912         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
10913         for #56176 and made it actually work.
10914
10915 2004-05-25  Martin Baulig  <martin@ximian.com>
10916
10917         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
10918         (FieldExpr, PropertyExpr): Override and implement
10919         CacheTemporaries.  Fixes #52279.
10920
10921 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
10922
10923         * location.cs: In the new compiler listing a file twice is a
10924         warning, not an error.
10925
10926 2004-05-24  Martin Baulig  <martin@ximian.com>
10927
10928         * enum.cs (Enum.DefineType): For the `BaseType' to be a
10929         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
10930
10931 2004-05-24  Martin Baulig  <martin@ximian.com>
10932
10933         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
10934         walking the `using' list.  Fixes #53921.
10935
10936 2004-05-24  Martin Baulig  <martin@ximian.com>
10937
10938         * const.cs (Const.LookupConstantValue): Added support for
10939         EmptyCast's; fixes #55251.
10940
10941 2004-05-24  Martin Baulig  <martin@ximian.com>
10942
10943         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
10944         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
10945         which does the CS0135 check.  The reason is that we first need to
10946         check whether the variable actually exists.
10947
10948 2004-05-24  Martin Baulig  <martin@ximian.com>
10949
10950         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
10951         than RootContext.LookupType() to find the explicit interface
10952         type.  Fixes #58584.
10953
10954 2004-05-24  Raja R Harinath  <rharinath@novell.com>
10955
10956         * Makefile: Simplify.  Use executable.make.
10957         * mcs.exe.sources: New file.  List of sources of mcs.exe.
10958
10959 2004-05-24  Anders Carlsson  <andersca@gnome.org>
10960
10961         * decl.cs:
10962         * enum.cs:
10963         Use the invariant culture when doing String.Compare for CLS case
10964         sensitivity.
10965         
10966 2004-05-23  Martin Baulig  <martin@ximian.com>
10967
10968         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
10969         don't have any dots.  Fixes #52622, added cs0246-8.cs.
10970
10971         * namespace.cs (NamespaceEntry.Lookup): Likewise.
10972
10973 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
10974
10975         * class.cs (MemberBase.Define): Reuse MemberType member for 
10976         resolved type. Other methods can use it too.
10977
10978 2004-05-23  Martin Baulig  <martin@ximian.com>
10979
10980         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
10981         the variable also exists in the current block (otherwise, we need
10982         to report a CS0103).  Fixes #58670.
10983
10984 2004-05-23  Martin Baulig  <martin@ximian.com>
10985
10986         * flowanalysis.cs (Reachability.Reachable): Compute this
10987         on-the-fly rather than storing it as a field.
10988
10989 2004-05-23  Martin Baulig  <martin@ximian.com>
10990
10991         * flowanalysis.cs (Reachability.And): Manually compute the
10992         resulting `barrier' from the reachability.      
10993        
10994 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
10995
10996         Fix bug #57835
10997         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
10998         instance of ObsoleteAttribute when symbol is obsolete.
10999
11000         * class.cs
11001         (IMethodData): Extended interface for ObsoleteAttribute support.
11002
11003 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
11004
11005         * attribute.cs: Fix bug #55970
11006
11007 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
11008
11009         Fix bug #52705
11010         * attribute.cs
11011         (GetObsoleteAttribute): New method. Creates the instance of
11012         ObsoleteAttribute.
11013         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
11014         ObsoleteAttribute when member is obsolete.
11015         (AttributeTester.Report_ObsoleteMessage): Common method for
11016         Obsolete error/warning reporting.
11017
11018         * class.cs
11019         (TypeContainer.base_classs_type): New member for storing parent type.
11020
11021         * decl.cs
11022         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
11023         for this MemberCore.
11024
11025 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
11026
11027         * attribute.cs, const.cs: Fix bug #58590
11028
11029 2004-05-21  Martin Baulig  <martin@ximian.com>
11030
11031         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
11032         out parameters if the end of the method is unreachable.  Fixes
11033         #58098. 
11034
11035 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
11036
11037         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
11038         Hari was right, why extra method.
11039
11040 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
11041
11042         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
11043
11044 2004-05-20  Martin Baulig  <martin@ximian.com>
11045
11046         * delegate.cs: Convert this file to Unix mode - like the original
11047         version in mcs is.
11048
11049 2004-05-20  Martin Baulig  <martin@ximian.com>
11050
11051         * attribute.cs: Convert this file to Unix mode - like the original
11052         version in mcs is.
11053
11054 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
11055
11056        Fix bug #58688 (MCS does not report error when the same attribute
11057        is assigned twice)
11058
11059        * attribute.cs (Attribute.Emit): Distinction between null and default.
11060
11061 2004-05-19  Raja R Harinath  <rharinath@novell.com>
11062
11063        * cs-parser.jay (attribute): Create a GlobalAttribute for the case
11064        of a top-level attribute without an attribute target.
11065        * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
11066        Make non-static.
11067        (Attribute.Conditional_GetConditionName), 
11068        (Attribute.Obsolete_GetObsoleteMessage): Update.
11069        (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
11070        part of ScanForIndexerName.
11071        (Attribute.CanIgnoreInvalidAttribute): New function.
11072        (Attribute.ScanForIndexerName): Move to ...
11073        (Attributes.ScanForIndexerName): ... here.
11074        (Attributes.Attrs): Rename from now-misnamed AttributeSections.
11075        (Attributes.Search): New internal variant that can choose not to
11076        complain if types aren't resolved.  The original signature now
11077        complains.
11078        (Attributes.GetClsCompliantAttribute): Use internal variant, with
11079        complaints suppressed.
11080        (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
11081        only if it not useful.
11082        (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
11083        top-level for attributes that are shared between the assembly
11084        and a top-level class.
11085        * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
11086        * class.cs: Update to reflect changes.
11087        (DefineIndexers): Fuse loops.
11088        * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
11089        a couple more variants of attribute names.
11090
11091 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
11092
11093         Fix bug #52585 (Implemented explicit attribute declaration)
11094
11095         * attribute.cs:
11096         (Attributable.ValidAttributeTargets): New abstract method. It gets
11097         list of valid attribute targets for explicit target declaration.
11098         (Attribute.Target): It holds target itself.
11099         (AttributeSection): Removed.
11100         (Attribute.CheckTargets): New method. It checks whether attribute
11101         target is valid for the current element.
11102
11103         * class.cs:
11104         (EventProperty): New class. For events that are declared like
11105         property (with add and remove accessors).
11106         (EventField): New class. For events that are declared like field.
11107         class.cs
11108
11109         * cs-parser.jay: Implemented explicit attribute target declaration.
11110
11111         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
11112         Override ValidAttributeTargets.
11113
11114         * parameter.cs:
11115         (ReturnParameter): Class for applying custom attributes on 
11116         the return type.
11117         (ParameterAtribute): New class. Class for applying custom
11118         attributes on the parameter type.
11119
11120 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
11121
11122         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
11123         definitions. 
11124
11125         (Method): Allow UNSAFE here.
11126
11127         * modifiers.cs: Support unsafe reporting.
11128
11129 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
11130
11131         * decl.cs: Fix bug #58478.
11132
11133 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11134
11135         * statement.cs: When checking for unreachable code on an EmptyStatement,
11136         set the location. Fixes bug #58488.
11137
11138 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
11139
11140         * driver.cs: Add -pkg handling.
11141
11142         From Gonzalo: UseShelLExecute=false
11143
11144 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
11145
11146         * attribute.cs:
11147         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
11148         for attribute.
11149         (Attribute.IsClsCompliaceRequired): Moved to base for better
11150         accesibility.
11151         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
11152         when attribute is AttributeUsageAttribute.
11153         (Attribute.GetValidTargets): Simplified.
11154         (Attribute.GetAttributeUsage): New method returns AttributeUsage
11155         attribute for this type.
11156         (Attribute.ApplyAttributes): Method renamed to Emit and make
11157         non-static.
11158         (GlobalAttributeSection): New class for special handling of global
11159         attributes (assembly, module).
11160         (AttributeSection.Emit): New method.
11161
11162         * class.cs: Implemented Attributable abstract methods.
11163         (MethodCore.LabelParameters): Moved to Parameter class.
11164         (Accessor): Is back simple class.
11165         (PropertyMethod): Implemented Attributable abstract class.
11166         (DelegateMethod): Implemented Attributable abstract class.
11167         (Event): New constructor for disctintion between normal Event
11168         and Event with accessors.
11169
11170         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
11171
11172         * codegen.cs, const.cs, decl.cs, delegate.cs:
11173         (CommonAssemblyModulClass): Implemented Attributable abstract class
11174         and simplified.
11175
11176         * enum.cs: Implement IAttributeSupport interface.
11177         (EnumMember): New class for emum members. Implemented Attributable
11178         abstract class
11179
11180         * parameter.cs:
11181         (ParameterBase): Is abstract.
11182         (ReturnParameter): New class for easier [return:] attribute handling.
11183
11184         * typemanager.cs: Removed builder_to_attr.
11185
11186 2004-05-11  Raja R Harinath  <rharinath@novell.com>
11187
11188         Fix bug #57151.
11189         * attribute.cs (Attribute.GetPositionalValue): New function.
11190         * class.cs (TypeContainer.VerifyMembers): New function.
11191         (TypeContainer.Emit): Use it.
11192         (ClassOrStruct): New base class for Class and Struct.
11193         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
11194         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
11195         class.
11196         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
11197         then each non-static field should have a FieldOffset attribute.
11198         Otherwise, none of the fields should have a FieldOffset attribute.
11199         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
11200         and FieldOffset attributes.
11201         * typemanager.cs (TypeManager.struct_layout_attribute_type)
11202         (TypeManager.field_offset_attribute_type): New core types.
11203         (TypeManager.InitCoreTypes): Initialize them.
11204
11205 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
11206
11207         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
11208         Return correct type.
11209         From bug #58270.
11210
11211 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
11212
11213         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
11214         be implicitly converted to ulong.
11215         
11216         * expression.cs: The logic for allowing operator &, | and ^ worked
11217         was wrong, it worked before because we did not report an error in
11218         an else branch.  Fixes 57895.
11219
11220         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
11221         allow volatile fields to be reference types.
11222
11223 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
11224
11225         * driver.cs: Add support for /debug-
11226
11227 2004-05-07  Raja R Harinath  <rharinath@novell.com>
11228
11229         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
11230         Add a 'complain' parameter to silence errors.
11231         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
11232         silently overlooked type-resolutions.
11233         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
11234         to reflect changes.
11235         (Attributes.Search): New function.
11236         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
11237         (Attributes.GetAttributeFullName): Remove hack.
11238         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
11239         Update to reflect changes.
11240         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
11241         Use Attributes.Search instead of nested loops.
11242
11243 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
11244
11245         * decl.cs:
11246         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
11247         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
11248         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
11249
11250         * report.cs: (Report.Warning): Renamed to Warning_T because of
11251         parameter collision.
11252
11253 2004-05-05  Raja R Harinath  <rharinath@novell.com>
11254
11255         * expression.cs (MemberAccess.ResolveMemberAccess):
11256         Exit with non-zero status after Report.Error.
11257         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
11258         Likewise.
11259         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
11260
11261 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
11262
11263         * support.cs: Don't hang when the file is empty.
11264
11265 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
11266
11267         * support.cs: In SeekableStreamReader, compute the preamble size of the
11268           underlying stream. Position changes should take into account that initial
11269           count of bytes.
11270
11271 2004-05-03  Todd Berman  <tberman@sevenl.net>
11272
11273         * driver.cs: remove unused GetSysVersion function.
11274
11275 2004-05-03  Todd Berman  <tberman@sevenl.net>
11276
11277         * driver.cs: Remove the hack from saturday, as well as the hack
11278         from jackson (LoadAssemblyFromGac), also adds the CWD to the
11279         link_paths to get that bit proper.
11280
11281 2004-05-01  Todd Berman  <tberman@sevenl.net>
11282
11283         * driver.cs: Try a LoadFrom before a Load, this checks the current
11284         path. This is currently a bug in mono that is be fixed, however, this
11285         provides a workaround for now. This will be removed when the bug
11286         is fixed.
11287
11288 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
11289
11290         * CryptoConvert.cs: Updated to latest version. Fix issue with 
11291         incomplete key pairs (#57941).
11292
11293 2004-05-01  Todd Berman  <tberman@sevenl.net>
11294
11295         * driver.cs: Remove '.' from path_chars, now System.* loads properly
11296         from the GAC
11297
11298 2004-04-30  Jackson Harper  <jackson@ximian.com>
11299
11300         * codegen.cs: Open keys readonly.
11301         
11302 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11303
11304         * typemanager.cs: don't report cyclic struct layout when a struct
11305         contains 2 or more fields of the same type. Failed for Pango.AttrShape
11306         which has 2 Pango.Rectangle fields.
11307
11308 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11309
11310         * expression.cs: Handle IntPtr comparisons with IL code
11311         rather than a method call.
11312
11313 2004-04-29  Martin Baulig  <martin@ximian.com>
11314
11315         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
11316         the list of PropertyInfo's in class hierarchy and find the
11317         accessor.  Fixes #56013.
11318
11319 2004-04-29  Martin Baulig  <martin@ximian.com>
11320
11321         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
11322
11323 2004-04-29  Martin Baulig  <martin@ximian.com>
11324
11325         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
11326
11327         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
11328
11329 2004-04-29  Martin Baulig  <martin@ximian.com>
11330
11331         * class.cs (ConstructorInitializer.Resolve): Check whether the
11332         parent .ctor is accessible.  Fixes #52146.
11333
11334 2004-04-29  Martin Baulig  <martin@ximian.com>
11335
11336         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
11337
11338         * statement.cs (Using.EmitLocalVariableDecls): Use
11339         TypeManager.idisposable_type, not typeof (IDisposable).
11340         (Foreach.EmitCollectionForeach): Added support for valuetypes.
11341
11342 2004-04-29  Martin Baulig  <martin@ximian.com>
11343
11344         * class.cs (Event.Define): Don't emit the field and don't set
11345         RTSpecialName and SpecialName for events on interfaces.  Fixes
11346         #57703. 
11347
11348 2004-04-29  Raja R Harinath  <rharinath@novell.com>
11349
11350         Refactor Attribute.ApplyAttributes.
11351         * attribute.cs (Attributable): New base class for objects that can
11352         have Attributes applied on them.
11353         (Attribute): Make AttributeUsage fields public.
11354         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
11355         (Attribute.IsInternalCall): New property.
11356         (Attribute.UsageAttr): Convert to a public read-only property.
11357         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
11358         (Attribute.ResolveType, Attribute.Resolve)
11359         (Attribute.ScanForIndexerName): Update to reflect changes.
11360         (Attribute.CheckAttributeTarget): Re-format.
11361         (Attribute.ApplyAttributes): Refactor, to various
11362         Attributable.ApplyAttributeBuilder methods.
11363         * decl.cs (MemberCore): Make Attributable.
11364         * class.cs (Accessor): Make Attributable.
11365         (MethodData.ApplyAttributes): Use proper attribute types, not
11366         attribute names.
11367         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
11368         (TypeContainer.ApplyAttributeBuilder)
11369         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
11370         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
11371         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
11372         (Operator.ApplyAttributeBuilder): New factored-out methods.
11373         * const.cs (Const.ApplyAttributeBuilder): Likewise.
11374         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
11375         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
11376         * parameter.cs (ParameterBase): New Attributable base class
11377         that can also represent Return types.
11378         (Parameter): Update to the changes.
11379
11380 2004-04-29  Jackson Harper  <jackson@ximian.com>
11381
11382         * driver.cs: Prefer the corlib system version when looking for
11383         assemblies in the GAC. This is still a hack, but its a better hack
11384         now.
11385         
11386 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
11387
11388         * decl.cs, enum.cs: Improved error 3005 reporting.
11389   
11390         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
11391         (related_symbols): New private member for list of symbols
11392         related to reported error/warning.
11393         
11394         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
11395
11396 2004-04-29  Martin Baulig  <martin@ximian.com>
11397
11398         * ecore.cs (Expression.Constantify): If we're an enum and
11399         TypeManager.TypeToCoreType() doesn't give us another type, use
11400         t.UnderlyingSystemType.  Fixes #56178.  
11401
11402 2004-04-29  Martin Baulig  <martin@ximian.com>
11403
11404         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
11405         interfaces and for each interface, only add members directly
11406         declared in that interface.  Fixes #53255.
11407
11408 2004-04-28  Martin Baulig  <martin@ximian.com>
11409
11410         * expression.cs (ConditionalLogicalOperator): Use a temporary
11411         variable for `left' to avoid that we evaluate it more than once;
11412         bug #52588.
11413
11414 2004-04-28  Martin Baulig  <martin@ximian.com>
11415
11416         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
11417         `void[]' (CS1547).
11418
11419 2004-04-28  Martin Baulig  <martin@ximian.com>
11420
11421         * statement.cs (LocalInfo.Resolve): Check whether the type is not
11422         void (CS1547).
11423
11424         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
11425         whether the type is not void (CS1547).
11426
11427 2004-04-28  Martin Baulig  <martin@ximian.com>
11428
11429         * expression.cs (Unary.DoResolveLValue): Override this and report
11430         CS0131 for anything but Operator.Indirection.
11431
11432 2004-04-28  Martin Baulig  <martin@ximian.com>
11433
11434         Committing a patch from Ben Maurer; see bug #50820.
11435
11436         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
11437         check for classes.
11438
11439         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
11440         classes.        
11441
11442 2004-04-28  Martin Baulig  <martin@ximian.com>
11443
11444         Committing a patch from Ben Maurer; see bug #50820.
11445
11446         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
11447         check for classes.
11448
11449         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
11450         classes.        
11451
11452 2004-04-28  Martin Baulig  <martin@ximian.com>
11453
11454         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
11455         (Block.AddLabel): Call DoLookupLabel() to only search in the
11456         current block.
11457
11458 2004-04-28  Martin Baulig  <martin@ximian.com>
11459
11460         * cfold.cs (ConstantFold.BinaryFold): Added special support for
11461         comparing StringConstants and NullLiterals in Equality and Inequality.
11462
11463 2004-04-28  Jackson Harper  <jackson@ximian.com>
11464
11465         * driver.cs: Attempt to load referenced assemblies from the
11466         GAC. This is the quick and dirty version of this method that
11467         doesnt take into account versions and just takes the first
11468         canidate found. Will be good enough for now as we will not have more
11469         then one version installed into the GAC until I update this method.
11470
11471 2004-04-28  Martin Baulig  <martin@ximian.com>
11472
11473         * typemanager.cs (TypeManager.CheckStructCycles): New public
11474         static method to check for cycles in the struct layout.
11475
11476         * rootcontext.cs (RootContext.PopulateTypes): Call
11477         TypeManager.CheckStructCycles() for each TypeContainer.
11478         [Note: We only need to visit each type once.]
11479
11480 2004-04-28  Martin Baulig  <martin@ximian.com>
11481
11482         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
11483
11484         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
11485         success and added `out object value'.  Use a `bool resolved' field
11486         to check whether we've already been called rather than
11487         `ConstantValue != null' since this breaks for NullLiterals.
11488
11489 2004-04-28  Raja R Harinath  <rharinath@novell.com>
11490
11491         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
11492         setting of this flag, since the 'set' method may be non-public.
11493
11494 2004-04-28  Raja R Harinath  <rharinath@novell.com>
11495
11496         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
11497         check on current_vector.Block.
11498
11499 2004-04-27  Martin Baulig  <martin@ximian.com>
11500
11501         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
11502         a field initializer.  Fixes #56459.
11503
11504 2004-04-27  Martin Baulig  <martin@ximian.com>
11505
11506         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
11507         we're not attempting to use an indexer.  Fixes #52154.
11508
11509 2004-04-27  Martin Baulig  <martin@ximian.com>
11510
11511         * statement.cs (Return): Don't create a return label if we don't
11512         need it; reverts my change from January 20th.  Thanks to Ben
11513         Maurer for this.
11514
11515 2004-04-27  Martin Baulig  <martin@ximian.com>
11516
11517         According to the spec, `goto' can only leave a nested scope, but
11518         never enter it.
11519
11520         * statement.cs (Block.LookupLabel): Only lookup in the current
11521         block, don't recurse into parent or child blocks.
11522         (Block.AddLabel): Check in parent and child blocks, report
11523         CS0140/CS0158 if we find a duplicate.
11524         (Block): Removed this indexer for label lookups.
11525         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
11526         this already does the error reporting for us.
11527
11528         * flowanalysis.cs
11529         (FlowBranching.UsageVector.Block): New public variable; may be null.
11530         (FlowBranching.CreateSibling): Added `Block' argument.
11531         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
11532         label for the target of a `goto' and check whether we're not
11533         leaving a `finally'.
11534
11535 2004-04-27  Martin Baulig  <martin@ximian.com>
11536
11537         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
11538         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
11539         just for returns).
11540
11541 2004-04-27  Martin Baulig  <martin@ximian.com>
11542
11543         * statement.cs (Block.AddLabel): Also check for implicit blocks
11544         and added a CS0158 check.
11545
11546 2004-04-27  Martin Baulig  <martin@ximian.com>
11547
11548         * flowanalysis.cs (FlowBranchingLoop): New class.
11549         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
11550         UsageVector's instead of an ArrayList.
11551         (FlowBranching.Label): Likewise.
11552         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
11553         (FlowBranching.AddBreakVector): New method.
11554
11555 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
11556
11557         * attribute.cs: Small regression fix: only convert the type if we
11558         the type is different, fixes System.Drawing build.
11559
11560 2004-04-27  Martin Baulig  <martin@ximian.com>
11561
11562         * attribute.cs (Attribute.Resolve): If we have a constant value
11563         for a named field or property, implicity convert it to the correct
11564         type.
11565
11566 2004-04-27  Raja R Harinath  <rharinath@novell.com>
11567
11568         * statement.cs (Block.Block): Implicit blocks share
11569         'child_variable_names' fields with parent blocks.
11570         (Block.AddChildVariableNames): Remove.
11571         (Block.AddVariable): Mark variable as "used by a child block" in
11572         every surrounding block.
11573         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
11574         been used in a child block, complain about violation of "Invariant
11575         meaning in blocks" rule.
11576         * cs-parser.jay (declare_local_variables): Don't use
11577         AddChildVariableNames.
11578         (foreach_statement): Don't create an implicit block: 'foreach'
11579         introduces a scope.
11580
11581 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
11582
11583         * convert.cs (ImplicitNumericConversion): 0 is also positive when
11584         converting from 0L to ulong.  Fixes 57522.
11585
11586 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
11587
11588         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
11589         derived class hides via 'new' keyword field from base class (test-242.cs).
11590         TODO: Handle this in the more general way.
11591         
11592         * class.cs (CheckBase): Ditto.
11593
11594 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
11595
11596         * decl.cs (caching_flags): New member for storing cached values
11597         as bit flags.
11598         (MemberCore.Flags): New enum where bit flags for caching_flags
11599         are defined.
11600         (MemberCore.cls_compliance): Moved to caching_flags.
11601         (DeclSpace.Created): Moved to caching_flags.
11602
11603         * class.cs: Use caching_flags instead of DeclSpace.Created
11604         
11605 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
11606
11607         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
11608         if we are only a derived class, not a nested class.
11609
11610         * typemanager.cs: Same as above, but do this at the MemberLookup
11611         level (used by field and methods, properties are handled in
11612         PropertyExpr).   Allow for the qualified access if we are a nested
11613         method. 
11614
11615 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
11616
11617         * class.cs: Refactoring.
11618         (IMethodData): New inteface; Holds links to parent members
11619         to avoid member duplication (reduced memory allocation).
11620         (Method): Implemented IMethodData interface.
11621         (PropertyBase): New inner classes for get/set methods.
11622         (PropertyBase.PropertyMethod): Implemented IMethodData interface
11623         (Event): New inner classes for add/remove methods.
11624         (Event.DelegateMethod): Implemented IMethodData interface.
11625
11626         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
11627         EmitContext (related to class.cs refactoring).
11628
11629 2004-04-21  Raja R Harinath  <rharinath@novell.com>
11630
11631         * delegate.cs (Delegate.VerifyApplicability): If the number of
11632         arguments are the same as the number of parameters, first try to
11633         verify applicability ignoring  any 'params' modifier on the last
11634         parameter.
11635         Fixes #56442.
11636
11637 2004-04-08  Martin Baulig  <martin@ximian.com>
11638
11639         Merged latest changes into gmcs.  Please keep this comment in
11640         here, it makes it easier for me to see what changed in MCS since
11641         the last time I merged.
11642
11643 2004-04-16  Raja R Harinath  <rharinath@novell.com>
11644
11645         * class.cs (TypeContainer.AddIndexer): Use
11646         'ExplicitInterfaceName' to determine if interface name was
11647         explicitly specified.  'InterfaceType' is not initialized at this time.
11648         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
11649         Indexers array is already in the required order.  Initialize
11650         'IndexerName' only if there are normal indexers.
11651         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
11652         (TypeContainer.Emit): Emit DefaultMember attribute only if
11653         IndexerName is initialized.
11654         Fixes #56300.
11655
11656 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
11657
11658         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
11659         Fixes #57007
11660
11661 2004-04-15  Raja R Harinath  <rharinath@novell.com>
11662
11663         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
11664         attributes.
11665         Fix for #56456.
11666
11667         * attribute.cs (Attribute.Resolve): Check for duplicate named
11668         attributes.
11669         Fix for #56463.
11670
11671 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
11672
11673         * iterators.cs (MarkYield): track whether we are in an exception,
11674         and generate code accordingly.  Use a temporary value to store the
11675         result for our state.
11676
11677         I had ignored a bit the interaction of try/catch with iterators
11678         since their behavior was not entirely obvious, but now it is
11679         possible to verify that our behavior is the same as MS .NET 2.0
11680
11681         Fixes 54814
11682
11683 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
11684
11685         * iterators.cs: Avoid creating temporaries if there is no work to
11686         do. 
11687
11688         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
11689         Enumerations, use TypeManager.EnumToUnderlying and call
11690         recursively. 
11691
11692         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
11693         bug #57013
11694
11695         (This.Emit): Use EmitContext.EmitThis to emit our
11696         instance variable.
11697
11698         (This.EmitAssign): Ditto.
11699
11700         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
11701         codepaths, we will move all the functionality into
11702         Mono.CSharp.This 
11703
11704         (FieldExpr.EmitAssign): Ditto.
11705
11706         This fixes several hidden bugs that I uncovered while doing a code
11707         review of this today.
11708
11709         * codegen.cs (EmitThis): reworked so the semantics are more clear
11710         and also support value types "this" instances.
11711
11712         * iterators.cs: Changed so that for iterators in value types, we
11713         do not pass the value type as a parameter.  
11714
11715         Initialization of the enumerator helpers is now done in the caller
11716         instead of passing the parameters to the constructors and having
11717         the constructor set the fields.
11718
11719         The fields have now `assembly' visibility instead of private.
11720
11721 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
11722
11723         * expression.cs (Argument.Resolve): Check if fields passed as ref
11724         or out are contained in a MarshalByRefObject.
11725
11726         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
11727         another compiler type.
11728
11729 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
11730
11731         * class.cs (Indexer.Define): use the new name checking method.
11732         Also, return false on an error.
11733         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
11734         (is_identifier_[start/part]_character): make static.
11735
11736 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
11737
11738         * expression.cs (Binary.ResolveOperator): Do no append strings
11739         twice: since we can be invoked more than once (array evaluation)
11740         on the same concatenation, take care of this here.  Based on a fix
11741         from Ben (bug #56454)
11742
11743 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
11744
11745         * codegen.cs: Fix another case where CS1548 must be reported (when 
11746         delay-sign isn't specified and no private is available #56564). Fix
11747         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
11748         error when MCS is used on the MS runtime and we need to delay-sign 
11749         (which seems unsupported by AssemblyBuilder - see #56621).
11750
11751 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
11752
11753         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
11754         (TypeManager.ComputeNamespaces): Faster implementation for
11755         Microsoft runtime.
11756
11757         * compiler.csproj: Updated AssemblyName to mcs.
11758
11759 2004-05-11  Jackson Harper  <jackson@ximian.com>
11760
11761         * Makefile: Preserve MONO_PATH
11762         
11763 2004-05-11  Jackson Harper  <jackson@ximian.com>
11764
11765         * Makefile: Use mono and mcs to build gmcs
11766         
11767 2004-05-03  Miguel de Icaza  <miguel@ximian.com>
11768
11769         * codegen.cs: Add patch from Robert Shade
11770         <rshade@dvsconsulting.com>, use FileAccess.Read on the keyfile, to
11771         sync with mcs.
11772
11773 2004-05-02  Sebastien Pouliot  <sebastien@ximian.com>
11774
11775         * CryptoConvert.cs: Updated to latest version. Fix issue with 
11776         incomplete key pairs (#57941).
11777
11778 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
11779
11780         * codegen.cs: Fix another case where CS1548 must be reported (when 
11781         delay-sign isn't specified and no private is available #56564). Fix
11782         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
11783         error when MCS is used on the MS runtime and we need to delay-sign 
11784         (which seems unsupported by AssemblyBuilder - see #56621).
11785
11786 2004-04-29  Jackson Harper  <jackson@ximian.com>
11787
11788         * Makefile: Set MONO_PATH to use the bootstrap corlib
11789         * driver.cs: Check the GAC for referenced assemblies.
11790                 
11791 2004-04-29  Martin Baulig  <martin@ximian.com>
11792
11793         * Makefile (gmcs.exe): Set MONO_PATH to use `../class/lib/net_2_0'.
11794
11795 2004-04-07  Martin Baulig  <martin@ximian.com>
11796
11797         * expression.cs (Binary.ResolveOperator): Added special case for
11798         Equality/Inequality between a type parameter and a null literal.
11799
11800 2004-04-07  Martin Baulig  <martin@ximian.com>
11801
11802         * convert.cs: Check null literal -> type parameter conversions.
11803
11804 2004-04-07  Martin Baulig  <martin@ximian.com>
11805
11806         * generic.cs (ConstructedType.CheckConstraints): Enforce the
11807         `class' and `struct' constraints.
11808
11809 2004-04-07  Martin Baulig  <martin@ximian.com>
11810
11811         * generic.cs (SpecialConstraint): New public enum.
11812         (Constraints.Resolve): Added support for the `class' and `struct'
11813         constraints.
11814
11815         * cs-parser.jay (type_parameter_constraint): Added support for the
11816         `class' and `struct' constraints.
11817
11818 2004-04-07  Martin Baulig  <martin@ximian.com>
11819
11820         * support.cs (GenericConstraints): Replaced `Types' by
11821         `ClassConstraint' and `InterfaceConstraints'; added
11822         `HasClassConstraint'.   
11823
11824 2004-04-07  Martin Baulig  <martin@ximian.com>
11825
11826         * generic.cs
11827         (Constraints.InterfaceConstraints): New public property.
11828         (Constraints.Types): Make this property public
11829         (TypeParameter): Implement IMemberContainer.
11830         (TypeParameter.Define): Take a `GenericTypeParameterBuilder'
11831         instead of a TypeBuilder/MethodBuilder; pass the interface
11832         constraints to TypeManager.AddTypeParameter().
11833         (TypeParameter.DefineType): Just take an EmitContext and no
11834         TypeBuilder/MethodBuilder.  Use the new public API.
11835
11836         * typemanager.cs (TypeManager.AddTypeParameter): Added
11837         `TypeExpr[]' argument; add the interfaces to the
11838         `builder_to_ifaces' hash.
11839         (TypeManager.LookupMemberContainer): For
11840         GenericTypeParameterBuilders, get the TypeParameter from the
11841         `builder_to_type_param'.
11842         (TypeManager.FindMembers): For GenericTypeParameterBuilders, get
11843         the TypeParameter and call FindMembers on it.
11844
11845 2004-04-07  Martin Baulig  <martin@ximian.com>
11846
11847         * class.cs
11848         (MethodCore.GenericMethod): Moved this field here from Method.
11849         (MethodCore.IsDuplicateImplementation): Take the number of type
11850         parameters into account if we're a generic method.
11851
11852         * expression.cs (Invocation.InferTypeArguments): Don't return true
11853         if `arguments' is null; we still need to check whether we actually
11854         don't need to infer anything in this case.
11855         (MemberAccess): Merged the functionality from GenericMemberAccess
11856         into this class.
11857
11858         * generic.cs (GenericMemberAccess): Removed.
11859
11860 2004-04-05  Martin Baulig  <martin@ximian.com>
11861
11862         * decl.cs (MemberCore): For generic classes, interfaces and
11863         structs, `Name' now includes the number of type parameters
11864         ("Stack!1.Node!1").
11865         (DeclSpace.FindType): Removed the `num_type_args' argument; we now
11866         encode the number of type arguments in the type name.
11867
11868         * expression.cs (Expression.MemberLookup): Removed the
11869         `num_type_args' argument; we now encode the number of type
11870         arguments in the type name.
11871
11872         * ecore.cs (SimpleName): Encode the number of type arguments in
11873         the type name itself.
11874
11875         * generic.cs (ConstructedType): Likewise.
11876
11877         * tree.cs (Tree.RecordDecl): Take a `string' instead of a
11878         `MemberName'; we now include the number of type parameters in the
11879         type name.
11880
11881         * typemanager.cs (TypeManager.CheckGeneric): Removed.
11882         (TypeManager.MemberLookup): Removed the
11883         `num_type_args' argument; we now encode the number of type
11884         arguments in the type name.     
11885
11886 2004-04-03  Martin Baulig  <martin@ximian.com>
11887
11888         * decl.cs (MemberCore.ctor): Take a MemberName instead of a sting.
11889         (MemberCore.MemberName): Moved here from MemberBase.
11890         (DeclSpace.SetParameterInfo): Just take the constraints as an
11891         ArrayList; we already have the type parameters in our
11892         `MemberName'; also do the CS0080 reporting here.
11893
11894         * cs-parser.jay (struct_declaration): Use `member_name' instead of
11895         `IDENTIFIER opt_type_parameter_list'; when constructing our
11896         `MemberName', it'll already include our type parameters.
11897         (class_declaration, interface_declaration): Likewise.
11898         (delegate_declaration): Likewise.
11899         (MakeName): Take a MemberName and return a MemberName.
11900         The following two changes are required to avoid shift/reduce conflicts:
11901         (member_name): Don't include a TypeName anymore; ie. this is now
11902         just 'IDENTIFIER opt_type_parameter_list'.
11903         (property_declaration, event_declaration): Use a
11904         `namespace_or_type_name' instead of a `member_name'.            
11905
11906 2004-04-03  Martin Baulig  <martin@ximian.com>
11907
11908         * decl.cs (MemberName): Renamed to `TypeName' and created a new
11909         `MemberName' class.
11910         (TypeName): Formerly known as MemberName.
11911
11912         * namespace.cs (NamespaceEntry.UsingAlias): Take a `TypeName'
11913         instead of a `MemberName'.
11914
11915         * cs-parser.jay (namespace_or_type_name): Create a TypeName.
11916         (member_name): New rule; create a MemberName.
11917
11918 2004-04-02  Martin Baulig  <martin@ximian.com>
11919
11920         * namespace.cs (NamespaceEntry.VerifyUsing): Added error checking
11921         (CS0305 and CS0308).
11922
11923 2004-04-02  Martin Baulig  <martin@ximian.com>
11924
11925         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Added
11926         support for nested types.
11927
11928 2004-04-02  Martin Baulig  <martin@ximian.com>
11929
11930         * ecore.cs (IAlias): New public interface.
11931         (TypeExpr, TypeExpression): Implement IAlias.
11932         (TypeAliasExpression): New public class.
11933
11934         * namespace.cs (Namespace): Implement IAlias.
11935         (Namespace.Lookup): Return an IAlias instead on an object.
11936         (Namespace.DefineName): Take an IAlias instead of an object.
11937         (NamespaceEntry.AliasEntry.Resolve): Return an IAlias instead of
11938         an object.
11939         (NamespaceEntry.UsingAlias): Take a Membername instead of an
11940         Expression.
11941         (NamespaceEntry.LookupAlias): Return an IAlias instead on an
11942         object.
11943         (NamespaceEntry.Lookup): Likewise.
11944
11945         * rootcontext.cs (RootContext.LookupType): Return a TypeExpr
11946         instead of a Type.      
11947
11948         * decl.cs (DeclSpace): Implement IAlias.
11949         (DeclSpace.LookupAlias): Return an IAlias instead of a string.
11950
11951         * generic.cs (ConstructedType): Improved error checking.
11952
11953 2004-04-02  Martin Baulig  <martin@ximian.com>
11954
11955         * convert.cs: Added type parameter conversions.
11956
11957         * ecore.cs
11958         (UnboxCast.Emit): Emit an `unbox.any' for type params.
11959         (ClassCast.Emit): If the source type is a type parameter, box it.
11960         If the target type is a type parameter, emit an `unbox.any'
11961         instead of a `classcast'.1      
11962
11963 2004-04-01  Martin Baulig  <martin@ximian.com>
11964
11965         * cs-tokenizer.cs (parse_less_than): Allow Token.DOT.
11966
11967 2004-04-01  Martin Baulig  <martin@ximian.com>
11968
11969         * generic.cs (ConstructedType.CheckConstraints): Use
11970         Convert.ImplicitStandardConversionExists(); user-defined implicit
11971         conversions are not allowed according to the spec.
11972
11973 2004-03-30  Martin Baulig  <martin@ximian.com>
11974
11975         * expression.cs (New): Added support for type parameters.
11976
11977         * typemanager.cs
11978         (TypeManager.activator_type): New public static field.
11979         (TypeManager.activator_create_instance): Likewise.
11980
11981 2004-03-30  Martin Baulig  <martin@ximian.com>
11982
11983         * typemanager.cs (TypeManager.HasConstructorConstraint): New
11984         public method.
11985
11986 2004-03-30  Martin Baulig  <martin@ximian.com>
11987
11988         * generic.cs (ConstructedType.CheckConstraints): Actually follow
11989         the spec here: the argument type must be convertible to the
11990         constraints.
11991
11992 2004-03-30  Martin Baulig  <martin@ximian.com>
11993
11994         * generic.cs
11995         (TypeParameter.Define, TypeParameter.DefineMethod): Call
11996         TypeManager.AddTypeParameter().
11997         (ConstructedType.CheckConstraints): Re-enable this and actually
11998         check whether we have a constructor constraint.
11999
12000         * typemanager.cs
12001         (TypeManager.builder_to_type_param): New static field.
12002         (TypeManager.AddTypeParameter): New static method.
12003         (TypeManager.LookupTypeParameter): New public method.
12004
12005 2004-03-30  Martin Baulig  <martin@ximian.com>
12006
12007         * generic.cs (TypeParameter.DefineType): Return a boolean and use
12008         the new API to actually define the constructor constraint.
12009
12010         * typemanager.cs
12011         (TypeManager.new_constraint_attr_type): New static field.
12012         (TypeManager.InitCoreTypes): Initialize it.
12013
12014 2004-03-30  Martin Baulig  <martin@ximian.com>
12015
12016         * generic.cs (Constraints): Completed error checking, use correct
12017         error numbers.
12018
12019 2004-03-29  Martin Baulig  <martin@ximian.com>
12020
12021         * delegate.cs (Delegate.VerifyMethod): Infer type arguments.
12022
12023         * expression.cs (Invocation.InferTypeArguments): Added overloaded
12024         public version which takes a `ParameterData pd' instead of an
12025         `ArrayList args'.
12026
12027 2004-03-29  Martin Baulig  <martin@ximian.com>
12028
12029         * typemanager.cs (TypeManager.IsGenericMethod): Take a MethodBase,
12030         not a MethodInfo.       
12031
12032 2004-03-29  Martin Baulig  <martin@ximian.com>
12033
12034         * expression.cs (Argument.ResolveMethodGroup): If we're a
12035         ConstructedType, call GetMemberAccess() on it.  
12036
12037 2004-03-29  Martin Baulig  <martin@ximian.com>
12038
12039         * class.cs (MethodBase.CheckGenericOverride): New abstract method.
12040         (MethodCore.CheckGenericOverride): When overriding a generic
12041         method, check whether the constraints match.
12042
12043         * support.cs (GenericConstraints): New public interface.
12044         (ParameterData.GenericConstraints): New public method.
12045
12046         * parameter.cs (Parameter.Resolve): Check whether we're a generic
12047         method parameter and compute our constraints if appropriate.
12048         (Parameter.GenericConstraints): New public property.
12049
12050         * generic.cs (Constraints): Implement GenericConstraints.
12051
12052 2004-03-29  Martin Baulig  <martin@ximian.com>
12053
12054         * decl.cs (MemberCache.FindMemberToOverride): Use
12055         `paramTypes [j].Equals (cmpAttrs [j])' instead of `=='.
12056
12057 2004-03-29  Martin Baulig  <martin@ximian.com>
12058
12059         * generic.cs (GenericMethod.Define): Resolve our type parameters.
12060
12061 2004-03-29  Martin Baulig  <martin@ximian.com>
12062
12063         * cs-parser.jay: Report CS0080 instead of -200 ("Constraints are
12064         not allowed on non-generic declarations").
12065
12066 2004-03-29  Martin Baulig  <martin@ximian.com>
12067
12068         * expression.cs (Invocation.InferTypeArguments): Added overloaded
12069         public version of this method.
12070
12071         * class.cs (MethodCore.IsDuplicateImplementation): Use
12072         Invocation.InferTypeArguments() to check this.
12073
12074 2004-03-29  Martin Baulig  <martin@ximian.com>
12075
12076         * convert.cs: Use TypeManager.IsDelegateType() instead of
12077         comparing types correctly.
12078
12079 2004-03-29  Martin Baulig  <martin@ximian.com>
12080
12081         * convert.cs: Use TypeManager.IsSubclassOf() instead of comparing
12082         types directly to make it work for generic instances.
12083
12084         * typemanager.cs (TypeManager.IsSubclassOf): New static method.
12085
12086 2004-03-29  Martin Baulig  <martin@ximian.com>
12087
12088         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Added
12089         support for arrays.     
12090
12091 2004-03-24  Martin Baulig  <martin@ximian.com>
12092
12093         * decl.cs (DeclSpace.FindType): Also use
12094         TypeManager.CheckGeneric() for types from the using clauses.
12095
12096 2004-03-23  Martin Baulig  <martin@ximian.com>
12097
12098         * expression.cs (Invocation.OverloadResolve): Added `bool
12099         may_fail' argument and use it instead of the Location.IsNull() hack.
12100
12101 2004-03-23  Martin Baulig  <martin@ximian.com>
12102
12103         * expression.cs (Invocation.InferType): Use correct type inference
12104         rules here.     
12105
12106 2004-03-23  Martin Baulig  <martin@ximian.com>
12107
12108         * ecore.cs (MethodGroupExpr.Name): Use
12109         TypeManager.CSharpSignature() instead of just the name.
12110
12111         * expression.cs (Invocation.OverloadResolve): Provide better error
12112         reporting.
12113         (Invocation.DoResolve): OverloadResolve() never returns null
12114         without reporting an error, so removed the error -6 reporting here.
12115
12116 2004-03-23  Martin Baulig  <martin@ximian.com>
12117
12118         * typemanager.cs (TypeManager.GetMethodFlags): Fixed the FIXME for
12119         generic methods.
12120
12121         * cs-parser.jay (delegate_declaration): Support generic delegates.
12122
12123         * delegate.cs: Support generic delegates.
12124
12125 2004-03-22  Martin Baulig  <martin@ximian.com>
12126
12127         * expression.cs (Invocation.InferParamsTypeArguments): New static
12128         method; does type inference for params arguments.
12129
12130 2004-03-21  Martin Baulig  <martin@ximian.com>
12131
12132         * typemanager.cs (TypeManager.IsGenericMethod): New public static
12133         method; checks whether a method is a generic method.    
12134
12135         * expression.cs (Invocation.InferTypeArguments): New static method;
12136         infer type arguments for generic method invocation.
12137
12138         * ecore.cs (MethodGroupExpr.HasTypeArguments): New public
12139         property; we set this to true if we're resolving a generic method
12140         invocation and the user specified type arguments, ie. we're not
12141         doing type inference.
12142
12143 2004-03-20  Martin Baulig  <martin@ximian.com>
12144
12145         * class.cs (MethodData.DeclaringType): New public property.
12146         (MethodData.Define): Set DeclaringType here.
12147         (Operator.Define): Use OperatorMethod.MethodData.DeclaringType
12148         instead of OperatorMethodBuilder.DeclaringType.
12149
12150 2004-03-20  Martin Baulig  <martin@ximian.com>
12151
12152         * cs-tokenizer.cs (xtoken): Return a special
12153         Token.DEFAULT_OPEN_PARENS for "`default' followed by open parens".
12154
12155         * cs-parser.jay (default_value_expression): Switch to the new
12156         syntax (14.5.13).
12157
12158 2004-03-19  Martin Baulig  <martin@ximian.com>
12159
12160         * decl.cs (MemberName): New class.  We use this to "construct"
12161         namespace_or_type_name's.
12162
12163         * generics.cs (TypeArguments.GetDeclarations): New public method;
12164         returns the type arguments as a string[] and reports a CS0081 if
12165         one of them is not an identifier.
12166
12167         * class.cs (MemberBase): The .ctor now takes the name as a
12168         MemberName instead of a string.
12169         (MemberBase.ExplicitInterfaceName): Changed type from string to
12170         Expression.
12171         (MemberBase.DoDefine): If we're an explicit implementation, the
12172         InterfaceType may be a generic instance.
12173
12174         * cs-parser.jay (namespace_or_type_name): Return a MemberName.
12175         (namespace_name): Call MemberName.GetName () to transform the
12176         MemberName into a string and ensure we don't have any type
12177         arguments.
12178         (type_name): Call MemberName.GetTypeExpression() to transfrom the
12179         MemberName into an expression.
12180         (method_header): Use namespace_or_type_name instead of member_name.     
12181
12182 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
12183
12184         * rootcontext.cs: Add new types to the boot resolution.
12185
12186         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
12187         MulticastDelegate is not allowed.
12188
12189         * typemanager.cs: Add new types to lookup: System.TypedReference
12190         and ArgIterator.
12191
12192         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
12193         check for TypedReference or ArgIterator, they are not allowed. 
12194
12195         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
12196         makes us properly catch 1510 in some conditions (see bug 56016 for
12197         details). 
12198
12199 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
12200
12201         * CryptoConvert.cs: update from corlib version
12202         with endian fixes.
12203
12204 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
12205
12206         * class.cs (Indexer.Define): Check indexername declaration
12207
12208 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
12209
12210         * attribute.cs (IsClsCompliant): Fixed problem with handling
12211         all three states (compliant, not-compliant, undetected).
12212
12213 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
12214
12215         * attribute.cs (Attribute): Location is now public.
12216         (Resolve): Store resolved arguments (pos_values) in attribute class.
12217         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
12218         (GetClsCompliantAttributeValue): New method that gets
12219         CLSCompliantAttribute value.
12220         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
12221         if exists else null.
12222         (AttributeTester): New class for CLS-Compliant verification routines.
12223
12224         * class.cs (Emit): Add CLS-Compliant verification.
12225         (Method.GetSignatureForError): Implemented.
12226         (Constructor.GetSignatureForError): Implemented
12227         (Constructor.HasCompliantArgs): Returns if constructor has
12228         CLS-Compliant arguments.
12229         (Constructor.Emit): Override.
12230         (Construcor.IsIdentifierClsCompliant): New method; For constructors
12231         is needed to test only parameters.
12232         (FieldBase.GetSignatureForError): Implemented.
12233         (TypeContainer): New member for storing base interfaces.
12234         (TypeContainer.FindMembers): Search in base interfaces too.
12235
12236         * codegen.cs (GetClsComplianceAttribute): New method that gets
12237         assembly or module CLSCompliantAttribute value.
12238         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
12239         for assembly.
12240         (ModuleClass.Emit): Add error 3012 test.
12241
12242         * const.cs (Emit): Override and call base for CLS-Compliant tests.
12243
12244         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
12245         state for all decl types.
12246         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
12247         if CLS-Compliant tests are required.
12248         (IsClsCompliaceRequired): New method. Analyze whether code
12249         must be CLS-Compliant.
12250         (IsExposedFromAssembly): New method. Returns true when MemberCore
12251         is exposed from assembly.
12252         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
12253         value or gets cached value.
12254         (HasClsCompliantAttribute): New method. Returns true if MemberCore
12255         is explicitly marked with CLSCompliantAttribute.
12256         (IsIdentifierClsCompliant): New abstract method. This method is
12257         used to testing error 3005.
12258         (IsIdentifierAndParamClsCompliant): New method. Common helper method
12259         for identifier and parameters CLS-Compliant testing.
12260         (VerifyClsCompliance): New method. The main virtual method for
12261         CLS-Compliant verifications.
12262         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
12263         null. I don't know why is null (too many public members !).
12264         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
12265         and get value of first CLSCompliantAttribute that found.
12266
12267         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
12268         (VerifyClsCompliance): Override and add extra tests.
12269
12270         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
12271         clscheck- disable CLS-Compliant verification event if assembly is has
12272         CLSCompliantAttribute(true).
12273
12274         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
12275         ApllyAttribute is now called in emit section as in the other cases.
12276         Possible future Emit integration.
12277         (IsIdentifierClsCompliant): New override.
12278         (VerifyClsCompliance): New override.
12279         (GetEnumeratorName): Returns full enum name.
12280
12281         * parameter.cs (GetSignatureForError): Implemented.
12282
12283         * report.cs (WarningData): New struct for Warning message information.
12284         (LocationOfPreviousError): New method.
12285         (Warning): New method. Reports warning based on the warning table.
12286         (Error_T): New method. Reports error based on the error table.
12287
12288         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
12289         verifications are done here.
12290
12291         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
12292
12293         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
12294         CLSCompliantAttribute.
12295         (all_imported_types): New member holds all imported types from other
12296         assemblies.
12297         (LoadAllImportedTypes): New method fills static table with exported types
12298         from all referenced assemblies.
12299         (Modules): New property returns all assembly modules.
12300
12301 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
12302
12303         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
12304         throwing a parser error.
12305
12306         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
12307         which removes the hardcoded get_/set_ prefixes for properties, as
12308         IL allows for the properties to be named something else.  
12309
12310         Bug #56013
12311
12312         * expression.cs: Do not override operand before we know if it is
12313         non-null.  Fix 56207
12314
12315 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12316
12317         * typemanager.cs: support for pinned variables.
12318
12319 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12320
12321         * decl.cs, typemanager.cs: Avoid using an arraylist
12322         as a buffer if there is only one result set.
12323
12324 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12325
12326         * expression.cs: Make sure you cant call a static method
12327         with an instance expression, bug #56174.
12328
12329 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
12330
12331         * class.cs (IsDuplicateImplementation): Improve error reporting to
12332         flag 663 (method only differs in parameter modifier).
12333
12334         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
12335         in preprocessor directives.
12336
12337         * location.cs (LookupFile): Allow for the empty path.
12338
12339         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
12340         better approach for some of that patch, but its failing with the
12341         CharSet enumeration.  For now try/catch will do.
12342
12343         * typemanager.cs: Do not crash if a struct does not have fields.
12344         Fixes 56150.
12345
12346 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12347
12348         * expression.cs: cs0213, cant fix a fixed expression.
12349         fixes 50231.
12350
12351 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12352
12353         * cs-parser.jay: detect invalid embeded statements gracefully.
12354         bug #51113.
12355
12356 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12357
12358         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
12359         As a regex:
12360         s/
12361         the invocation type may not be a subclass of the tye of the item/
12362         The type of the item must be a subclass of the invocation item.
12363         /g
12364
12365         Fixes bug #50820.
12366
12367 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
12368
12369         * attribute.cs: Added methods to get a string and a bool from an
12370         attribute. Required to information from AssemblyKeyFileAttribute,
12371         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
12372         * codegen.cs: Modified AssemblyName creation to include support for
12373         strongnames. Catch additional exceptions to report them as CS1548.
12374         * compiler.csproj: Updated include CryptoConvert.cs.
12375         * compiler.csproj.user: Removed file - user specific configuration.
12376         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
12377         Mono.Security assembly. The original class is maintained and tested in
12378         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
12379         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
12380         like CSC 8.0 (C# v2) supports.
12381         * Makefile: Added CryptoConvert.cs to mcs sources.
12382         * rootcontext.cs: Added new options for strongnames.
12383
12384 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
12385
12386         * driver.cs: For --expect-error, report error code `2'
12387         if the program compiled with no errors, error code `1' if
12388         it compiled with an error other than the one expected.
12389
12390 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
12391
12392         * compiler.csproj: Updated for Visual Studio .NET 2003.
12393         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
12394         * compiler.sln: Updated for Visual Studio .NET 2003.
12395
12396 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
12397
12398         * expression.cs: Fix bug #47234. We basically need to apply the
12399         rule that we prefer the conversion of null to a reference type
12400         when faced with a conversion to 'object' (csc behaviour).
12401
12402 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12403
12404         * statement.cs: Shorter form for foreach, eliminates
12405         a local variable. r=Martin.
12406
12407 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12408
12409         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
12410         checks if we can use brtrue/brfalse to test for 0.
12411         * expression.cs: use the above in the test for using brtrue/brfalse.
12412         cleanup code a bit.
12413
12414 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12415
12416         * expression.cs: Rewrite string concat stuff. Benefits:
12417
12418         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
12419         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
12420         rather than a concat chain.
12421
12422         * typemanager.cs: Add lookups for more concat overloads.
12423
12424 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12425
12426         * expression.cs: Emit shorter il code for array init.
12427
12428         newarr
12429         dup
12430         // set 1
12431
12432         // set 2
12433
12434         newarr
12435         stloc.x
12436
12437         ldloc.x
12438         // set 1
12439
12440         ldloc.x
12441         // set 2
12442
12443 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
12444
12445         * statement.cs: Before, two switch blocks would be merged if the
12446         total size of the blocks (end_item - begin_item + 1) was less than
12447         two times the combined sizes of the blocks.
12448
12449         Now, it will only merge if after the merge at least half of the
12450         slots are filled.
12451
12452         fixes 55885.
12453
12454 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
12455
12456         * class.cs : csc build fix for GetMethods(). See bug #52503.
12457
12458 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
12459
12460         * expression.cs: Make sure fp comparisons work with NaN.
12461         This fixes bug #54303. Mig approved this patch a long
12462         time ago, but we were not able to test b/c the runtime
12463         had a related bug.
12464
12465 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
12466
12467         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
12468
12469 2004-03-19  Martin Baulig  <martin@ximian.com>
12470
12471         * class.cs (MemberCore.IsDuplicateImplementation): Check whether
12472         two overloads may unify for some type parameter substitutions and
12473         report a CS0408 if appropriate.
12474
12475 2004-03-19  Martin Baulig  <martin@ximian.com>
12476
12477         * class.cs (MemberCore.IsDuplicateImplementation): Report the
12478         error here and not in our caller.
12479
12480 2004-03-19  Martin Baulig  <martin@ximian.com>
12481
12482         * interface.cs: Completely killed this file.
12483         (Interface): We're now a TypeContainer and live in class.cs.
12484
12485         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
12486         argument; we're now also called for interfaces.
12487         (TypeContainer.DefineMembers): Allow this method being called
12488         multiple times.
12489         (TypeContainer.GetMethods): New public method; formerly known as
12490         Interface.GetMethod().  This is used by PendingImplementation.
12491         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
12492         it's now private and non-static.
12493         (Interface): Moved this here; it's now implemented similar to
12494         Class and Struct.
12495         (Method, Property, Event, Indexer): Added `bool is_interface'
12496         argument to their .ctor's.
12497         (MemberBase.IsInterface): New public field.
12498
12499         * cs-parser.jay: Create normal Method, Property, Event, Indexer
12500         instances instead of InterfaceMethod, InterfaceProperty, etc.
12501         (opt_interface_base): Removed; we now use `opt_class_base' instead.
12502         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
12503
12504 2004-03-19  Martin Baulig  <martin@ximian.com>
12505
12506         * class.cs (MethodCore.IsDuplicateImplementation): New private
12507         method which does the CS0111 checking.
12508         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
12509         Use IsDuplicateImplementation().
12510
12511 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
12512
12513         * decl.cs (FindMemberToOverride): New method to find the correct
12514         method or property to override in the base class.
12515         * class.cs
12516             - Make Method/Property use the above method to find the
12517               version in the base class.
12518             - Remove the InheritableMemberSignatureCompare as it is now
12519               dead code.
12520
12521         This patch makes large code bases much faster to compile, as it is
12522         O(n) rather than O(n^2) to do this validation.
12523
12524         Also, it fixes bug 52458 which is that nested classes are not
12525         taken into account when finding the base class member.
12526
12527         Reviewed/Approved by Martin.
12528
12529 2004-03-17  Martin Baulig  <martin@ximian.com>
12530
12531         * expression.cs (MemberAccess.DoResolve): Take the parent's number
12532         of type arguments into account; use the `real_num_type_args'
12533         approach like in DoResolveAsTypeStep().
12534
12535         * generic.cs (GenericMemberAccess.DoResolve): Make this work for
12536         nested types.
12537
12538 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
12539
12540         * interface.cs: In all interface classes removed redundant
12541         member initialization.
12542
12543 2004-03-16  Martin Baulig  <martin@ximian.com>
12544
12545         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
12546
12547 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
12548
12549         * decl.cs (DefineTypeAndParents): New helper method to define a
12550         type's containers before the type itself is defined;  This is a
12551         bug exposed by the recent changes to Windows.Forms when an
12552         implemented interface was defined inside a class that had not been
12553         built yet.   
12554
12555         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
12556
12557         (Check): Loop correctly to report errors modifiers
12558         (UNSAFE was not in the loop, since it was the same as TOP).
12559
12560         * interface.cs: Every interface member now takes a ModFlags,
12561         instead of a "is_new" bool, which we set on the base MemberCore. 
12562
12563         Every place where we called "UnsafeOk" in the interface, now we
12564         call the proper member (InterfaceMethod.UnsafeOK) instead to get
12565         the unsafe settings from the member declaration instead of the
12566         container interface. 
12567
12568         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
12569
12570         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
12571         `set_indexer_name' to the pending bits (one per type).
12572
12573         We fixed a bug today that was picking the wrong method to
12574         override, since for properties the existing InterfaceMethod code
12575         basically ignored the method name.  Now we make sure that the
12576         method name is one of the valid indexer names.
12577
12578 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
12579  
12580         * support.cs (SeekableStreamReader): Keep track of stream byte
12581         positions and don't mix them with character offsets to the buffer.
12582
12583         Patch from Gustavo Giráldez
12584
12585 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
12586
12587         * interface.cs (InterfaceSetGetBase): Removed double member
12588         initialization, base class does it as well.
12589
12590 2004-03-13  Martin Baulig  <martin@ximian.com>
12591
12592         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
12593         when compiling corlib.
12594
12595 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
12596
12597         * convert.cs (ExplicitConversion): We were reporting an error on
12598         certain conversions (object_type source to a value type, when the
12599         expression was `null') before we had a chance to pass it through
12600         the user defined conversions.
12601
12602         * driver.cs: Replace / and \ in resource specifications to dots.
12603         Fixes 50752
12604
12605         * class.cs: Add check for duplicate operators.  Fixes 52477
12606
12607 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
12608
12609         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
12610         that are in the middle of the statements, not only at the end.
12611         Fixes #54987
12612
12613         * class.cs (TypeContainer.AddField): No longer set the
12614         `HaveStaticConstructor' flag, now we call it
12615         `UserDefineStaticConstructor' to diferentiate the slightly
12616         semantic difference.
12617
12618         The situation is that we were not adding BeforeFieldInit (from
12619         Modifiers.TypeAttr) to classes that could have it.
12620         BeforeFieldInit should be set to classes that have no static
12621         constructor. 
12622
12623         See:
12624
12625         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
12626
12627         And most importantly Zoltan's comment:
12628
12629         http://bugzilla.ximian.com/show_bug.cgi?id=44229
12630
12631         "I think beforefieldinit means 'it's ok to initialize the type sometime 
12632          before its static fields are used', i.e. initialization does not need
12633          to be triggered by the first access to the type. Setting this flag
12634          helps the JIT to compile better code, since it can run the static
12635          constructor at JIT time, and does not need to generate code to call it
12636          (possibly lots of times) at runtime. Unfortunately, mcs does not set
12637          this flag for lots of classes like String. 
12638          
12639          csc sets this flag if the type does not have an explicit static 
12640          constructor. The reasoning seems to be that if there are only static
12641          initalizers for a type, and no static constructor, then the programmer
12642          does not care when this initialization happens, so beforefieldinit
12643          can be used.
12644          
12645          This bug prevents the AOT compiler from being usable, since it 
12646          generates so many calls to mono_runtime_class_init that the AOT code
12647          is much slower than the JITted code. The JITted code is faster, 
12648          because it does not generate these calls if the vtable is type is
12649          already initialized, which is true in the majority of cases. But the
12650          AOT compiler can't do this."
12651
12652 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
12653
12654         * class.cs (MethodData.Emit): Refactor the code so symbolic
12655         information is generated for destructors;  For some reasons we
12656         were taking a code path that did not generate symbolic information
12657         before. 
12658
12659 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
12660
12661         * class.cs: Create a Constructor.CheckBase method that
12662         takes care of all validation type code. The method
12663         contains some code that was moved from Define.
12664
12665         It also includes new code that checks for duplicate ctors.
12666         This fixes bug #55148.
12667
12668 2004-03-09  Joshua Tauberer <tauberer@for.net>
12669
12670         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
12671         a { ... }-style array creation invokes EmitStaticInitializers
12672         which is not good for reference-type arrays.  String, decimal
12673         and now null constants (NullCast) are not counted toward
12674         static initializers.
12675
12676 2004-03-05  Martin Baulig  <martin@ximian.com>
12677
12678         * location.cs (SourceFile.HasLineDirective): New public field;
12679         specifies whether the file contains or is referenced by a "#line"
12680         directive.
12681         (Location.DefineSymbolDocuments): Ignore source files which
12682         either contain or are referenced by a "#line" directive.        
12683
12684 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
12685
12686         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
12687         direct access to our parent, so check the method inline there.
12688
12689 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
12690
12691         * expression.cs (Invocation.EmitCall): Miguel's last commit
12692         caused a regression. If you had:
12693
12694             T t = null;
12695             t.Foo ();
12696
12697         In Foo the implict this would be null.
12698
12699 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
12700
12701         * expression.cs (Invocation.EmitCall): If the method is not
12702         virtual, do not emit a CallVirt to it, use Call.
12703
12704         * typemanager.cs (GetFullNameSignature): Improve the method to
12705         cope with ".ctor" and replace it with the type name.
12706
12707         * class.cs (ConstructorInitializer.Resolve): Now the method takes
12708         as an argument the ConstructorBuilder where it is being defined,
12709         to catch the recursive constructor invocations.
12710
12711 2004-03-16  Martin Baulig  <martin@ximian.com>
12712
12713         * expression.cs (MemberAccess.DoResolve): If `expr' resolved to a
12714         ConstructedType, call ResolveType() on it to get the type rather
12715         than just using `expr.Type'.
12716
12717 2004-03-16  Martin Baulig  <martin@ximian.com>
12718
12719         * generics.cs (ConstructedType.GetMemberAccess): Take the
12720         EmitContext instead on the TypeExpr and use
12721         ec.TypeContainer.CurrentType/ec.ContainerType.
12722
12723 2004-03-16  Martin Baulig  <martin@ximian.com>
12724
12725         * ecore.cs (SimpleName.DoResolveAsTypeStep): Lookup type
12726         parameters before aliases.
12727
12728 2004-03-16  Martin Baulig  <martin@ximian.com>
12729
12730         * typemanager.cs (TypeManager.MayBecomeEqualGenericInstances):
12731         New oublic function; checks whether two generic instances may become
12732         equal under some instantiations (26.3.1).
12733
12734         * class.cs (TypeContainer.Define): Call
12735         TypeManager.MayBecomeEqualGenericInstances() and report CS0695 on
12736         error.
12737
12738 2004-03-16  Martin Baulig  <martin@ximian.com>
12739
12740         * class.cs (TypeContainer.GetClassBases): Moved
12741         Error_TypeParameterAsBase() here and also check whether the base
12742         class is not an attribute.
12743
12744 2004-03-16  Martin Baulig  <martin@ximian.com>
12745
12746         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
12747
12748 2004-03-16  Martin Baulig  <martin@ximian.com>
12749
12750         * class.cs (Error_TypeParameterAsBase): Use correct error number
12751         here (CS0689).  
12752
12753 2004-03-16  Martin Baulig  <martin@ximian.com>
12754
12755         * decl.cs (DeclSpace.ResolveTypeExpr): Added more error checking
12756         for generics.
12757
12758         * generics.cs (ConstructedType.DoResolveAsTypeStep): Added better
12759         error reporting.
12760
12761 2004-03-15  Martin Baulig  <martin@ximian.com>
12762
12763         * typemanager.cs (TypeManager.GetFullName): New public method.
12764         (TypeManager.MemberLookup): Added `int_num_type_arguments'
12765         argument; only return members with the correct number of type
12766         arguments.
12767         (TypeManager.CheckGeneric): Allow -1 to bypass the check.
12768         (TypeManager.FilterWithClosure): Call CheckGeneric() to check
12769         whether the number of type arguments matches.
12770
12771         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Allow `expr'
12772         not being a ConstructedType; we can now do "typeof (Foo.Bar<U>)".
12773
12774         * expression.cs (MemberAccess): Added public `NumTypeArguments'
12775         field; it's set by the protected .ctor when we're actually a
12776         GenericMemberAccess.
12777         (MemberAccess.ResolveAsTypeStep): Compute the total number of type
12778         arguments and pass it to MemberLookupFinal ().
12779
12780         * ecore.cs (Expression.MemberLookup): Added `int
12781         num_type_arguments' argument; only return members with the correct
12782         number of type arguments.
12783         (Expression.MemberLookupFailed): Check whether the MemberLookup
12784         failed because we did not have the correct number of type
12785         arguments; report CS0305 in this case.
12786
12787         * decl.cs (DeclSpace.ResolveTypeExpr): Don't report an error if
12788         `e.ResolveAsTypeTerminal()' already did so.
12789
12790 2004-03-15  Martin Baulig  <martin@ximian.com>
12791
12792         * ecore.cs (Expression.ResolveLValue): Allow e.type being null if
12793         we're a ConstructedType; in this case, the caller must report an
12794         error (for instance CS0131).
12795
12796         * generic.cs (TypeArguments): Added Location argument to the .ctor.
12797         (TypeArguments.Resolve): Actually report errors here.
12798
12799 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
12800
12801         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
12802         `set_indexer_name' to the pending bits (one per type).
12803
12804         We fixed a bug today that was picking the wrong method to
12805         override, since for properties the existing InterfaceMethod code
12806         basically ignored the method name.  Now we make sure that the
12807         method name is one of the valid indexer names.
12808
12809 2004-03-15  Martin Baulig  <martin@ximian.com>
12810
12811         * typemanager.cs (TypeManager.IndexerPropertyName): Added support
12812         for generic instances.
12813
12814 2004-03-13  Martin Baulig  <martin@ximian.com>
12815
12816         * class.cs (TypeContainer.DefineType): Call
12817         TypeManager.AddUserType() immediately after creating the
12818         TypeBuilder; pass all type parameters when creating the
12819         CurrentType.
12820
12821         * decl.cs (DeclSpace.FindNestedType): New public method.
12822         (DeclSpace.FindType): Added `int num_type_args' argument; only
12823         return types with the correct number of type parameters.
12824         (DeclSpace.CountTypeParams): New public property.
12825
12826         * ecore.cs (SimpleName.ctor): Added overloaded version which takes
12827         the number of type parameters; defaults to zero.
12828
12829         * generic.cs (TypeArguments.Count): New public property.
12830         (ConstructedType.DoResolveAsTypeStep): First call
12831         ds.FindNestedType() to find out whether we're nested in the
12832         current generic type; in this case, we inherit all type parameters
12833         from the current class.
12834
12835         * rootcontext.cs (RootContext.NamespaceLookup): Added `int
12836         num_type_args' argument.
12837         (RootContext.LookupType): Added overloaded version which takes the
12838         number of type arguments; only return types with the correct
12839         number of type arguments.
12840
12841         * typemanager.cs (TypeManager.CheckGeneric): New public function;
12842         checks whether `Type t' has `int num_type_args'.
12843
12844 2004-03-13  Martin Baulig  <martin@ximian.com>
12845
12846         * generic.cs (GenericMethod.DefineType): New method; calls
12847         DefineType() on all the type parameters.
12848
12849         * class.cs (MethodData.ctor): Added `GenericMethod generic' argument.
12850         (MethodData.Define): If we're a generic method, call
12851         GenericMethod.DefineType() to define the type parameters.       
12852
12853 2004-03-10  Martin Baulig  <martin@ximian.com>
12854
12855         * pending.cs (Pending.InterfaceMethod): Use TypeManager.IsEqual()
12856         instead of IsAssignableFrom.    
12857
12858 2004-03-10  Martin Baulig  <martin@ximian.com>
12859
12860         * ecore.cs (FieldExpr.ctor): Use TypeManager.TypeToCoreType().
12861
12862         * support.cs (ParameterData.HasArrayParameter): New property.
12863         (ReflectionParameters.ctor): Take a MethodBase instead of a
12864         ParameterInfo[].  If we have any type parameters, get the generic
12865         method definition and ask it whether we have variable arguments.
12866
12867 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
12868
12869         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
12870         routines to check if a type is an enumerable/enumerator allow
12871         classes that implement the IEnumerable or IEnumerator interfaces.
12872
12873         * class.cs (Property, Operator): Implement IIteratorContainer, and
12874         implement SetYields.
12875
12876         (Property.Define): Do the block swapping for get_methods in the
12877         context of iterators.   We need to check if Properties also
12878         include indexers or not.
12879
12880         (Operator): Assign the Block before invoking the
12881         OperatorMethod.Define, so we can trigger the Iterator code
12882         replacement. 
12883
12884         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
12885         Property and Operator classes are not created when we parse the
12886         declarator but until we have the block completed, so we use a
12887         singleton SimpleIteratorContainer.Simple to flag whether the
12888         SetYields has been invoked.
12889
12890         We propagate this setting then to the Property or the Operator to
12891         allow the `yield' to function.
12892
12893 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
12894
12895         * codegen.cs: Implemented attribute support for modules.
12896         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
12897         Assembly/Module functionality.
12898
12899         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
12900         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
12901         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
12902
12903 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
12904
12905         * interface.cs (FindMembers): The operation is performed on all base
12906         interfaces and not only on the first. It is required for future CLS Compliance patch.
12907
12908 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
12909
12910         * statement.cs, codegen.cs:
12911         This patch deals with patterns such as:
12912
12913         public class List : IEnumerable {
12914
12915                 public MyEnumerator GetEnumerator () {
12916                         return new MyEnumerator(this);
12917                 }
12918
12919                 IEnumerator IEnumerable.GetEnumerator () {
12920                         ...
12921                 }
12922                 
12923                 public struct MyEnumerator : IEnumerator {
12924                         ...
12925                 }
12926         }
12927
12928         Before, there were a few things we did wrong:
12929         1) we would emit callvirt on a struct, which is illegal
12930         2) we emited ldarg when we needed to emit ldarga
12931         3) we would mistakenly call the interface methods on an enumerator
12932         type that derived from IEnumerator and was in another assembly. For example:
12933
12934         public class MyEnumerator : IEnumerator
12935
12936         Would have the interface methods called, even if there were public impls of the
12937         method. In a struct, this lead to invalid IL code.
12938
12939 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
12940
12941         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
12942           renamed to Emit.
12943
12944         * delegate.cs (Define): Fixed crash when delegate type is undefined.
12945
12946 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
12947
12948         * cs-parser.jay: Fix small regression: we were not testing V2
12949         compiler features correctly.
12950
12951         * interface.cs: If the emit context is null, then create one
12952
12953 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
12954
12955         * decl.cs (GetSignatureForError): New virtual method to get full name
12956           for error messages.
12957
12958         * attribute.cs (IAttributeSupport): New interface for attribute setting.
12959           Now it is possible to rewrite ApplyAttributes method to be less if/else.
12960
12961         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
12962           Duplicated members and code in these classes has been removed.
12963           Better encapsulation in these classes.
12964
12965 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
12966
12967         * assign.cs (Assign.DoResolve): When dealing with compound
12968         assignments, there is a new rule in ECMA C# 2.4 (might have been
12969         there before, but it is documented here) that states that in:
12970
12971         a op= b;
12972
12973         If b is of type int, and the `op' is a shift-operator, then the
12974         above is evaluated as:
12975
12976         a = (int) a op b 
12977
12978         * expression.cs (Binary.ResolveOperator): Instead of testing for
12979         int/uint/long/ulong, try to implicitly convert to any of those
12980         types and use that in pointer arithmetic.
12981
12982         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
12983         method to print information for from the type, not from the
12984         null-method we were given.
12985
12986 2004-02-01  Duncan Mak  <duncan@ximian.com>
12987
12988         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
12989         parsing for cmd, fixes bug #53694.
12990
12991 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
12992
12993         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
12994         in the member name duplication tests. Property and operator name duplication
12995         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
12996
12997 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
12998
12999         * interface.cs (PopulateMethod): Fixed crash when interface method
13000         returns not existing type (error test cs0246-3.cs).
13001
13002 2004-02-02  Ravi Pratap M <ravi@ximian.com>
13003
13004         * cs-parser.jay (interface_accessors): Re-write actions to also
13005         store attributes attached to get and set methods. Fix spelling
13006         while at it.
13007
13008         (inteface_property_declaration): Modify accordingly.
13009
13010         (InterfaceAccessorInfo): New helper class to store information to pass
13011         around between rules that use interface_accessors.
13012
13013         * interface.cs (Emit): Apply attributes on the get and set
13014         accessors of properties and indexers too.
13015
13016         * attribute.cs (ApplyAttributes): Modify accordingly to use the
13017         right MethodBuilder when applying attributes to the get and set accessors.
13018
13019 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
13020
13021         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
13022
13023 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
13024
13025         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
13026
13027 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
13028
13029         * cs-parser.jay: Remove YIELD token, instead use the new grammar
13030         changes that treat `yield' specially when present before `break'
13031         or `return' tokens.
13032
13033         * cs-tokenizer.cs: yield is no longer a keyword.
13034
13035 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
13036
13037         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
13038         setting for default constructors.
13039         For default constructors are almost every time set wrong Modifier. The
13040         generated IL code has been alright. But inside mcs this values was
13041         wrong and this was reason why several of my CLS Compliance tests
13042         failed.
13043
13044 2004-02-27  Martin Baulig  <martin@ximian.com>
13045
13046         * generics.cs (ConstructedType.ResolveType): Make the nested type
13047         stuff actually work.
13048
13049 2004-02-25  Martin Baulig  <martin@ximian.com>
13050
13051         * decl.cs (DeclSpace.CurrentTypeParameters): New protected
13052         property; returns the type parameters just from the current type,
13053         ie. with the ones from outer classes.
13054         (DeclSpace.LookupGeneric): First search in the current class, then
13055         in outer classes.
13056         (DeclSpace.initialize_type_params): When hiding a type parameter
13057         from an outer class, put it into the `type_param_list' anyways.
13058
13059         * expression.cs (MemberAccess.expr): Made this field protected.
13060
13061         * class.cs (TypeContainer.Define): The `CurrentType' just contains
13062         the type parameters from the current class.
13063
13064         * generic.cs (ConstructedType.ResolveType): Support nested generic
13065         types by taking the type parameters which we inherit from outer
13066         classes into account.
13067         (GenericMemberAccess.ResolveAsTypeStep): Override this and added
13068         support for nested generic types.
13069
13070 2004-02-23  Martin Baulig  <martin@ximian.com>
13071
13072         * decl.cs (DeclSpace.IsGeneric): Make this a property instead of a
13073         field and check whether we're nested inside a generic type.
13074         (DeclSpace.ResolveType): If we're resolving to a generic type
13075         definition, create a ConstructedType and return its resolved type.
13076         (DeclSpace.initialize_type_params): New private method;
13077         initializes the `type_param_list' field from the type parameters
13078         from this and all enclosing classes.
13079         (DeclSpace.TypeParameters): Call initialize_type_params() unless
13080         we're already initialized.
13081
13082 2004-02-23  Martin Baulig  <martin@ximian.com>
13083
13084         * class.cs (Method.Define): Create the generic method before
13085         calling DoDefine().
13086         (Memberbase.DoDefine): Added DeclSpace argument (in addition to
13087         the TypeContainer one); we use this for generic methods.
13088
13089         * decl.cs (CheckAccessLevel): If we're a GenericMethod, use our
13090         parent's TypeBuilder.
13091
13092 2004-02-18  Martin Baulig  <martin@ximian.com>
13093
13094         * ecore.cs (FieldExpr.DoResolveLValue): Use TypeManager.IsEqual()
13095         to check for equality.
13096
13097 2004-02-05  Martin Baulig  <martin@ximian.com>
13098
13099         * ecore.cs (FieldExpr.DoResolveLValue): If we have an
13100         `ec.TypeContainer.CurrentType', use it instead of
13101         `ec.ContainerType' to check whether we're in the type's ctor.
13102
13103 2004-01-29  Martin Baulig  <martin@ximian.com>
13104
13105         * expression.cs (Invocation.DoResolve): If we're a
13106         `ConstructedType', then we're actually a generic method, so
13107         rewrite the expr as a GenericMemberAccess.
13108
13109         * cs-parser.jay (member_name): Don't use `namespace_or_type_name'
13110         here; manually parse it into a string.
13111
13112 2004-01-28  Martin Baulig  <martin@ximian.com>
13113
13114         * typemanager.cs (TypeManager.IsEqual): New static method.
13115         (TypeManager.FilterWithClosure): Call TypeManager.IsEqual() to
13116         check for equality instead of using `=='.
13117
13118 2004-01-26  Martin Baulig  <martin@ximian.com>
13119
13120         * decl.cs (DeclSpace.CurrentType): New public field.
13121
13122         * expression.cs (This.ResolveBase): If we have an
13123         `ec.TypeContainer.CurrentType', use it instead of
13124         `ec.ContainerType'.
13125
13126         * class.cs (TypeContainer.DefineType): If we're a generic type,
13127         create the `CurrentType' (unresolved).
13128         (TypeContainer.GenericType): New private field.
13129         (TypeContainer.DefineMembers): If we have a `CurrentType', resolve
13130         it and store it in `GenericType' before creating the MemberCache.
13131         (TypeContainer.GetMembers): If we have a `GenericType', call
13132         TypeManager.FindMembers() on it.
13133
13134         * interface.cs (Interface.GenericType): New private field.
13135         (Interface.DefineType): If we're a generic type, create the
13136         `CurrentType' (unresolved).
13137         (Interface.DefineMembers): If we have a `CurrentType', resolve it
13138         and store it in `GenericType' before creating the MemberCache.
13139         (Interface.GetMembers): If we have a `GenericType', call
13140         TypeManager.FindMembers() on it.
13141
13142 2004-01-22  Martin Baulig  <martin@ximian.com>
13143
13144         * cs-parser.jay (namespace_or_type_name): Return an Expression,
13145         not a QualifiedIdentifier.  This is what `type_name_expression'
13146         was previously doing.
13147         (type_name_expression): Removed; the code is now in
13148         `namespace_or_type_name'.
13149         (qualified_identifier): Removed, use `namespace_or_type_name'
13150         instead.
13151         (QualifiedIdentifier): Removed this class.      
13152
13153 2004-01-22  Martin Baulig  <martin@ximian.com>
13154
13155         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
13156         not a string as alias name.
13157
13158 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
13159
13160         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
13161         #52730 bug, and instead compute correctly the need to use a
13162         temporary variable when requesting an address based on the
13163         static/instace modified of the field and the constructor.
13164  
13165 2004-01-21  Martin Baulig  <martin@ximian.com>
13166
13167         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
13168         class and namespace before looking up aliases.  Fixes #52517.
13169
13170 2004-01-21  Martin Baulig  <martin@ximian.com>
13171
13172         * flowanalysis.cs (UsageVector.Merge): Allow variables being
13173         assinged in a 'try'; fixes exception4.cs.
13174
13175 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13176         * class.cs : Implemented parameter-less constructor for TypeContainer
13177
13178         * decl.cs: Attributes are now stored here. New property OptAttributes
13179
13180         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
13181
13182         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
13183
13184 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13185
13186         * typemanager.cs (CSharpSignature): Now reports also inner class name.
13187           (CSharpSignature): New method for indexer and property signature.
13188
13189 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13190
13191         * pending.cs (IsVirtualFilter): Faster implementation.
13192
13193 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13194
13195         * typemanager.cs: Avoid inclusion of same assembly more than once.
13196
13197 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13198
13199         * cs-parser.jay: Fixed problem where the last assembly attribute
13200           has been applied also to following declaration (class, struct, etc.)
13201           
13202 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13203
13204         * class.cs: Added error CS0538, CS0539 reporting.
13205         Fixed crash on Microsoft runtime when field type is void.
13206
13207         * cs-parser.jay: Added error CS0537 reporting.
13208
13209         * pending.cs: Added error CS0535 reporting.
13210         Improved error report for errors CS0536, CS0534.
13211
13212 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
13213
13214         Merge a few bits from the Anonymous Method MCS tree.
13215
13216         * statement.cs (ToplevelBlock): New class for toplevel methods,
13217         will hold anonymous methods, lifted variables.
13218
13219         * cs-parser.jay: Create toplevel blocks for delegates and for
13220         regular blocks of code. 
13221
13222 2004-01-20  Martin Baulig  <martin@ximian.com>
13223
13224         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
13225         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
13226         and `NeedExplicitReturn'; added `IsLastStatement'.
13227         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
13228         have a `ReturnLabel' or we're not unreachable.
13229
13230         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
13231         child's reachability; don't just override ours with it.  Fixes
13232         #58058 (lluis's example).
13233         (FlowBranching): Added public InTryOrCatch(), InCatch(),
13234         InFinally(), InLoop(), InSwitch() and
13235         BreakCrossesTryCatchBoundary() methods.
13236
13237         * statement.cs (Return): Do all error checking in Resolve().
13238         Unless we are the last statement in a top-level block, always
13239         create a return label and jump to it.
13240         (Break, Continue): Do all error checking in Resolve(); also make
13241         sure we aren't leaving a `finally'.
13242         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
13243         statement in a top-level block.
13244         (Block.Flags): Added `IsDestructor'.
13245         (Block.IsDestructor): New public property.
13246
13247 2004-01-20  Martin Baulig  <martin@ximian.com>
13248
13249         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
13250
13251 2004-01-20  Martin Baulig  <martin@ximian.com>
13252
13253         * statement.cs (Statement.ResolveUnreachable): New public method.
13254         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
13255         (Block.Resolve): Resolve unreachable statements.
13256
13257 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
13258
13259         * expression.cs: We need to fix the case where we do
13260         not have a temp variable here.
13261
13262         * assign.cs: Only expression compound assignments need
13263         temporary variables.
13264
13265 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
13266
13267         * flowanalysis.cs: Reduce memory allocation in a few ways:
13268           - A block with no variables should not allocate a bit
13269             vector for itself.
13270           - A method with no out parameters does not need any tracking
13271             for assignment of the parameters, so we need not allocate
13272             any data for it.
13273           - The arrays:
13274                 public readonly Type[] VariableTypes;
13275                 public readonly string[] VariableNames;
13276             Are redundant. The data is already stored in the variable
13277             map, so we need not allocate another array for it.
13278           - We need to add alot of checks for if (params | locals) == null
13279             due to the first two changes.
13280
13281 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
13282
13283         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
13284         implement IMemoryLocation, we store a copy on a local variable and
13285         take the address of it.  Patch from Benjamin Jemlich
13286
13287         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
13288         to use a special "type_name_expression" rule which reduces the
13289         number of "QualifiedIdentifier" classes created, and instead
13290         directly creates MemberAccess expressions.
13291
13292 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
13293
13294         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
13295         that fixes #52853.  Null literal assignment to ValueType
13296
13297         * class.cs (MethodData.Emit): Instead of checking the name of the
13298         method to determine if its a destructor, create a new derived
13299         class from Method called Destructor, and test for that.  
13300
13301         * cs-parser.jay: Create a Destructor object instead of a Method.  
13302
13303         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
13304
13305         Fixes: 52933
13306
13307 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
13308
13309         * expression.cs (Binary.ResolveOperator): Perform an implicit
13310         conversion from MethodGroups to their delegate types on the
13311         Addition operation.
13312
13313         * delegate.cs: Introduce a new class DelegateCreation that is the
13314         base class for `NewDelegate' and `ImplicitDelegateCreation',
13315         factor some code in here.
13316
13317         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
13318         conversion from MethodGroups to compatible delegate types. 
13319
13320         * ecore.cs (Expression.Resolve): Do not flag error 654
13321         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
13322         we allow conversions from MethodGroups to delegate types now.
13323
13324         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
13325         assignments in v2 either.
13326
13327 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
13328
13329         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
13330         static read-only fields in ctors.
13331
13332         Applied patch from Benjamin Jemlich 
13333
13334         * expression.cs (UnaryMutator): Avoid leaking local variables. 
13335
13336 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
13337
13338         * cs-tokenizer.cs (IsCastToken): Allow the various native types
13339         here to return true, as they can be used like this:
13340
13341                 (XXX) int.MEMBER ()
13342
13343         Fixed 49836 and all the other dups
13344
13345 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
13346
13347         * driver.cs: Implement /win32res and /win32icon.
13348
13349 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
13350
13351         * cs-parser.jay: Add a rule to improve error handling for the
13352         common mistake of placing modifiers after the type.
13353
13354 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
13355
13356         * cs-parser.jay (interface_event_declaration): Catch
13357         initialization of events on interfaces, and report cs0068
13358
13359         * cs-parser.jay (interface_event_declaration): Catch
13360         initialization of events. 
13361
13362         * ecore.cs: Better report missing constructors.
13363
13364         * expression.cs (Binary.ResolveOperator): My previous bug fix had
13365         the error reporting done in the wrong place.  Fix.
13366
13367         * expression.cs (Binary.ResolveOperator): Catch the 
13368         operator + (E x, E y) error earlier, and later allow for implicit
13369         conversions in operator +/- (E e, U x) from U to the underlying
13370         type of E.
13371
13372         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
13373         52596, if the container class is abstract, the default constructor
13374         is protected otherwise its public (before, we were always public).
13375
13376         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
13377         fixed statement.
13378
13379         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
13380         Jemlich that fixes bug #52597, MCS was generating invalid code for
13381         idisposable structs.   Thanks to Ben for following up with this
13382         bug as well.
13383
13384 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
13385
13386         * driver.cs: Allow assemblies without code to be generated, fixes
13387         52230.
13388
13389 2004-01-07  Nick Drochak <ndrochak@gol.com>
13390
13391         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
13392
13393 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
13394
13395         * cs-parser.jay: Add rules to improve error reporting if fields or
13396         methods are declared at the namespace level (error 116)
13397
13398         * Add rules to catch event add/remove
13399
13400 2004-01-04  David Sheldon <dave-mono@earth.li>
13401
13402   * expression.cs: Added matching ")" to error message for 
13403   CS0077
13404
13405 2004-01-03 Todd Berman <tberman@gentoo.org>
13406
13407         * ecore.cs, attribute.cs:
13408         Applying fix from #52429.
13409
13410 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13411
13412         * ecore.cs, expression.cs, statement.cs:
13413         Total rewrite of how we handle branching. We
13414         now handle complex boolean expressions with fewer
13415         jumps. As well if (x == 0) no longer emits a ceq.
13416
13417         if (x is Foo) is much faster now, because we generate
13418         better code.
13419
13420         Overall, we get a pretty big improvement on our benchmark
13421         tests. The code we generate is smaller and more readable.
13422
13423         I did a full two-stage bootstrap. The patch was reviewed
13424         by Martin and Miguel.
13425
13426 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13427
13428         * cs-parser.jay: Make primary_expression not take a QI.
13429         we dont need this because the member_access rule covers
13430         us here. So we replace the rule with just IDENTIFIER.
13431
13432         This has two good effects. First, we remove a s/r conflict.
13433         Second, we allocate many fewer QualifiedIdentifier objects.
13434
13435 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13436
13437         * attribute.cs: Handle MarshalAs attributes as pseudo, and
13438         set the correct information via SRE. This prevents
13439         hanging on the MS runtime. Fixes #29374.
13440
13441 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13442
13443         * convert.cs: correctly handle conversions to value types
13444         from Enum and ValueType as unboxing conversions.
13445
13446         Fixes bug #52569. Patch by Benjamin Jemlich.
13447
13448 2004-01-02  Ravi Pratap  <ravi@ximian.com>
13449
13450         * expression.cs (BetterConversion): Prefer int -> uint
13451         over int -> ulong (csc's behaviour). This fixed bug #52046.
13452
13453 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13454
13455         * decl.cs (MemberCache.FindMembers): now returns a
13456         MemberInfo [].
13457
13458         * typemanager.cs: In general, go with with ^^.
13459         (CopyNewMethods): take an IList.
13460         (RealMemberLookup): Only allocate an arraylist
13461         if we copy from two sets of methods.
13462
13463         This change basically does two things:
13464         1) Fewer array lists allocated due to CopyNewMethods.
13465         2) the explicit cast in MemberList costed ALOT.
13466
13467 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
13468
13469         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
13470         a hashtable to avoid needless string allocations when an identifier is
13471         used more than once (the common case).
13472
13473 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
13474
13475         * pending.cs: MS's TypeBuilder.GetInterfaces ()
13476         is broken, it will not return anything. So, we
13477         have to use the information we have in mcs to
13478         do the task.
13479
13480         * typemanager.cs: Add a cache for GetInterfaces,
13481         since this will now be used more often (due to ^^)
13482
13483         (GetExplicitInterfaces) New method that gets the
13484         declared, not effective, interfaces on a type
13485         builder (eg, if you have interface IFoo, interface
13486         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
13487         { IBar }.
13488
13489         This patch makes MCS able to bootstrap itself on
13490         Windows again.
13491
13492 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
13493
13494         * expression.cs: Remove the Nop's that Miguel put
13495         in by mistake.
13496
13497 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13498
13499         * report.cs, codegen.cs: Give the real stack trace to
13500         the error when an exception is thrown.
13501
13502 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13503
13504         * decl.cs: only allocate hashtables for ifaces if 
13505         it is an iface!
13506
13507 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13508
13509         * expression.cs: fix the error from cs0121-2.cs
13510         (a parent interface has two child interfaces that
13511         have a function with the same name and 0 params
13512         and the function is called through the parent).
13513
13514 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13515
13516         * class.cs, rootcontext.cs, typmanager.cs: do not
13517         leak pointers.
13518
13519 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
13520
13521         * codegen.cs: remove stack for the ec flow branching.
13522         It is already a linked list, so no need.
13523
13524 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
13525
13526         * Makefile: Allow custom profiler here.
13527
13528 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
13529
13530         * typemanager.cs (LookupType):
13531           - Use a static char [], because split takes
13532             a param array for args, so it was allocating
13533             every time.
13534           - Do not store true in a hashtable, it boxes.
13535
13536 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
13537
13538         * flowanalysis.cs: bytify common enums.
13539
13540 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13541
13542         * modifiers.cs: Add a new set of flags for the
13543         flags allowed on explicit interface impls.
13544         * cs-parser.jay: catch the use of modifiers in
13545         interfaces correctly.
13546         * class.cs: catch private void IFoo.Blah ().
13547
13548         All related to bug #50572.
13549
13550 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13551
13552         * decl.cs: Rewrite the consistant accessability checking.
13553         Accessability is not linear, it must be implemented in
13554         a tableish way. Fixes #49704.
13555
13556 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13557
13558         * expression.cs: Handle negation in a checked context.
13559         We must use subtraction from zero. Fixes #38674.
13560
13561 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13562
13563         * class.cs: Ignore static void main in DLLs.
13564         * rootcontext.cs: Handle the target type here,
13565         since we are have to access it from class.cs
13566         * driver.cs: account for the above.
13567
13568 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13569
13570         * report.cs: Give line numbers and files if available.
13571
13572 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
13573
13574         * driver.cs: Implement /addmodule.
13575
13576         * typemanager.cs:  Change 'modules' field so it now contains Modules not
13577         ModuleBuilders.
13578
13579 2003-12-20  Martin Baulig  <martin@ximian.com>
13580
13581         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
13582         (FieldBase.IsAssigned): Removed this field.
13583         (FieldBase.SetAssigned): New public method.
13584         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
13585
13586 2003-12-20  Martin Baulig  <martin@ximian.com>
13587
13588         * expression.cs (LocalVariableReference.DoResolve): Don't set
13589         `vi.Used' if we're called from DoResolveLValue().
13590
13591         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
13592         returns the usage vector it just merged into the current one -
13593         pass this one to UsageWarning().
13594         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
13595         of the `EmitContext', don't call this recursively on our children.
13596
13597 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
13598
13599         * driver.cs: Implement /target:module.
13600
13601 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
13602
13603         * support.cs (CharArrayHashtable): New helper class.
13604
13605         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
13606         char arrays, not strings, so we can avoid creating a string in
13607         consume_identifier if the identifier is a keyword.
13608
13609 2003-12-16  Martin Baulig  <martin@ximian.com>
13610
13611         * statement.cs (LocalInfo.Assigned): Removed this property.
13612         (LocalInfo.Flags): Removed `Assigned'.
13613         (LocalInfo.IsAssigned): New public method; takes the EmitContext
13614         and uses flow analysis.
13615         (Block.UsageWarning): Made this method private.
13616         (Block.Resolve): Call UsageWarning() if appropriate.
13617
13618         * expression.cs (LocalVariableReference.DoResolve): Always set
13619         LocalInfo.Used here.
13620
13621 2003-12-13  Martin Baulig  <martin@ximian.com>
13622
13623         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
13624         any value here; we're now using flow analysis to figure out
13625         whether a statement/block returns a value.
13626
13627 2003-12-13  Martin Baulig  <martin@ximian.com>
13628
13629         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
13630         working again.
13631         (FlowBranching.MergeFinally): Don't call
13632         `branching.CheckOutParameters()' here, this is called in
13633         MergeTopBlock().
13634         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
13635         when adding the `finally' vector.       
13636
13637 2003-12-13  Martin Baulig  <martin@ximian.com>
13638
13639         * flowanalysis.cs
13640         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
13641         actually work and also fix #48962.
13642
13643 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
13644
13645         * decl.cs: Do not check System.Object for nested types,
13646         since we know it does not have any. Big bang for buck:
13647
13648         BEFORE:
13649            Run 1:   8.35 seconds
13650            Run 2:   8.32 seconds
13651            corlib:  17.99 seconds
13652         AFTER:
13653            Run 1:   8.17 seconds
13654            Run 2:   8.17 seconds
13655            corlib:  17.39 seconds
13656
13657 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
13658
13659         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
13660         time we are returning 0 members, so we save alot here.
13661
13662 2003-12-11  Martin Baulig  <martin@ximian.com>
13663
13664         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
13665         `MergeChild()', also just take the `FlowBranching' as argument;
13666         call Merge() on it and return the result.
13667         (FlowBranching.Merge): We don't need to do anything if we just
13668         have one sibling.
13669
13670 2003-12-11  Martin Baulig  <martin@ximian.com>
13671
13672         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
13673         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
13674         Maurer for this idea.
13675
13676 2003-12-11  Martin Baulig  <martin@ximian.com>
13677
13678         * flowanalysis.cs (MergeResult): This class is now gone; we now
13679         use the `UsageVector' for this.  The reason for this is that if a
13680         branching just has one sibling, we don't need to "merge" them at
13681         all - that's the next step to do.
13682         (FlowBranching.Merge): We now return a `UsageVector' instead of a
13683         `MergeResult'.
13684
13685 2003-12-11  Martin Baulig  <martin@ximian.com>
13686
13687         Reworked flow analyis and made it more precise and bug-free.  The
13688         most important change is that we're now using a special `Reachability'
13689         class instead of having "magic" meanings of `FlowReturns'.  I'll
13690         do some more cleanups and optimizations and also add some more
13691         documentation this week.
13692
13693         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
13694         largely reworked this class.
13695         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
13696         the new `Reachability' class instead of having "magic" values here.
13697         (FlowBranching): We're now using an instance of `Reachability'
13698         instead of having separate `Returns', `Breaks' etc. fields.
13699
13700         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
13701         based on flow analysis; ignore the return value of block.Emit ().
13702
13703 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
13704
13705         * driver.cs typemanager.cs: Find the mono extensions to corlib even
13706         if they are private.
13707
13708 2003-12-09  Martin Baulig  <martin@ximian.com>
13709
13710         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
13711         call them directly on the UsageVector.
13712
13713 2003-12-09  Martin Baulig  <martin@ximian.com>
13714
13715         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
13716         Changed return type from `FlowReturns' to `Reachability'.
13717
13718 2003-12-09  Martin Baulig  <martin@ximian.com>
13719
13720         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
13721         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
13722         `Reachable' fields with a single `Reachability' one.
13723
13724 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13725
13726         * class.cs (FindMembers): Remove foreach's.
13727
13728         Bootstrap times:
13729
13730         BEFORE
13731                 Run 1:   8.74 seconds
13732                 Run 2:   8.71 seconds
13733
13734         AFTER
13735                 Run 1:   8.64 seconds
13736                 Run 2:   8.58 seconds
13737
13738
13739 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13740
13741         * cs-parser.jay:
13742         * gen-treedump.cs:
13743         * statement.cs:
13744         This patch does a few things:
13745                 1. EmptyStatement is now a singleton, so it is never reallocated.
13746                 2. All blah is EmptyStatement constructs have been changed to
13747                    blah == EmptyStatement.Value, which is much faster and valid
13748                    now that EmptyStatement is a singleton.
13749                 3. When resolving a block, rather than allocating a new array for
13750                    the non-empty statements, empty statements are replaced with
13751                    EmptyStatement.Value
13752                 4. Some recursive functions have been made non-recursive.
13753         Mainly the performance impact is from (3), however (1) and (2) are needed for
13754         this to work. (4) does not make a big difference in normal situations, however
13755         it makes the profile look saner.
13756
13757         Bootstrap times:
13758
13759         BEFORE
13760         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
13761         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
13762         Total memory allocated: 56397 KB
13763
13764         AFTER
13765         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
13766         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
13767         Total memory allocated: 55666 KB
13768
13769 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13770
13771         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
13772         than the hashtable in a hashtable version
13773
13774         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
13775         we always end up concating a string. This results in a huge perf
13776         loss, because many strings have to be tracked by the GC. In this
13777         patch, we first use a hashtable that works with two keys, so that
13778         the strings do not need to be concat'ed.
13779
13780         Bootstrap times:
13781         BEFORE
13782                 Run 1:   8.74 seconds
13783                 Run 2:   8.71 seconds
13784
13785         AFTER
13786                 Run 1:   8.65 seconds
13787                 Run 2:   8.56 seconds
13788
13789 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13790
13791         * Makefile: Add a new target `do-time' that does a quick and simple
13792         profile, leaving easy to parse output.
13793
13794 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
13795
13796         * codegen.cs (Init): Create the dynamic assembly with 
13797         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
13798
13799 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13800
13801         * support.cs: Make the PtrHashtable use only one
13802         instance of its comparer.
13803
13804 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
13805
13806         * typemanager.cs: Fix lookup of GetNamespaces.
13807
13808 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
13809
13810         * expression.cs: Removed redundant line.
13811
13812         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
13813         ArrayLists, use for loops with bounds.  
13814
13815         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
13816         arraylist.
13817
13818         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
13819         arraylists, use for loop with bounds.
13820
13821         The above three changes give us a 0.071 second performance
13822         improvement out of 3.294 seconds down to 3.223.  On my machine
13823         the above changes reduced the memory usage by 1,387 KB during
13824         compiler bootstrap.
13825
13826         * cs-parser.jay (QualifiedIdentifier): New class used to represent
13827         QualifiedIdentifiers.  Before we created a new string through
13828         concatenation, and mostly later on, the result would be
13829         manipulated by DecomposeQI through string manipulation.
13830
13831         This reduced the compiler memory usage for bootstrapping from
13832         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
13833         compile times in 0.05 seconds.
13834
13835 2003-11-28  Dick Porter  <dick@ximian.com>
13836
13837         * support.cs: Do string compares with the Invariant culture.
13838
13839         * rootcontext.cs: 
13840         * gen-treedump.cs: 
13841         * expression.cs: 
13842         * driver.cs: 
13843         * decl.cs: 
13844         * codegen.cs: 
13845         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
13846         the comparison is done with the Invariant culture.
13847
13848 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
13849
13850         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
13851         GetEnumerator method.
13852
13853         (ProbeCollectionType): Iterate starting at the most specific type
13854         upwards looking for a GetEnumerator
13855
13856         * expression.cs: Shift count can be up to 31 for int/uint and 63
13857         for long/ulong.
13858
13859 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
13860
13861         * statement.cs (Block.LookupLabel): Also look for the label on the
13862         children blocks.  Use a hash table to keep track of visited
13863         nodes. 
13864
13865         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
13866         we actually did transform the other operand, otherwise fall back
13867         to the common codepath that casts to long.
13868
13869         * cs-tokenizer.cs: Use the same code pattern as the int case.
13870         Maybe I should do the parsing myself, and avoid depending on the
13871         Parse routines to get this done.
13872
13873 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
13874
13875         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
13876         which fixes bug 51347.  This time test it.
13877
13878         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
13879         attributes for example can not tell the difference between these.
13880         The difference was only a syntax feature of the language. 
13881
13882         * attribute.cs: Apply attributes to delegates.
13883
13884         * delegate.cs: Call the apply attributes method.
13885
13886 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
13887
13888         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
13889         comparing 0 vs Byte.MinValue, not the value
13890
13891         (ImplicitConversionRequired): When reporting a conversion error,
13892         use error 31 to print out the constant error instead of the
13893         simpler 29.
13894
13895         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
13896         which fixes bug 51347.
13897
13898 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
13899
13900         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
13901         which fixes the -warnaserror command line option.
13902
13903 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
13904
13905         * cfold.cs (DoNumericPromotions): During constant folding of
13906         additions on UIntConstant, special case intconstants with
13907         IntConstants like we do on the expression binary operator. 
13908
13909 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
13910
13911         * convert.cs (ImplicitReferenceConversion): We were missing a case
13912         (System.Enum are not value types or class types, so we need to
13913         classify them separatedly).
13914
13915         * driver.cs: We do not support error 2007.
13916
13917 2003-11-12 Jackson Harper <jackson@ximian.com>
13918
13919         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
13920         system directory. Also use the full file name so users can
13921         libraries names mscorlib-o-tron.dll in a non system dir.
13922         
13923 2004-01-04  David Sheldon <dave-mono@earth.li>
13924
13925         * expression.cs: Added matching ")" to error message for CS0077.
13926
13927 2003-12-19  Martin Baulig  <martin@ximian.com>
13928
13929         * typemanager.cs (TypeManager.IsEqualGenericType): New public
13930         static method; see documentation in the method.
13931         (TypeManager.IsSubclassOrNestedChild): Allow IsEqualGenericType().
13932
13933         * convert.cs (Convert.ImplicitReferenceConversion,
13934         Convert.ImplicitReferenceConversionExists): Add support for
13935         generic type declarations; see gen-36.cs.
13936
13937 2003-12-19  Martin Baulig  <martin@ximian.com>
13938
13939         * pending.cs (Pending.InterfaceMethod): Use
13940         `Type.IsAssignableFrom()' instead of `=='.
13941
13942 2003-12-18  Martin Baulig  <martin@ximian.com>
13943
13944         * decl.cs (DeclSpace.AsAccessible): Check for array, pointer and
13945         byref types first.
13946
13947         * convert.cs (Convert.ImplicitStandardConversionExists): Use
13948         `expr_type.Equals (target_type)' instead of `=='.
13949
13950 2003-12-08  Martin Baulig  <martin@ximian.com>
13951
13952         * generics.cs (Constraints.Types): Removed.
13953         (Constraints.Resolve): Just resolve everything to TypeExpr's, not
13954         to Type's.
13955         (Constraints.ResolveTypes): New public method; resolves the
13956         TypeExpr's to Type's.
13957         (TypeParameter.Define): TypeBuilder.DefineGenericParameter() no
13958         longer takes the constraints.
13959         (TypeParameter.DefineMethod): Likewise.
13960         (TypeParameter.DefineType): New public method.  Calls
13961         `TypeBuilder/MethodBuilder.SetGenericParameterConstraints()' to set
13962         the constraints.
13963
13964 2003-12-08  Martin Baulig  <martin@ximian.com>
13965
13966         * convert.cs (Convert.ImplicitConversionStandard): Use
13967         `expr_type.Equals (target_type)' instead of `=='.
13968
13969 2003-12-08  Martin Baulig  <martin@ximian.com>
13970
13971         * typemanager.cs (TypeManager.GetReferenceType): Call
13972         `Type.MakeByRefType ()'.
13973
13974 2003-12-08  Martin Baulig  <martin@ximian.com>
13975
13976         * cs-parser.jay, cs-tokenizer.cs: `where' is not a keyword, it
13977         just has some special meaning in some situations.  For instance,
13978         it is allowed to use `where' as the name of a variable etc.
13979
13980 2003-12-04  Martin Baulig  <martin@ximian.com>
13981
13982         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
13983         `Type.MakeArrayType()' for array types.
13984
13985 2003-11-18  Miguel de Icaza  <miguel@ximian.com>
13986
13987         * expression.cs (Invocation.VerifyArgumentsCompat): Remove
13988         debugging message.
13989
13990         (SizeOf.DoResolve): assign the `type_queried' field.  This gets
13991         corlib to compile.
13992
13993 2003-11-16  Martin Baulig  <martin@ximian.com>
13994
13995         * codegen.cs (EmitContext.IsGeneric): Removed.
13996
13997         * ecore.cs (SimpleName.ResolveAsTypeStep): Always call
13998         ResolveGeneric() on the DeclSpace.
13999
14000 2003-11-16  Martin Baulig  <martin@ximian.com>
14001
14002         * generic.cs (TypeArguments.Resolve):
14003         `Expression.ResolveAsTypeTerminal()' returns a TypeExpr; call
14004         `ResolveType()' on it to get the Type.
14005
14006 2003-11-15  Martin Baulig  <martin@ximian.com>
14007
14008         * generic.cs (ConstructedType.GetInterfaces): Override this.
14009
14010 2003-11-14  Martin Baulig  <martin@ximian.com>
14011
14012         * interface.cs (Interface.DefineType): Define all type parameters
14013         before adding the interfaces we inherit.
14014
14015 2003-11-11  Martin Baulig  <martin@ximian.com>
14016
14017         * generic.cs (ConstructedType.ResolveType): Always call
14018         `gt.BindGenericParameters (atypes)'; also if `args.HasTypeArguments'.
14019
14020 2003-11-10  Martin Baulig  <martin@ximian.com>
14021
14022         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
14023         (TypeManager.InitCoreTypes): Initialize them here, but instead of
14024         calling `ResolveType()' on them, directly assign their `Type'.
14025
14026 2003-11-08  Martin Baulig  <martin@ximian.com>
14027
14028         * generic.cs (ConstructedType): Override `IsClass' etc.
14029
14030 2003-11-08  Martin Baulig  <martin@ximian.com>
14031
14032         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
14033         return value and the `out parent' parameter.
14034         (TypeContainer.DefineType): Moved the CS0644 check into
14035         GetClassBases().  Don't pass the interface types to the
14036         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
14037         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
14038
14039         * ecore.cs (TypeExpr.IsAttribute): New property.
14040         (TypeExpr.GetInterfaces): New method.
14041
14042         * interface.cs (Interface.GetInterfaceTypeByName): Return a
14043         TypeExpr instead of a Type.
14044         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
14045         (Interface.DefineType): Don't pass the interface types to the
14046         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
14047         them later and then call `TypeBulider.AddInterfaceImplementation()'.
14048
14049         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
14050         instead of a `Type[]'.
14051         (TypeManager.RegisterBuilder): Likewise.
14052         (TypeManager.AddUserInterface): Likewise.
14053         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
14054         `Type[]' and also return a `TypeExpr[]'.
14055         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
14056
14057 2003-11-08  Martin Baulig  <martin@ximian.com>
14058
14059         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
14060         Expression.     
14061
14062 2003-11-08  Martin Baulig  <martin@ximian.com>
14063
14064         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
14065         TypeManager.ResolveExpressionTypes().
14066
14067         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
14068         instead of an Expression.
14069         (TypeExpr): This is now an abstract base class for `TypeExpression'.
14070         (TypeExpression): New public class; formerly known as `TypeExpr'.
14071
14072         * expression.cs (ComposedCast): Derive from TypeExpr.
14073
14074         * typemanager.cs (TypeManager.system_*_expr): These are now
14075         TypExpr's instead of Expression's.
14076         (TypeManager.ResolveExpressionTypes): New public static function;
14077         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
14078         of them.        
14079
14080 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
14081
14082         * expression.cs (New.DoResolve): Do not dereference value that
14083         might be a null return.
14084
14085         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
14086         sure that the constant value has the right type.  Fixes an
14087         unreported bug, similar to 50425.
14088
14089         * const.cs (Const.LookupConstantValue): Call
14090         ImplicitStandardConversionExists before doing a conversion to
14091         avoid havng the TypeManager.ChangeType do conversions.
14092
14093         Reduced the number of casts used
14094
14095         (Const.ChangeType): New routine to enable reuse of the constant
14096         type changing code from statement.
14097
14098         * typemanager.cs (ChangeType): Move common initialization to
14099         static global variables.
14100
14101         Fixes #50425.
14102
14103         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
14104         every value type to go through, even if it was void.  Fix that. 
14105
14106         * cs-tokenizer.cs: Use is_identifier_start_character on the start
14107         character of the define, and the is_identifier_part_character for
14108         the rest of the string.
14109
14110 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
14111
14112         * expression.cs (UnaryMutator.EmitCode): When I updated
14113         LocalVariableReference.DoResolve, I overdid it, and dropped an
14114         optimization done on local variable references.
14115
14116 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
14117
14118         * ecore.cs: Convert the return from Ldlen into an int.
14119
14120 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
14121
14122         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
14123         the accessibility, this is a special case for toplevel non-public
14124         classes (internal for instance).
14125
14126 2003-10-20  Nick Drochak <ndrochak@gol.com>
14127
14128         * ecore.cs: Fix typo and build.  Needed another right paren.
14129
14130 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
14131
14132         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
14133         `internal' case regular and protected, but not allowing protected
14134         to be evaluated later.  Bug 49840
14135
14136 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
14137
14138         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
14139         to kb.Nlast, and not the kb.nFirst to isolate the switch
14140         statement.
14141
14142         Extract the underlying type, so enumerations of long/ulong are
14143         treated like long/ulong.
14144
14145 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
14146
14147         * expression.cs (New): Overload the meaning of RequestedType to
14148         track the possible creation of the NewDelegate type, since
14149         DoResolve is invoked more than once for new constructors on field
14150         initialization.
14151
14152         See bugs: #48800 and #37014
14153
14154         * cs-parser.jay (declare_local_constants): Take an arraylist
14155         instead of a single constant.
14156
14157         (local_constant_declaration): It should take a
14158         constant_declarators, not a constant_declarator.  Fixes 49487
14159
14160         * convert.cs: Fix error report.
14161
14162 2003-10-13 Jackson Harper <jackson@ximian.com>
14163
14164         * typemanager.cs (TypeToCoreType): Add float and double this fixes
14165         bug #49611
14166         
14167 2003-11-03  Martin Baulig  <martin@ximian.com>
14168
14169         * expression.cs (ArrayAccess.GetStoreOpcode): Added
14170         `out bool has_type_arg'; if set, we need to pass the type to
14171         ig.Emit().
14172         (ArrayAccess.GetStoreOpcode, ArrayAccess.EmitLoadOpcode): Use
14173         Stelem_Any/Ldelem_Any for generic parameters.   
14174
14175 2003-11-02  Martin Baulig  <martin@ximian.com>
14176
14177         * expression.cs (Invocation.EmitCall): Use
14178         `TypeManager.IsValueType()' to check whether it's a value type.
14179         Don't set `struct_call' when calling a method on a type parameter.
14180
14181 2003-11-02  Martin Baulig  <martin@ximian.com>
14182
14183         * generics.cs (ConstructedType.Resolve): Renamed to ResolveType()
14184         and removed the TypeBuilder argument.
14185
14186         * typemanager.cs (TypeManager.IsValueType): Return
14187         `t.IsGenericParameter || t.IsValueType'.
14188
14189 2003-10-25  Martin Baulig  <martin@ximian.com>
14190
14191         * decl.cs (DeclSpace.ResolveType): If we're a ConstructedType,
14192         call ConstructedType.Resolve() on it.
14193
14194         * generic.cs (ConstructedType.Resolve): Set `type' on success.
14195
14196 2003-10-25  Martin Baulig  <martin@ximian.com>
14197
14198         * class.cs (TypeContainer.GetClassBases): Changed
14199         `out Type parent' into `out TypeExpr parent'.  Moved CS0644 and
14200         CS8214 reporting here.
14201         (TypeContainer.DefineType): GetClassBases() gives us a `TypeExpr'
14202         instead of a `Type' for our parent.  In case of a recursive
14203         declaration (see tests/gen-23.cs for an example), our parent is a
14204         ConstructedType and it doesn't have its type set.  So, first
14205         create our own TypeBuilder, then call constructed.Resolve() to get
14206         the parent's type and finally TypeBuilder.SetParent() it.
14207
14208         * ecore.cs (TypeExpr.Name): New public virtual property.
14209
14210         * generic.cs
14211         (ConstructedType): We're now a TypeExpr and not just an Expression.
14212         (ConstructedType.ResolveAsTypeStep): Don't resolve our type
14213         arguments here; this is done later.
14214         (ConstructedType.Resolve): New public method to resolve the type
14215         arguments and bind them.
14216
14217 2003-10-21  Martin Baulig  <martin@ximian.com>
14218
14219         * convert.cs: Use `TypeManager.IsValueType' instead of
14220         'type.IsValueType' everywhere.
14221
14222         * typemanager.cs (TypeManager.IsValueType): Return true for type
14223         parameters.  The reason for this is that we need to box a type
14224         parameter when converting it to a reference type.
14225
14226         * cs-parser.jay: Added support for default value expressions.
14227
14228         * generics.cs (DefaultValueExpression): New public class.       
14229
14230 2003-10-17  Martin Baulig  <martin@ximian.com>
14231
14232         * generic.cs (Constraints.Resolve): Take a DecpSpace instead of a
14233         TypeContainer so we can also use this for Interfaces.
14234         (TypeParameter.Resolve): Likewise.
14235
14236         * interface.cs (Interface.DefineType): Added support for generic
14237         interfaces.
14238
14239         * cs-parser.jay: Added support for generic structs and interfaces.
14240
14241 2003-10-17  Martin Baulig  <martin@ximian.com>
14242
14243         * generic.cs (GenericMemberAccess.DoResolve): We can now actually
14244         call generic methods :-)
14245
14246 2003-10-16  Martin Baulig  <martin@ximian.com>
14247
14248         * cs-parser.jay (namespace_or_type_name): Only create a
14249         GenericMemberAccess if we actually have type arguments.
14250
14251 2003-10-13  Martin Baulig  <martin@ximian.com>
14252
14253         * class.cs (Method.Define): If we're a generic method, call
14254         TypeBuilder.DefineGenericMethod () before resolving
14255         the parameters.
14256         (MethodData): Added .ctor which takes an additional MethodBuilder
14257         argument; this is used for generic methods.
14258         (MethodData.Define): Call `builder.SetGenericMethodSignature()' if
14259         we already have a MethodBuilder.
14260
14261 2003-10-10  Martin Baulig  <martin@ximian.com>
14262
14263         * class.cs (Method): Added .ctor which takes a `GenericMethod'
14264         instead of a `DeclSpace'.  This is used for generic methods.
14265
14266         * cs-parser.jay (method_header): Added support for generic
14267         methods; create a `GenericMethod' instance and pass it to the
14268         `Method's .ctor; it'll be used as the `DeclSpace' to lookup
14269         parameters and locals.
14270
14271         * decl.cs (DeclSpace.SetParameterInfo): Removed Location argument
14272         since we already have the location.  Check whether we're a generic
14273         type declaration or a generic method and create the correct type
14274         parameter.
14275
14276         * generic.cs (TypeParameter.DefineMethod): New public method.
14277         (GenericMethod): New public class; derives from DeclSpace and is
14278         used for generic methods.       
14279
14280 2003-10-09  Martin Baulig  <martin@ximian.com>
14281
14282         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
14283         to the .ctor.
14284         (MethodCore.DoDefineParameters): Removed the TypeContainer
14285         argument; use the DeclSpace which was passed to the .ctor instead.
14286         (MethodCore.CheckParameter): Take a DeclSpace instead of a
14287         TypeContainer; we only need a DeclSpace here.
14288
14289 2003-10-09  Martin Baulig  <martin@ximian.com>
14290
14291         * class.cs (MethodData): Added additional `DeclSpace ds' argument
14292         to the .ctor.
14293         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
14294         EmitContext's .ctor.    
14295
14296 2003-10-09  Martin Baulig  <martin@ximian.com>
14297
14298         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
14299         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
14300         AsAccessible(), moved them as well.
14301
14302         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
14303
14304 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
14305
14306         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
14307         generation for >=, as spotted by Paolo, bug 48679.  
14308         Patch from David Waite.
14309
14310         * cs-tokenizer.cs: Add handling for #pragma.
14311
14312         * cs-parser.jay: Allow for both yield and yield return in the
14313         syntax.  The anti-cobolization of C# fight will go on!
14314
14315         * class.cs (TypeBuilder.DefineType): Catch error condition here
14316         (Parent.DefineType erroring out and returning null).
14317
14318         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
14319         coping with enumerations variables, we were mistakenly processing
14320         them as a regular value type instead of built-in types.  Fixes the
14321         bug #48063
14322
14323         * typemanager.cs (IsBuiltinOrEnum): New method.
14324
14325 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
14326
14327         * cs-parser.jay: Upgrade: yield now needs the return clause.
14328
14329 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
14330
14331         * cs-parser.jay : Renamed yyName to yyNames related to jay.
14332
14333 2003-09-29  Martin Baulig  <martin@ximian.com>
14334
14335         * typemanager.cs (TypeManager.GetMethodFlags): Added support for
14336         inflated generic methods.
14337
14338         * generics.cs (ConstructedType): Distinguish between open and
14339         closed constructed types; correctly resolve the arguments.
14340
14341 2003-09-22  Martin Baulig  <martin@ximian.com>
14342
14343         * generic.cs (ConstructedType.ResolveAsTypeCheck): Check whether
14344         all type arguments meet their constraints.
14345
14346 2003-09-19  Martin Baulig  <martin@ximian.com>
14347
14348         * decl.cs (MemberCache.SetupCacheForInterface): Take a
14349         `MemberCache parent' argument.  Normally, an interface doesn't
14350         have a parent type except System.Object, but we use this in gmcs
14351         for generic type parameters.
14352
14353 2003-09-18  Martin Baulig  <martin@ximian.com>
14354
14355         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
14356         on `type.IsInterface'; don't check whether the type has a parent
14357         to determine whether it's an interface.
14358
14359 2003-09-17  Martin Baulig  <martin@ximian.com>
14360
14361         * generic.cs (ConstructedType.ToString): Always use `name' as the
14362         type name.
14363
14364 2003-09-15  Martin Baulig  <martin@ximian.com>
14365
14366         * cs-parser.jay: Fix grammar wrt. type_parameter_constraints.
14367
14368         * generic.cs (Constraints.Resolve): New public method; this is
14369         called to resolve the constraint types and to check whether all
14370         the constraints are correct.
14371         (Constraints.Types): New public property.
14372         (TypeParameter.Resolve): New public method; resolves all the
14373         type's constraints.
14374
14375         * class.cs (TypeContainer.DefineType): Call
14376         TypeParameter.Resolve() before actually defining the type.
14377
14378 2003-09-15  Martin Baulig  <martin@ximian.com>
14379
14380         * class.cs (TypeContainer.DefineType): Added an error flag to
14381         avoid reporting duplicate CS0146's ("class definition is
14382         circular.").
14383
14384         * driver.cs (Driver.MainDriver): Abort if
14385         RootContext.ResolveTree() reported any errors.
14386
14387 2003-09-07  Martin Baulig  <martin@ximian.com>
14388
14389         * report.cs (Error, Warning): Added overloaded versions which take
14390         a `params object[] args' and call String.Format().
14391
14392 2003-09-07  Martin Baulig  <martin@ximian.com>
14393
14394         * decl.cs (DeclSpace..ctor): Don't call
14395         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
14396         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
14397         (DeclSpace.RecordDecl): New method.
14398
14399         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
14400
14401 2003-09-02  Ravi Pratap  <ravi@ximian.com>
14402
14403         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
14404         value attributes to be applied to ParameterBuilders.
14405
14406         * class.cs (MethodCore.LabelParameters): Make static and more
14407         generic so that it can be used from other places - like interface
14408         methods, for instance.
14409
14410         * interface.cs (Interface.Emit): Call LabelParameters before
14411         emitting attributes on the InterfaceMethod.
14412
14413 2003-09-07  Martin Baulig  <martin@ximian.com>
14414
14415         * generic.cs (ConstructedType.ResolveAsTypeStep): Report a CS8217
14416         if the number of type parameters doesn't match.
14417
14418 2003-09-04  Martin Baulig  <martin@ximian.com>
14419
14420         * expression.cs (ComposedCast.ResolveAsTypeStep): Added support
14421         for arrays of generic type params (ie. `!0[]').
14422
14423 2003-09-04  Martin Baulig  <martin@ximian.com>
14424
14425         * class.cs (TypeContainer.AsAccessible): Ignore generic parameters
14426         for the moment.
14427
14428 2003-09-04  Martin Baulig  <martin@ximian.com>
14429
14430         * decl.cs (DeclSpace.LookupGeneric): New method.
14431         (DeclSpace.CheckAccessLevel): Ignore generic parameters for the
14432         moment.
14433
14434         * generic.cs (TypeParameterExpr): Take a TypeParameter as
14435         argument, not just a string.
14436         (TypeParameter.Define): New public method; this is called to
14437         actually define the generic parameter; after this, you can use the
14438         new `Type' property to get the type.
14439
14440 2003-09-04  Martin Baulig  <martin@ximian.com>
14441
14442         * decl.cs (DeclSpace.SetParameterInfo): The `constraints' argument
14443         is now an ArrayList; initialize the result of the `TypeParameters'
14444         property here.
14445         (DeclSpace.GetGenericData): Removed.
14446         (DeclSpace.LookupGeneric): Temporarily removed; we need to
14447         implement this in a different way.
14448         (DeclSpace.GetTypeParameters): Removed; there's now a
14449         `TypeParameters' property.
14450         (DeclSpace.TypeParameters): New public property.
14451
14452         * generic.cs (Constraints): Make this class public.
14453         (TypeParameter): New public class.
14454
14455 2003-09-04  Martin Baulig  <martin@ximian.com>
14456
14457         * decl.cs (DeclSpace.GetTypeParameters): New method to return the
14458         generic parameters.
14459
14460         * class.cs (TypeContainer.DefineType): Call
14461         TypeBuilder.DefineGenericParameter () on all generic parameters if
14462         this is a generic type.
14463
14464 2003-08-28  Martin Baulig  <martin@ximian.com>
14465
14466         * sample-stack.il: Compile this with ilasm: "ilasm /dll
14467         sample-stack.il".
14468
14469         * sample-hello.cs: Compile this with gmcs: "gmcs
14470         /r:sample-stack.dll sample-hello.cs".
14471
14472 2003-08-28  Martin Baulig  <martin@ximian.com>
14473
14474         * generic.cs (ConstructedType.ResolveAsTypeStep): Actually bind
14475         the parameters to the generic type.
14476
14477 2003-08-28  Martin Baulig  <martin@ximian.com>
14478
14479         * cs-tokenizer.cs (parse_less_than): Also allow all builtin types.
14480
14481 2003-08-28  Martin Baulig  <martin@ximian.com>
14482
14483         * cs-parser.jay (opt_type_argument_list): Use
14484         `OP_GENERICS_LT type_arguments OP_GENERICS_GT'.
14485         (primary_expression): Replace `qualified_identifier' with `type_name'.
14486         (type_parameter_list): Use `OP_GENERICS_LT type_parameters OP_GENERICS_GT'.
14487
14488         * cs-tokenizer.cs (is_punct): When reading a `<', invoke a custom
14489         parser to check whether it is syntactically a type parameter list;
14490         return OP_GENERICS_LT/OP_GENERICS_GT instead of OP_LT/OP_GT in
14491         this case.
14492
14493 2003-08-26  Martin Baulig  <martin@ximian.com>
14494
14495         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
14496         resolving aliases; fixes #47927.
14497
14498 2003-08-26  Martin Baulig  <martin@ximian.com>
14499
14500         * statement.cs (Using.DoResolve): This is internally emitting a
14501         try/finally clause, so we need to set ec.NeedExplicitReturn if we
14502         do not always return.  Fixes #47681.
14503
14504 2003-08-26  Martin Baulig  <martin@ximian.com>
14505
14506         * decl.cs (MemberCore): Moved WarningNotHiding(),
14507         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
14508         into MemberBase.
14509         (AdditionResult): Make this nested in DeclSpace.
14510         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
14511         argument; call NamespaceEntry.Define() unless we're nested in a
14512         class or struct.
14513
14514         * namespace.cs (Namespace.DefineName): New public function.  This
14515         is called from DeclSpace's .ctor to add 
14516         (Namespace.Lookup): Include DeclSpaces in the lookup.
14517
14518         * class.cs (Operator): Derive from MemberBase, not MemberCore.
14519
14520         * const.cs (Const): Derive from MemberBase, not MemberCore.     
14521
14522 2003-08-25  Martin Baulig  <martin@ximian.com>
14523
14524         * convert.cs (Convert.ExplicitReferenceConversion): When
14525         converting from an interface type to a class, unbox if the target
14526         type is a struct type.  Fixes #47822.
14527
14528 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14529
14530         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
14531         #47854.
14532
14533 2003-08-22  Martin Baulig  <martin@ximian.com>
14534
14535         * class.cs (TypeManager.DefineType): When defining a nested type,
14536         call DefineType() on our parent; fixes #47801.
14537
14538 2003-08-22  Martin Baulig  <martin@ximian.com>
14539
14540         * class.cs (MethodData.Define): While checking if a method is an
14541         interface implementation, improve the test a bit more to fix #47654.
14542
14543 2003-08-22  Martin Baulig  <martin@ximian.com>
14544
14545         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
14546         correctly; fixes #47722.
14547
14548 2003-08-22  Martin Baulig  <martin@ximian.com>
14549
14550         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
14551         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
14552
14553         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
14554
14555 2003-08-22  Martin Baulig  <martin@ximian.com>
14556
14557         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
14558         can only be assigned in static constructors.  Fixes #47161.
14559
14560 2003-08-22  Martin Baulig  <martin@ximian.com>
14561
14562         Rewrote and improved the flow analysis code.
14563
14564         * flowbranching.cs (FlowBranching): Make this class abstract.
14565         (FlowBranching.CreateBranching): New static function to create a
14566         new flow branching.
14567         (FlowBranchingBlock, FlowBranchingException): New classes.
14568         (FlowBranching.UsageVector.Type): New public readonly field.
14569         (FlowBranching.UsageVector.Breaks): Removed the setter.
14570         (FlowBranching.UsageVector.Returns): Removed the setter.
14571         (FlowBranching.UsageVector): Added Break(), Return(),
14572         NeverReachable() and Throw() methods to modify the reachability.
14573         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
14574         done by FlowBranching.Merge().
14575         (FlowBranching.UsageVector.MergeChild): New method; merges the
14576         merge result into the current vector.
14577         (FlowBranching.Merge): New abstract method to merge a branching.
14578
14579 2003-08-12  Martin Baulig  <martin@ximian.com>
14580
14581         * expression.cs (Indirection.CacheTemporaries): Create the
14582         LocalTemporary with the pointer type, not its element type.
14583
14584 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
14585
14586         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
14587         token was a keyword or not.
14588
14589         Add `error' options where an IDENTIFIER was expected;  Provide
14590         CheckToken and CheckIdentifierToken convenience error reporting
14591         functions. 
14592
14593         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
14594
14595         * decl.cs: Rename `NamespaceEntry Namespace' public field into
14596         NameSpaceEntry NameSpaceEntry.
14597
14598         (LookupInterfaceOrClass): Avoid creating a full qualified name
14599         from namespace and name: avoid doing lookups when we know the
14600         namespace is non-existant.   Use new Tree.LookupByNamespace which
14601         looks up DeclSpaces based on their namespace, name pair.
14602
14603         * driver.cs: Provide a new `parser verbose' to display the
14604         exception thrown during parsing.  This is turned off by default
14605         now, so the output of a failure from mcs is more graceful.
14606
14607         * namespace.cs: Track all the namespaces defined in a hashtable
14608         for quick lookup.
14609
14610         (IsNamespace): New method
14611
14612 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
14613
14614         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
14615         we know that we need to concatenate (full typename can never be
14616         null). 
14617
14618         * class.cs: ditto.
14619
14620         * statement.cs: Use a bitfield;  Do not initialize to null things
14621         which are done by the constructor by default.
14622
14623         * cs-parser.jay: bug fix, parameter was 4, not 3.
14624
14625         * expression.cs: Just use the property;
14626
14627         * statement.cs: No need for GetVariableInfo method.
14628
14629 2003-08-08  Martin Baulig  <martin@ximian.com>
14630
14631         * flowanalysis.cs (FlowReturns): This is now nested in the
14632         `FlowBranching' class.
14633         (MyBitVector): Moved this here from statement.cs.
14634         (FlowBranching.SiblingType): New enum type.
14635         (FlowBranching.CreateSibling): Added `SiblingType' argument.
14636
14637 2003-08-07  Martin Baulig  <martin@ximian.com>
14638
14639         * flowanalysis.cs (FlowBranchingType): This is now nested in the
14640         `FlowBranching' class and called `BranchingType'.
14641
14642 2003-08-07  Martin Baulig  <martin@ximian.com>
14643
14644         * flowanalysis.cs: Moved all the control flow analysis code into
14645         its own file.
14646
14647 2003-08-07  Martin Baulig  <martin@ximian.com>
14648
14649         * assign.cs (Assign.DoResolve): `target' must either be an
14650         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
14651         #37319.
14652
14653 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
14654
14655         * expression.cs (BinaryMethod): This kind of expression is created by the
14656         Binary class if it determines that the operator has to be handled
14657         by a method.
14658
14659         (BinaryDelegate): This kind of expression is created if we are
14660         dealing with a + or - operator on delegates.
14661
14662         (Binary): remove method, argumetns, and DelegateOperator: when
14663         dealing with methods, 
14664
14665         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
14666
14667         * statement.cs (Block): use bitfields for the three extra booleans
14668         we had in use.   Remove unused topblock parameter.
14669
14670         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
14671
14672         * assign.cs: Drop extra unneeded tests.
14673
14674 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
14675
14676         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
14677
14678         * statement.cs (Foreach): Use VariableStorage instead of
14679         LocalBuilders.   
14680
14681         * codegen.cs (VariableStorage): New class used by clients that
14682         require a variable stored: locals or fields for variables that
14683         need to live across yield.
14684
14685         Maybe provide a convenience api for EmitThis+EmitLoad?
14686
14687         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
14688         these bad boys.
14689
14690 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
14691
14692         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
14693         RemapParameterLValue): New methods that are used to turn a
14694         precomputed FieldInfo into an expression like this:
14695
14696                 instance.FieldInfo
14697
14698         The idea is to use this instead of making LocalVariableReference
14699         have more than one meaning.
14700
14701         * cs-parser.jay: Add error production to BASE.
14702
14703         * ecore.cs: Deal with TypeManager.GetField returning null, which
14704         is now a valid return value.
14705
14706         (FieldExprNoAddress): New expression for Fields whose address can
14707         not be taken.
14708
14709         * expression.cs (LocalVariableReference): During the resolve
14710         phases, create new expressions if we are in a remapping context.
14711         Remove code that dealt with remapping here.
14712
14713         (ParameterReference): same.
14714
14715         (ProxyInstance): New expression, like the `This' expression, but
14716         it is born fully resolved.  We know what we are doing, so remove
14717         the errors that are targeted to user-provided uses of `this'.
14718
14719         * statement.cs (Foreach): our variable is now stored as an
14720         Expression;  During resolution, follow the protocol, dont just
14721         assume it will return this.
14722
14723 2003-08-06  Martin Baulig  <martin@ximian.com>
14724
14725         * support.cs (SeekableStreamReader.cs): New public class.
14726
14727         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
14728         SeekableStreamReader instead of the normal StreamReader.
14729
14730 2003-08-04  Martin Baulig  <martin@ximian.com>
14731
14732         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
14733         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
14734         deambiguate casts and delegate invocations.
14735         (parenthesized_expression): Use the new tokens to ensure this is
14736         not a cast of method invocation.
14737
14738         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
14739         when reading a `)' and Deambiguate_CloseParens () was previously
14740         called.
14741
14742         * expression.cs (ParenthesizedExpression): New class.  This is
14743         just used for the CS0075 test.
14744         (Binary.DoResolve): Check for CS0075.   
14745
14746 2003-07-29  Ravi Pratap  <ravi@ximian.com>
14747
14748         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
14749         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
14750         reference comparison.
14751
14752         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
14753         examine the ReturnType for equality - this is necessary in the
14754         cases of implicit and explicit operators whose signature also
14755         includes the return type.
14756
14757 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
14758
14759         * namespace.cs: Cache the result of the namespace computation,
14760         instead of computing it every time.
14761
14762 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
14763
14764         * decl.cs: Use a global arraylist that we reuse over invocations
14765         to avoid excesive memory consumption.  Reduces memory usage on an
14766         mcs compile by one meg (45 average).
14767
14768         * typemanager.cs (LookupTypeReflection): In .NET pointers are
14769         private, work around that.
14770
14771 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
14772
14773         * literal.cs (IntLiteral): Define Zero and One static literals. 
14774
14775         * cs-parser.jay (integer_literal): use static literals to reduce
14776         memory usage for the most used literals (0, 1 and -1).  211kb
14777         reduced in memory usage.
14778
14779         Replace all calls to `new ArrayList' with `new
14780         ArrayList(4)' which is a good average number for most allocations,
14781         and also requires only 16 bytes of memory for its buffer by
14782         default. 
14783
14784         This reduced MCS memory usage in seven megabytes for the RSS after
14785         bootstrapping.
14786
14787 2003-07-28  Ravi Pratap  <ravi@ximian.com>
14788
14789         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
14790         handle params methods the correct way by forming only one
14791         applicable set with params and normal methods in them. Earlier we
14792         were looking at params methods only if we found no normal methods
14793         which was not the correct thing to do.
14794
14795         (Invocation.BetterFunction): Take separate arguments indicating
14796         when candidate and the best method are params methods in their
14797         expanded form.
14798
14799         This fixes bugs #43367 and #46199.
14800
14801         * attribute.cs: Documentation updates.
14802
14803         (CheckAttribute): Rename to CheckAttributeTarget.
14804         (GetValidPlaces): Rename to GetValidTargets.
14805
14806         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
14807         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
14808
14809         Fixes bug #44468.
14810
14811 2003-07-28  Miguel de Icaza  <miguel@ximian.com>
14812
14813         * codegen.cs: Compute IsGeneric correctly.
14814
14815         * cs-parser.jay: Introduce OP_GENERIC_LT for the grammar ambiguity
14816         resolution. 
14817
14818         Bring back (temporarily) OP_LEFT_SHIFT, OP_RIGHT_SHIFT,
14819         OP_SHIFT_RIGHT_ASSIGN, OP_SHIFT_LEFT_ASSIGN.  There were too many
14820         regressions, and I was chasing more bugs than I required.
14821
14822         * interface.cs: Use expressions for base type names (like classes
14823         and structs have been doing for a while now), and resolve that.
14824         This patch should probably go into head as well.
14825
14826         This makes it one less user of FindType.
14827
14828 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
14829
14830         This compiler can not self host currently.  Need to fix that.
14831         
14832         * Makefile: compile to `gmcs.exe'
14833
14834         * driver.cs: Turn on v2 by default on gmcs.
14835
14836         * generic.cs (ConstructedType): Does no longer take a container
14837         type argument;  That will be taken care of later.
14838
14839         (ConstructedType.DoResolve, ConstructedType.ResolveAsTypeStep):
14840         Use SimpleName to resolve for now, so we can continue the work on
14841         the parser, until we get Type.GetType that understands generics.
14842
14843         (ConstructedType.ToString): Implement
14844
14845         (TypeArguments.Resolve): Resolve the child expressions as types. 
14846         
14847         * cs-parser.jay: Rename interface_constraints to
14848         type_parameter_constraints
14849
14850         (namespace_or_type_name): Only use constructed types for the basic
14851         construction, we will deal with identifier<...> later.
14852
14853         (type/type_name): No longer call DecomposeQI, as
14854         namespace_or_type_name is always decoded now.
14855         
14856 2003-07-22  Ravi Pratap  <ravi@ximian.com>
14857
14858         * expression.cs (Invocation.OverloadResolve): Follow the spec more
14859         closely: we eliminate methods in base types when we have an
14860         applicable method in a top-level type.
14861
14862         Please see section 14.5.5.1 for an exact description of what goes
14863         on. 
14864
14865         This fixes bug #45127 and a host of other related to corlib compilation.
14866
14867         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
14868         array is the method corresponding to the top-level type (this is
14869         because of the changes made to icall.c) so we change this
14870         accordingly.
14871
14872         (MethodGroupExpr.Name): This too.
14873
14874         * typemanager.cs (GetElementType): New method which does the right
14875         thing when compiling corlib. 
14876
14877         * everywhere: Make use of the above in the relevant places.
14878
14879 2003-07-22  Martin Baulig  <martin@ximian.com>
14880
14881         * cs-parser.jay (invocation_expression): Moved
14882         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
14883         `cast_expression', but create a InvocationOrCast which later
14884         resolves to either an Invocation or a Cast.
14885
14886         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
14887         method; call this before EmitStatement() to make sure that this
14888         expression can be used as a statement.
14889
14890         * expression.cs (InvocationOrCast): New class; resolves to either
14891         an Invocation or a Cast.
14892
14893         * statement.cs (StatementExpression): Call ResolveStatement() on
14894         the ExpressionStatement before emitting it.
14895
14896 2003-07-21  Martin Baulig  <martin@ximian.com>
14897
14898         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
14899         `ref' and `out' attributes match; fixes #46220.
14900         (MemberAccess.ResolveMemberAccess): You can't reference a type
14901         through an expression; fixes #33180.
14902         (Indexers.GetIndexersForType): Don't return the indexers from
14903         interfaces the class implements; fixes #46502.
14904
14905 2003-07-21  Martin Baulig  <martin@ximian.com>
14906
14907         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
14908         CS0661 checks; fixes bug #30442.
14909
14910 2003-07-21  Martin Baulig  <martin@ximian.com>
14911
14912         * decl.cs (AdditionResult): Added `Error'.
14913
14914         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
14915
14916         * typemanager.cs (TypeManager.ChangeType): Catch exceptions; makes
14917         cs0031.cs actually work.
14918
14919  2003-07-20  Miguel de Icaza  <miguel@ximian.com>
14920  
14921         * cs-parser.jay (namespace_name): do not use
14922         namespace_or_type_name, use qualified_identifier, because
14923         namespace_or_type_name will soon return a composed expression
14924         instead of a string.
14925  
14926         (namespace_or_type_name): Instead of returning a string, now this
14927         production returns an expression.
14928  
14929         * codegen.cs (EmitContext): Setup IsGeneric property based on
14930         whether our DeclSpace is generic, our the method is generic.
14931  
14932         * modifier.cs (Modifiers.METHOD_GENERIC): New definition, use if
14933         the method is generic.
14934  
14935         * cs-parser.jay (type_arguments, opt_type_argument_list,
14936         type_parameters, type_parameter_list, opt_type_parameter_list,
14937         type_parameter,, opt_type_parameter_constraints_clauses,
14938         type_parameter_constraints_clauses,
14939         type_parameter_constraint_clause, type_parameter_constraint,
14940         interface_constraints): Add new production
14941  
14942         * decl.cs (DeclSpace): IsGeneric, flag to track whether this
14943         DeclSpace is generic or not.
14944  
14945         (DeclSpace.SetParameterInfo): New routine, used to set the
14946         parameter info for a type.
14947  
14948         (DeclSpace.LookupGeneric): Lookups a name, and if it is a generic,
14949         returns a GenericTypeExpr
14950  
14951         * ecore.cs (SimpleName.ResolveAsTypeStep): If our container is
14952         generic, lookup the generic argument.
14953  
14954         * attribute.cs: Do not allow TypeParameterExpressions in
14955         Attributes.
14956  
14957         * class.cs: Do not allow the Main method to be defined in a
14958         Generic container.
14959  
14960         * expression.cs (SizeOf): Do not allow generic types to be used as
14961         arguments to sizeof.
14962  
14963         * typemanager.cs (IsGeneric): Wrapper for Reflection when we have
14964         it: whether a type is generic or not.  Only works for types we are
14965         currently building for now.
14966         
14967 2003-07-20  Martin Baulig  <martin@ximian.com>
14968
14969         * namespace.cs: Fixed that bug which caused a crash when compiling
14970         the debugger's GUI.
14971
14972 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
14973
14974         * typemanager.cs (LookupTypeReflection): Never expose types which
14975         are NotPublic, NestedPrivate, NestedAssembly, or
14976         NestedFamANDAssem.  We used to return these, and later do a check
14977         that would report a meaningful error, but the problem is that we
14978         would not get the real match, if there was a name override.
14979
14980 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
14981
14982         * namespace.cs (Namespace, Name): Do not compute the namespace
14983         name dynamically, compute it in the constructor.  This reduced
14984         memory usage by 1697 KB.
14985
14986         * driver.cs: Use --pause to pause at the end.
14987
14988 2003-07-17  Peter Williams  <peter@newton.cx>
14989
14990         * Makefile: Change the name of the test target so that it doesn't
14991         conflict with the recursive test target.
14992
14993 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
14994
14995         * expression.cs (LocalVariableReference.Emit, EmitAssign,
14996         AddressOf): Do not use EmitThis, that was wrong, use the actual
14997         this pointer.
14998
14999 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
15000
15001         * class.cs (MethodData.Define): While checking if a method is an
15002         interface implementation, improve the test: If we are not public
15003         (use new test here: use the computed MethodAttributes directly,
15004         instead of the parsed modifier flags) check if the `implementing'
15005         method comes from an interface or not.
15006
15007         * pending.cs (VerifyPendingMethods): Slightly better error
15008         message.
15009
15010         * makefile: add test target that does the mcs bootstrap.
15011
15012 2003-07-16  Ravi Pratap  <ravi@ximian.com>
15013
15014         * interface.cs (Define): Do nothing here since there are no
15015         members to populate etc. Move the attribute emission out of here
15016         since this was just totally the wrong place to put it. Attribute
15017         application happens during the 'Emit' phase, not in the 'Define'
15018         phase.
15019
15020         (Emit): Add this method and move the attribute emission here
15021
15022         * rootcontext.cs (EmitCode): Call the Emit method on interface
15023         types too.
15024
15025 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
15026
15027         * expression.cs (OverloadResolve): Report error only if Location
15028         is not 'Null' which means that there was a probe going on.
15029
15030 2003-07-14  Martin Baulig  <martin@ximian.com>
15031
15032         * expression.cs (ConditionalLogicalOperator): New public class to
15033         implement user defined conditional logical operators.
15034         This is section 14.11.2 in the spec and bug #40505.
15035
15036 2003-07-14  Martin Baulig  <martin@ximian.com>
15037
15038         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
15039
15040 2003-07-14  Martin Baulig  <martin@ximian.com>
15041
15042         * codegen.cs (EmitContext.InFixedInitializer): New public field.
15043
15044         * ecore.cs (IVariable.VerifyFixed): New interface method.
15045
15046         * expression.cs (Unary.ResolveOperator): When resolving the `&'
15047         operator, check whether the variable is actually fixed.  Fixes bug
15048         #36055.  Set a variable definitely assigned when taking its
15049         address as required by the spec.
15050
15051         * statement.cs (LocalInfo.IsFixed): New field.
15052         (LocalInfo.MakePinned): Set `IsFixed' to true.
15053
15054 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
15055
15056         * attribute.cs (Attribute.Resolve): While doing a Member lookup
15057         for .ctors, ensure that we only ask for members declared in the
15058         attribute type (BindingFlags.DeclaredOnly).
15059
15060         Fixes bug #43632.
15061
15062         * expression.cs (Error_WrongNumArguments): Report error 1501
15063         correctly the way CSC does.
15064
15065 2003-07-13  Martin Baulig  <martin@ximian.com>
15066
15067         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
15068         lookup on the fully qualified name, to make things like "X.X" work
15069         where "X.X" is a fully qualified type name, but we also have a
15070         namespace "X" in the using list.  Fixes #41975.
15071
15072 2003-07-13  Martin Baulig  <martin@ximian.com>
15073
15074         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
15075         function. If we're a CompoundAssign, we need to create an embedded
15076         CompoundAssign, not an embedded Assign.
15077         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
15078         Fixes #45854.
15079
15080 2003-07-13  Martin Baulig  <martin@ximian.com>
15081
15082         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
15083         work to fix bug #46088.
15084
15085 2003-07-13  Ravi Pratap <ravi@ximian.com>
15086
15087         * class.cs (Operator.Emit): Do not emit attributes here - it is
15088         taken care of by the Method class that we delegate too. This takes
15089         care of bug #45876.
15090
15091 2003-07-10  Martin Baulig  <martin@ximian.com>
15092
15093         * expression.cs (TypeOfVoid): New class.
15094         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
15095
15096 2003-07-10  Martin Baulig  <martin@ximian.com>
15097
15098         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
15099         bug #35957.
15100
15101 2003-07-10  Martin Baulig  <martin@ximian.com>
15102
15103         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
15104         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
15105
15106         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
15107
15108         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
15109
15110 2003-07-10  Martin Baulig  <martin@ximian.com>
15111
15112         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
15113         of decimal.  Fixes #42850.
15114
15115         NOTE: I also fixed the created byte blob, but this doesn't work on
15116         the MS runtime and csc never produces any byte blobs for decimal
15117         arrays.
15118
15119 2003-07-10  Martin Baulig  <martin@ximian.com>
15120
15121         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
15122         structs; fixes #32068.
15123         (Block.AddChildVariableNames): Fixed #44302.
15124
15125 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15126
15127         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
15128
15129 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
15130
15131         * attribute.cs: And this test is onger needed.
15132
15133 2003-07-08  Martin Baulig  <martin@ximian.com>
15134
15135         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
15136         inaccessible types.  Fixes #36313.
15137
15138         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
15139
15140         * namespace.cs (NamespaceEntry): Create implicit entries for all
15141         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
15142         implicit entries for N1.N2 and N1.
15143
15144 2003-07-08  Martin Baulig  <martin@ximian.com>
15145
15146         Rewrote the handling of namespaces to fix a lot of the issues
15147         wrt. `using' aliases etc.
15148
15149         * namespace.cs (Namespace): Splitted this class into a
15150         per-assembly `Namespace' and a per-file `NamespaceEntry'.
15151
15152         * typemanager.cs (TypeManager.IsNamespace): Removed.
15153         (TypeManager.ComputeNamespaces): Only compute namespaces from
15154         loaded assemblies here, not the namespaces from the assembly we're
15155         currently compiling.
15156
15157 2003-07-08  Martin Baulig  <martin@ximian.com>
15158
15159         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
15160
15161 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
15162
15163         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
15164         already fixed it.  
15165
15166         I thought about the memory savings here, but LookupTypeReflection
15167         is used under already very constrained scenarios.  Compiling
15168         corlib or mcs only exposes one hit, so it would not really reduce
15169         any memory consumption.
15170
15171 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15172
15173         * typemanager.cs: fixes bug #45889 by only adding public types from
15174         other assemblies to the list of known types.
15175
15176 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
15177
15178         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
15179         on the type we resolved.
15180
15181 2003-07-05  Martin Baulig  <martin@ximian.com>
15182
15183         * pending.cs (PendingImplementation.ParentImplements): Don't
15184         create the proxy if the parent is abstract.
15185
15186         * class.cs (TypeContainer.DefineIndexers): Process explicit
15187         interface implementations first.  Fixes #37714.
15188
15189 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
15190
15191         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
15192         defined recursively;  but since we modify the input parameters
15193         (left is set to `this' temporarily), we reset this value if the
15194         left_is_explicit is false, which gives the original semantics to
15195         the code.  
15196
15197         * literal.cs (NullPointer): new class used to represent a null
15198         literal in a pointer context.
15199
15200         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
15201         type is a pointer, use a NullPointer object instead of a
15202         NullLiteral.   Closes 43687
15203
15204         (ExplicitConversion): Convert pointer values using
15205         the conv opcode to the proper type.
15206
15207         * ecore.cs (New): change ValueTypeVariable property into a method,
15208         that returns whether the valuetype is suitable for being used.
15209
15210         * expression.cs (Binary.DoNumericPromotions): Only return if we
15211         the int constant was a valid uint, and we can return both left and
15212         right as uints.  If not, we continue processing, to trigger the
15213         type conversion.  This fixes 39018.
15214
15215         * statement.cs (Block.EmitMeta): During constant resolution, set
15216         the CurrentBlock property on the emitcontext, so that we resolve
15217         constants propertly.
15218
15219 2003-07-02  Martin Baulig  <martin@ximian.com>
15220
15221         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
15222         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
15223
15224         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
15225         than emitting it here.
15226
15227         * statement.cs: Fixed some more flow analysis bugs.
15228
15229 2003-07-02  Martin Baulig  <martin@ximian.com>
15230
15231         * class.cs (MethodData.Define): When implementing interface
15232         methods, set Final unless we're Virtual.
15233
15234         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
15235         check work for interface methods.
15236
15237 2003-07-01  Martin Baulig  <martin@ximian.com>
15238
15239         * ecore.cs (EmitContext.This): Replaced this property with a
15240         GetThis() method which takes a Location argument.  This ensures
15241         that we get the correct error location for a CS0188.
15242
15243 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
15244
15245         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
15246         ImplicitStandardConversion.
15247
15248         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
15249
15250 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
15251
15252         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
15253         optimization.
15254
15255 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
15256
15257         * class.cs (Constructor.Define): Turn off initlocals for unsafe
15258         constructors.
15259
15260         (MethodData.Define): Turn off initlocals for unsafe methods.
15261
15262 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
15263
15264         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
15265         complete;  Fixes #37521.
15266
15267         * delegate.cs: Use Modifiers.TypeAttr to compute the
15268         TypeAttributes, instead of rolling our own.  This makes the flags
15269         correct for the delegates.
15270
15271 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
15272
15273         * class.cs (Constructor.Define): Set the private flag for static
15274         constructors as well.
15275
15276         * cs-parser.jay (statement_expression): Set the return value to
15277         null, to avoid a crash when we catch an error.
15278
15279 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
15280
15281         * cs-parser.jay: Applied patch from Jackson that adds support for
15282         extern and unsafe modifiers to destructor declarations.
15283
15284         * expression.cs: Report error 21 if the user is trying to index a
15285         System.Array.
15286
15287         * driver.cs: Add an error message, suggested by the bug report.
15288
15289         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
15290         if we do not have a ": this ()" constructor initializer.  Fixes 45149
15291
15292 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
15293
15294         * namespace.cs: Add some information to reduce FAQs.
15295
15296 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
15297
15298         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
15299         underlying enumeration types.  Fixes #43915.
15300
15301         * expression.cs: Treat ushort/short as legal values to be used in
15302         bitwise operations.
15303
15304 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
15305
15306         * delegate.cs: transfer custom attributes for paramenters from
15307         the delegate declaration to Invoke and BeginInvoke.
15308
15309 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
15310
15311         * attribute.cs: handle custom marshalers and emit marshal info
15312         for fields, too.
15313
15314 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
15315
15316         * makefile.gnu: Added anonymous.cs to the compiler sources.
15317
15318 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
15319
15320         * iterators.cs: Change the name of the proxy class to include two
15321         underscores.
15322
15323         * cs-parser.jay: Update grammar to include anonymous methods.
15324
15325         * anonymous.cs: new file.
15326
15327 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
15328
15329         * class.cs (Field.Define): Add missing test for pointers and
15330         safety. 
15331
15332 2003-05-27  Ravi Pratap  <ravi@ximian.com>
15333
15334         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
15335         we use the stobj opcode.
15336
15337         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
15338         since it wasn't the correct fix. 
15339
15340         It still is puzzling that we are required to use stobj for IntPtr
15341         which seems to be a ValueType.
15342
15343 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
15344
15345         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
15346         during regular simple name resolution.   Now, the trick is that
15347         instead of returning for processing the simplename, we do a
15348         TypeManager.LookupType (ie, a rooted lookup as opposed to a
15349         contextual lookup type).   If a match is found, return that, if
15350         not, return for further composition.
15351
15352         This fixes long-standing 30485.
15353
15354         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
15355         using the address to initialize an object, do an Stobj instead of
15356         using the regular Stelem.
15357
15358         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
15359         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
15360         Because if we are a BaseIndexerAccess that value will be true.
15361         Fixes 43643.
15362
15363         * statement.cs (GotoCase.Resolve): Return after reporting an
15364         error, do not attempt to continue. 
15365
15366         * expression.cs (PointerArithmetic.Emit): If our operand is a
15367         long, convert our constants to match the operand before
15368         multiplying.  Convert to I type before adding.   Fixes 43670.
15369
15370 2003-05-14  Ravi Pratap  <ravi@ximian.com>
15371
15372         * enum.cs (ImplicitConversionExists) : Rename to
15373         ImplicitEnumConversionExists to remove ambiguity. 
15374
15375         * ecore.cs (NullCast): New type of cast expression class which
15376         basically is very similar to EmptyCast with the difference being
15377         it still is a constant since it is used only to cast a null to
15378         something else
15379         (eg. (string) null)
15380
15381         * convert.cs (ImplicitReferenceConversion): When casting a null
15382         literal, we return a NullCast.
15383
15384         * literal.cs (NullLiteralTyped): Remove - I don't see why this
15385         should be around anymore.
15386
15387         The renaming (reported was slightly wrong). Corrections:
15388
15389         ConvertImplicitStandard -> ImplicitConversionStandard
15390         ConvertExplicitStandard -> ExplicitConversionStandard
15391
15392         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
15393         before passing them in !
15394
15395         * convert.cs (ImplicitConversionStandard): When comparing for
15396         equal expr and target types, ensure that expr is not a
15397         NullLiteral.
15398
15399         In general, we must not be checking (expr_type ==
15400         target_type) in the top level conversion methods
15401         (ImplicitConversion, ExplicitConversion etc). This checking is
15402         done in the methods that they delegate to.
15403
15404 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
15405
15406         * convert.cs: Move Error_CannotConvertType,
15407         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
15408         ImplicitNumericConversion, ImplicitConversionExists,
15409         ImplicitUserConversionExists, StandardConversionExists,
15410         FindMostEncompassedType, FindMostSpecificSource,
15411         FindMostSpecificTarget, ImplicitUserConversion,
15412         ExplicitUserConversion, GetConversionOperators,
15413         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
15414         TryImplicitIntConversion, Error_CannotConvertImplicit,
15415         ConvertImplicitRequired, ConvertNumericExplicit,
15416         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
15417         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
15418         its own file.
15419
15420         Perform the following renames:
15421
15422         StandardConversionExists -> ImplicitStandardConversionExists
15423         ConvertImplicit -> ImplicitConversion
15424         ConvertImplicitStandard -> ImplicitStandardConversion
15425         TryImplicitIntConversion -> ImplicitIntConversion
15426         ConvertImplicitRequired -> ImplicitConversionRequired
15427         ConvertNumericExplicit -> ExplicitNumericConversion
15428         ConvertReferenceExplicit -> ExplicitReferenceConversion
15429         ConvertExplicit -> ExplicitConversion
15430         ConvertExplicitStandard -> ExplicitStandardConversion
15431
15432 2003-05-19  Martin Baulig  <martin@ximian.com>
15433
15434         * statement.cs (TypeInfo.StructInfo): Made this type protected.
15435         (TypeInfo): Added support for structs having structs as fields.
15436
15437         * ecore.cs (FieldExpr): Implement IVariable.
15438         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
15439         VariableInfo for the field.
15440
15441 2003-05-18  Martin Baulig  <martin@ximian.com>
15442
15443         * expression.cs (This.DoResolve): Report a CS0027 if we're
15444         emitting a field initializer.
15445
15446 2003-05-18  Martin Baulig  <martin@ximian.com>
15447
15448         * expression.cs (This.ResolveBase): New public function.
15449         (This.DoResolve): Check for CS0188.
15450
15451         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
15452         This.Resolve().
15453
15454         * ecore.cs (MethodGroupExpr.DoResolve): Set the
15455         `instance_expression' to null if we don't have any non-static
15456         methods.
15457
15458 2003-05-18  Martin Baulig  <martin@ximian.com>
15459
15460         Reworked the way how local variables and parameters are handled by
15461         the flow analysis code.
15462
15463         * statement.cs (TypeInfo, VariableMap): New public classes.
15464         (VariableInfo): New public class.  This is now responsible for
15465         checking whether a variable has been assigned.  It is used for
15466         parameters and local variables.
15467         (Block.EmitMeta): Take the InternalParameters as argument; compute
15468         the layout of the flow vectors here.
15469         (Block.LocalMap, Block.ParameterMap): New public properties.
15470         (FlowBranching): The .ctor doesn't get the InternalParameters
15471         anymore since Block.EmitMeta() now computes the layout of the flow
15472         vector.
15473         (MyStructInfo): This class is now known as `StructInfo' and nested
15474         in `TypeInfo'; we don't access this directly anymore.
15475
15476         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
15477         property and removed IsAssigned(), IsFieldAssigned(),
15478         SetAssigned() and SetFieldAssigned(); we now call them on the
15479         VariableInfo so we don't need to duplicate this code everywhere.
15480
15481         * expression.cs (ParameterReference): Added `Block block' argument
15482         to the .ctor.
15483         (LocalVariableReference, ParameterReference, This): The new
15484         VariableInfo class is now responsible for all the definite
15485         assignment stuff.
15486
15487         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
15488         IsParameterAssigned, SetParameterAssigned): Removed.
15489
15490 2003-05-18  Martin Baulig  <martin@ximian.com>
15491
15492         * typemanager.cs (InitCoreTypes): Try calling
15493         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
15494         the 3-args-version.  Corlib now also needs our `void_type'.
15495         (GetMethod): Added overloaded version which takes an optional
15496         `bool report_errors' to allow lookups of optional methods.
15497
15498 2003-05-12  Martin Baulig  <martin@ximian.com>
15499
15500         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
15501         only used for locals and not for parameters.
15502
15503 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
15504
15505         * support.cs (InternalParameters.ParameterType): Return the
15506         ExternalType of the parameter.
15507
15508         * parameter.cs (Parameter.ExternalType): drop the two arguments,
15509         they were unused.
15510
15511 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
15512
15513         * class.cs (MethodData.Define): Do not set the `newslot' on
15514         interface members, if they are also flagged as "override".
15515
15516         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
15517         better code for ++i and i++.  This only works for static fields
15518         and local variables.
15519
15520         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
15521         want to pull the DeclSpace out of the builder_to_declspace instead
15522         of the TypeBuilder (like in TypeContainer.FindMembers).
15523
15524         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
15525         instead of LookupTypeContainer.  Fixes the crash on .NET for
15526         looking up interface members.
15527
15528         * const.cs: Create our own emit context during the Definition
15529         stage, so that constants are evaluated in the proper context, when
15530         a recursive definition happens.
15531
15532 2003-05-11  Martin Baulig  <martin@ximian.com>
15533
15534         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
15535         new block for a switch section.
15536         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
15537         the adding/lookup in the switch block.  Fixes #39828.
15538
15539 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
15540
15541         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
15542         functionality: I needed to convert the data after I had performed
15543         the add/sub operation into the operands type size.
15544
15545         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
15546         pass the type for the box operation, otherwise the resulting
15547         object would have been of type object.
15548
15549         (BoxedCast): Add constructor to specify the type to box as.
15550
15551 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
15552
15553         * iterators.cs: I was reusing the `count' variable inadvertently,
15554         take steps to not allow this to happen.
15555
15556 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
15557
15558         * attribute.cs (Attribute.Resolve): Params attributes are encoded
15559         by creating an array at the point where the params starts and
15560         putting all those arguments there, then adjusting the size of the
15561         array.
15562
15563 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
15564
15565         * expression.cs (New.AddressOf): Implement interface
15566         IMemoryLocation.  This is used when the `new' operator is used in
15567         the context of an invocation to a method on a value type.
15568
15569         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
15570         example. 
15571
15572         * namespace.cs: Also check the using aliases here.
15573
15574         * driver.cs: Move the test for using validity after the types have
15575         been entered, so we do a single pass that also includes the using
15576         aliases. 
15577
15578         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
15579         in the regular case.   CreateSiblingForFinally is doing extra
15580         error checking.
15581
15582         * attribute.cs (GetAttributeArgumentExpression): Store the result
15583         on an out value, and use the return value to indicate failure
15584         instead of using null (which is a valid return for Constant.GetValue).
15585
15586         * statement.cs: Perform the analysis flow for the increment
15587         portion after the statement, because this will be the real flow of
15588         execution.  Fixes #42385
15589
15590         * codegen.cs (EmitContext.EmitArgument,
15591         EmitContext.EmitStoreArgument): New helper functions when the
15592         RemapToProxy flag is set.
15593
15594         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
15595         function.
15596
15597         Add support for remapping parameters. 
15598
15599         * iterators.cs: Propagate parameter values;  Store parameter
15600         values in the proxy classes.
15601
15602 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
15603
15604         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
15605         need a proxy reference;  I do not know what I was thinking
15606
15607         * cs-parser.jay (constructor_initializer): catch another error,
15608         and display nice message.
15609
15610         (field_declaration): catch void field declaration
15611         to flag a better error. 
15612
15613         * class.cs (MemberBase.CheckBase): Report an error instead of a
15614         warning if a new protected member is declared in a struct. 
15615         (Field.Define): catch the error of readonly/volatile.
15616
15617         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
15618
15619         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
15620         volatile variable is taken
15621
15622 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
15623
15624         * statement.cs (Fixed.Resolve): Report an error if we are not in
15625         an unsafe context.
15626
15627 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
15628
15629         * typemanager.cs: reuse the code that handles type clashes for
15630         delegates and enumerations.
15631
15632         * class.cs (Report28): Always report.
15633
15634         * expression.cs (EncodeAsAttribute): Allow nulls here.
15635
15636 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
15637
15638         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
15639         the functionality for testing whether an expression is valid for
15640         an attribute here.  Also handle the case of arrays of elements
15641         being stored. 
15642
15643         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
15644         encoding a linear array into an array of objects that are suitable
15645         to be passed to an CustomAttributeBuilder.
15646
15647         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
15648
15649         * ecore.cs: (FieldExpr): Handle field remapping here.
15650
15651         * iteratators.cs: Pass the instance variable (if the method is an
15652         instance method) to the constructors, so we can access the field
15653         variables on the class.
15654
15655         TODO: Test this with structs.  I think the THIS variable on
15656         structs might have to be a pointer, and not a refenrece
15657
15658 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
15659
15660         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
15661         local variables to fields in a proxy class.
15662
15663         * iterators.cs (PopulateProxy): Rename our internal fields to
15664         <XXX>.  
15665         Create a <THIS> field if we are an instance method, so we can
15666         reference our parent container variables.
15667         (MapVariable): Called back from the EmitContext code to enter a
15668         new variable to field mapping into the proxy class (we just create
15669         a FieldBuilder).
15670
15671         * expression.cs
15672         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
15673         for using the remapped locals to fields.
15674
15675         I placed the code here, because that gives the same semantics to
15676         local variables, and only changes the Emit code.
15677
15678         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
15679         statements inside iterators.
15680         (VariableInfo): Add a FieldBuilder for the cases when we are
15681         remapping local variables to fields in a proxy class
15682
15683         * ecore.cs (SimpleNameResolve): Avoid testing two times for
15684         current_block != null.
15685
15686         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
15687         not cope with strings, as it has been moved to the
15688         TableSwitchEmit.  Fixed bug in switch generation.
15689
15690         * expression.cs (New.DoResolve): Provide more context for the user
15691         when reporting an error.
15692
15693         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
15694         pointers. 
15695
15696         * expression.cs (MemberAccess.DoResolve): When we get a type back,
15697         check the permissions for it.  Note than in a type-resolution
15698         context the check was already present in DeclSpace.ResolveType,
15699         but was missing from the MemberAccess.
15700
15701         (ArrayCreation.CheckIndices): warn if the user has
15702         more nested levels of expressions, but there are no more
15703         dimensions specified.  Avoids crash on bug 41906.
15704
15705 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
15706
15707         * statement.cs (Block): replace Implicit bool, for a generic
15708         flags.   
15709         New flag: `Unchecked'.  This is used during the EmitMeta phase
15710         (which is out-of-line with the regular Resolve/Emit process for a
15711         statement, as this is done ahead of time, but still gets a chance
15712         to call constant resolve).
15713
15714         (Block.Flags): new enum for adding a new flag.
15715
15716         (Block.EmitMeta): track the state of unchecked.
15717
15718         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
15719         to enable constant resolution to work there as well.
15720
15721 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
15722
15723         * typemanager.cs (ienumerable_type): Also look up
15724         System.Collections.IEnumerable. 
15725
15726 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
15727
15728         TODO: Test more than one conditional per method.
15729
15730         * class.cs (Indexer.Define): Report the location where the user is
15731         referencing the unsupported feature.
15732
15733         (MethodData): Overload the use of `conditionals' to
15734         minimize the creation of needless ArrayLists.   This saves roughly
15735         212kb on my machine.
15736
15737         (Method): Implement the new IIteratorContainer interface.
15738         (Method.SetYields): Implement the method by setting the ModFlags
15739         to contain METHOD_YIELDS.
15740
15741         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
15742         which just got set to null.
15743
15744         * iterators.cs: New file.
15745
15746         (Yield, YieldBreak): New statements.
15747
15748         * statement.cs (Return.Resolve): Flag an error if we are used in
15749         an iterator method.
15750
15751         * codegen.cs (InIterator): New flag set if the code is being
15752         compiled in an iterator method.
15753
15754         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
15755         internal modifier, and we just use it to avoid adding extra
15756         fields, as this is seldom used.  
15757
15758         * cs-parser.jay: Add yield_statement (yield and yield break).
15759
15760         * driver.cs: New flag -v2 to turn on version 2 features. 
15761
15762         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
15763         hashtable when v2 is enabled.
15764
15765 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
15766
15767         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
15768         there is already a namespace defined with this name.
15769
15770         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
15771         people upgraded their corlibs.
15772
15773         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
15774         always use fully qualified types, no need to use the compiler
15775         front end.
15776
15777         (TypeManager.IsNamespace): Use binarysearch.
15778
15779         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
15780         AddDelegate): I did not quite use the new IsValid API properly: I
15781         have to pass the short-name and the fullname.  I was passing only
15782         the basename instead of the fullname sometimes. 
15783
15784         (TypeContainer.DefineType): call NamespaceClash.
15785
15786         * interface.cs (Interface.DefineType): use NamespaceClash before
15787         defining the type.
15788
15789         * delegate.cs (Delegate.DefineType): use NamespaceClash before
15790         defining the type.
15791
15792         * enum.cs: (Enum.DefineType): use NamespaceClash before
15793         defining the type.
15794
15795         * typemanager.cs (: 3-line patch that gives us some tasty 11%
15796         speed increase.  First, use the negative_hits cache when we get a
15797         negative.  Second, add the type with its full original name
15798         instead of the new . and + encoded name (reflection uses + to
15799         separate type from a nested type).  Use LookupTypeReflection
15800         directly which bypasses the type->name hashtable (that we already
15801         know does not contain the type.
15802
15803         * decl.cs (DeclSpace.ResolveTypeExpr): track the
15804         location/container type. 
15805
15806         * driver.cs: When passing utf8, use directly the UTF8Encoding.
15807
15808 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
15809
15810         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
15811
15812         * delegate.cs (NewDelegate.Resolve): Test whether an instance
15813         method is being referenced in the method group from a static
15814         context, and report error 120 if so.
15815
15816         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
15817         Error118. 
15818
15819         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
15820         is created, we create the A namespace).
15821
15822         * cs-parser.jay: A namespace also introduces a DeclarationFound.
15823         Fixes #41591
15824
15825 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
15826
15827         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
15828         invocation to ModuleBuilder.GetType with the same values will
15829         return a new type instance, so we need to cache its return
15830         values. 
15831
15832         * expression.cs (Binary.ResolveOperator): Only allow the compare
15833         operators on enums if they are of the same type.
15834
15835         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
15836         types of ValueType on their own case.  Before we were giving them
15837         the same treatment as objects.
15838
15839         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
15840         fullname.  Short name is used to compare against container name.
15841         Fullname is used to check against defined namespace names.
15842
15843         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
15844         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
15845
15846         (Method.CheckBase): Call parent.
15847         (MemberBase.CheckBase): Check for protected members on sealed
15848         classes.
15849         (PropertyBase.CheckBase): Call parent.
15850         (Field.Define): Call parent.
15851
15852         * report.cs: Negative error codes are now mapped to 8000 - code,
15853         so that the display is render more nicely.
15854
15855         * typemanager.cs: Do not use try/catch, instead report a regular
15856         error. 
15857
15858         (GetPointerType, GetReferenceType): These methods provide
15859         mechanisms to obtain the T* and T& from a T.  We had the code
15860         previously scattered around the code base, and it also used
15861         TypeManager.LookupType that would go through plenty of caches.
15862         This one goes directly to the type source.
15863
15864         In some places we did the Type.GetType followed by
15865         ModuleBuilder.GetType, but not in others, so this unifies the
15866         processing as well.
15867
15868         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
15869         statements now that we have namespace information.
15870
15871         * typemanager.cs (IsNamespace): New method, returns whether the
15872         string presented is a namespace or not.
15873
15874         (ComputeNamespaces): New public entry point, computes the list of
15875         available namespaces, using the GetNamespaces API call in Mono, or
15876         the slower version in MS.NET.   
15877
15878         Now before we start the semantic analysis phase, we have a
15879         complete list of namespaces including everything that the user has
15880         provided.
15881
15882         Deleted old code to cache namespaces in .nsc files.
15883
15884 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
15885
15886         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
15887         class/struct location definition Location for the implicit
15888         constructor location.
15889
15890         (Operator.Define): Use the location of the operator for the
15891         implicit Method definition.
15892
15893         (Constructor.Emit): use the constructor location for the implicit
15894         base initializer constructor.
15895
15896         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
15897         and the Expression class now contains two new methods:
15898
15899         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
15900         isolate type lookup from the rest of the resolution process.
15901
15902         Since we use Expressions to hold type definitions due to the way
15903         we parse the input we have historically overloaded Resolve to
15904         perform the Type lookups if a special flag is passed.  Now this is
15905         eliminated and two methods take their place. 
15906
15907         The differences in the two methods between xStep and xTerminal is
15908         that xStep is involved in our current lookup system that uses
15909         SimpleNames to compose a name, while xTerminal is used just to
15910         catch the case where the simplename lookup failed.
15911
15912 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
15913
15914         * expression.cs (ResolveMemberAccess): Remove redundant code.
15915         TypeExpr expressions are always born fully resolved.
15916
15917         * interface.cs (PopulateMethod): Do not lookup the types twice.
15918         We were doing it once during SemanticAnalysis and once during
15919         PopulateMethod.
15920
15921         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
15922         in local variable type definitions, were being returned as a
15923         SimpleName (we decomposed everything into a string), that is
15924         because primary_expression was being used instead of a type in the
15925         grammar (reduce/reduce conflicts).
15926
15927         The part that was wrong is that we converted the expression into a
15928         string (an oversimplification in one hand, compounded with primary
15929         expressions doing string concatenation).
15930
15931         So things like:
15932
15933         A.B.C [] x;
15934
15935         Would return "A.B.C[]" as a SimpleName.  This stopped things like
15936         using clauses from working on this particular context.  And a type
15937         was being matched directly against "A.B.C[]".
15938
15939         We now use the correct approach, and allow for ComposedCast to be
15940         part of the unary expression.  So the "A.B.C []" become a composed
15941         cast of "A.B.C" (as a nested group of MemberAccess with a
15942         SimpleName at the end) plus the rank composition "[]". 
15943
15944         Also fixes 35567
15945
15946 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
15947
15948         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
15949         for the access level checking.
15950
15951         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
15952         `TypeContainer container', because I kept getting confused when I
15953         was debugging this code.
15954
15955         * expression.cs (Indexers): Instead of tracking getters/setters,
15956         we now track them in parallel.  We create one arraylist less, but
15957         most importantly it is possible now for the LValue code to find a
15958         matching get for a set.
15959
15960         (IndexerAccess.DoResolveLValue): Update the code.
15961         GetIndexersForType has been modified already to extract all the
15962         indexers from a type.  The code assumed it did not.
15963
15964         Also make the code set the correct return type for the indexer.
15965         This was fixed a long time ago for properties, but was missing for
15966         indexers.  It used to be void_type.
15967
15968         (Binary.Emit): Test first for doubles instead of
15969         floats, as they are more common.
15970
15971         (Binary.EmitBranchable): Use the .un version of the branch opcodes
15972         when dealing with floats and the <=, >= operators.  This fixes bug
15973         #39314 
15974
15975         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
15976         to load the array value by emitting a load on the foreach variable
15977         type.  This was incorrect.  
15978
15979         We now emit the code to load an element using the the array
15980         variable type, and then we emit the conversion operator.
15981
15982         Fixed #40176
15983
15984 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
15985
15986         * attribute.cs: Avoid allocation of ArrayLists in the common case.
15987
15988 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
15989
15990         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
15991         test for protection before we test for signatures. 
15992
15993         (MethodSignature.ToString): implement.
15994
15995         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
15996         to the case where we reduced into a LongConstant.
15997
15998         * decl.cs (CheckAccessLevel): If the type is an array, we can not
15999         depend on whether the information is acurrate, because the
16000         Microsoft runtime will always claim that the array type is public,
16001         regardless of the real state.
16002
16003         If the type is a pointer, another problem happens: the type is
16004         reported as non-public in Microsoft.  
16005
16006         In both cases we have to call CheckAccessLevel recursively with
16007         the underlying type as the argument to be tested.
16008
16009 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
16010
16011         * assign.cs (Assign.Emit): If we are dealing with a compound
16012         assignment expression, we should use the code path that stores the
16013         intermediate result in a temporary value.  This fixes #40903.
16014
16015         *expression.cs (Indirection.ToString): Provide ToString method for
16016         debugging. 
16017
16018 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
16019
16020         * class.cs: Null out fields holding references to Block objects so
16021         they can be garbage collected.
16022
16023         * expression.cs (OverloadResolve): Remove unused local.
16024
16025 2003-04-07  Martin Baulig  <martin@ximian.com>
16026
16027         * codegen.cs (EmitContext.CurrentFile): New public field.
16028         (EmitContext.Mark): Use the CurrentFile to check whether the
16029         location is in the correct file.
16030         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
16031
16032 2003-04-07  Martin Baulig  <martin@ximian.com>
16033
16034         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
16035
16036         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
16037         location.  [FIXME: The location argument which gets passed to this
16038         method is sometimes wrong!]
16039
16040 2003-04-07  Nick Drochak <ndrochak@gol.com>
16041
16042         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
16043
16044 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
16045
16046         * expression.cs (Indirection.EmitAssign): We were using the
16047         temporary, but returning immediately instead of continuing the
16048         EmitAssing flow.
16049
16050 2003-04-06  Martin Baulig  <martin@ximian.com>
16051
16052         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
16053         if it's a nested child, but also deriving from the outer class.
16054         See test 190.cs.
16055
16056         * typemanager.cs (IsNestedChildOf): Make this work if it's a
16057         nested child, but also deriving from the outer class.  See
16058         test-190.cs.
16059         (FilterWithClosure): We may access private members of the outer
16060         class if we're a nested child and deriving from the outer class.
16061         (RealMemberLookup): Only set `closure_private_ok' if the
16062         `original_bf' contained BindingFlags.NonPublic.
16063
16064 2003-04-05  Martin Baulig  <martin@ximian.com>
16065
16066         * expression.cs (SizeOf.DoResolve): Use ResolveTypeExpr, so we can
16067         probe if its a type parameter, and if so, flag an error.
16068
16069         * decl.cs: Move here the SetParameterInfo code from class.cs.
16070         Handle IsGeneric here.
16071
16072         Handle a variety of errors in the parameter info definition.
16073
16074         * ecore.cs (SimpleName.DoResolveType): Handle look ups for generic
16075         type parameters here.
16076
16077         * cs-parser.jay (class_declaration): report errors for parameters
16078         here as well.
16079
16080 2003-01-21  Miguel de Icaza  <miguel@ximian.com>
16081
16082         * generic.cs: New file, contains support code for generics.
16083
16084         * cs-parser.jay: Remove OP_SHIFT_LEFT, OP_SHIFT_RIGHT,
16085         OP_SHIFT_LEFT_ASSIGN, OP_SHIFT_RIGHT_ASSIGN.
16086
16087         Update parser for the above removals.
16088
16089         * cs-tokenizer.cs: Do not handle <<= or >>= specially.  This is
16090         now taken care of in the parser.
16091
16092 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
16093
16094         * class.cs (Event.Define): Do not allow abstract events to have
16095         initializers. 
16096
16097 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
16098
16099         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
16100         block in event declarations.
16101
16102         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
16103         value type, get its address.
16104
16105         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
16106         leaving a class on the stack instead of a boolean value (int
16107         0/1).  Change the code so we compare against null, and then the
16108         result against zero.
16109
16110         * class.cs (TypeContainer.GetClassBases): We were checking for the
16111         parent class being sealed too late.
16112
16113         * expression.cs (Binary.Emit): For <= and >= when dealing with
16114         floating point values, use cgt.un and clt.un instead of cgt and
16115         clt alone.
16116
16117 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
16118
16119         * statement.cs: Apply the same optimization as MS: skip the 
16120         GetEnumerator returning an IEnumerator, and use the one returning a 
16121         CharEnumerator instead. This allows us to avoid the try-finally block 
16122         and the boxing.
16123
16124 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
16125
16126         * cs-parser.jay: Attributes cannot be applied to
16127                          namespaces. Fixes #40473
16128
16129 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16130
16131         * class.cs:
16132         (Add*): check if the name is valid using the full name for constants,
16133         fields, properties and events.
16134
16135 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
16136
16137         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
16138         char constants to be part of the enumeration.
16139
16140         * expression.cs (Conditional.DoResolve): Add support for operator
16141         true. Implements the missing functionality from 14.12
16142
16143         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
16144         operator true/false as required by the spec.
16145
16146         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
16147         implicit conversion to boolean.
16148
16149         * statement.cs (Statement.ResolveBoolean): A boolean expression is
16150         also one where the type implements `operator true'. 
16151
16152         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
16153         get an expression that will invoke operator true based on an
16154         expression.  
16155
16156         (GetConversionOperators): Removed the hack that called op_True
16157         here.  
16158
16159         (Expression.ResolveBoolean): Move this from Statement.
16160
16161 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
16162
16163         * ecore.cs (FieldExpr): do not allow initialization of initonly
16164         fields on derived classes
16165
16166 2003-03-13  Martin Baulig  <martin@ximian.com>
16167
16168         * statement.cs (Block.Emit): Call ig.BeginScope() and
16169         ig.EndScope() when compiling with debugging info; call
16170         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
16171
16172 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
16173
16174         * expression.cs (Indexers): Do not construct immediately, allow
16175         for new members to be appended as we go.  Fixes 38143
16176
16177 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16178
16179         * expression.cs: save/restore context when resolving an unchecked
16180         expression.
16181
16182 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
16183
16184         * cfold.cs: Catch division by zero in modulus operator during
16185         constant folding.
16186
16187 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
16188
16189         * interface.cs (Interface.DefineMembers): Avoid defining members
16190         twice. 
16191
16192 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
16193
16194         * driver.cs: handle the +/- options for -noconfig
16195
16196         * statement.cs (Unckeched.Resolve): Also track the state of
16197         unchecked in the Resolve phase.
16198
16199 2003-02-27  Martin Baulig  <martin@ximian.com>
16200
16201         * ecore.cs (Expression.MemberLookup): Don't create a
16202         MethodGroupExpr for something which is not a method.  Fixes #38291.
16203
16204 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
16205
16206         * class.cs (MemberBase.CheckParameters): Also check that the type
16207         is unmanaged if it is a pointer.
16208
16209         * expression.cs (SizeOf.Resolve): Add location information.
16210
16211         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
16212         a managed type is declared.
16213
16214         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
16215         parameter modifiers as well.  Fixes bug 38606
16216
16217         * class.cs: Very sad.  Am backing out the speed up changes
16218         introduced by the ArrayList -> Array in the TypeContainer, as they
16219         were not actually that much faster, and introduced a bug (no error
16220         reports on duplicated methods).
16221
16222         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
16223         source first, this will guarantee that we have a valid expression
16224         before calling in lower levels functions that will require a
16225         resolved object.  Then use this original_source in the
16226         target.ResolveLValue instead of the original source that was
16227         passed to us.
16228
16229         Another change.  Use target.Resolve instead of LValueResolve.
16230         Although we are resolving for LValues, we will let the Assign code
16231         take care of that (it will be called again from Resolve).  This
16232         basically allows code like this:
16233
16234         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
16235         class Y { void A (X x) { x [0] += o; }
16236
16237         The problem was that the indexer was trying to resolve for
16238         set_Item (idx, object o) and never finding one.  The real set_Item
16239         was set_Item (idx, X).  By delaying the process we get the right
16240         semantics. 
16241
16242         Fixes bug 36505
16243
16244 2003-02-23  Martin Baulig  <martin@ximian.com>
16245
16246         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
16247         while calling DoEmit ().
16248
16249         * codegen.cs (EmitContext.Mark): Don't mark locations in other
16250         source files; if you use the #line directive inside a method, the
16251         compiler stops emitting line numbers for the debugger until it
16252         reaches the end of the method or another #line directive which
16253         restores the original file.
16254
16255 2003-02-23  Martin Baulig  <martin@ximian.com>
16256
16257         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
16258
16259 2003-02-23  Martin Baulig  <martin@ximian.com>
16260
16261         * statement.cs (Block.AddChildVariableNames): We need to call this
16262         recursively, not just for our immediate children.
16263
16264 2003-02-23  Martin Baulig  <martin@ximian.com>
16265
16266         * class.cs (Event.Define): Always make the field private, like csc does.
16267
16268         * typemanager.cs (TypeManager.RealMemberLookup): Make events
16269         actually work, fixes bug #37521.
16270
16271 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
16272
16273         * delegate.cs: When creating the various temporary "Parameters"
16274         classes, make sure that we call the ComputeAndDefineParameterTypes
16275         on those new parameters (just like we do with the formal ones), to
16276         allow them to be resolved in the context of the DeclSpace.
16277
16278         This fixes the bug that Dick observed in Bugzilla #38530.
16279
16280 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
16281
16282         * expression.cs (ResolveMemberAccess): When resolving a constant,
16283         do not attempt to pull a constant if the value was not able to
16284         generate a valid constant.
16285
16286         * const.cs (LookupConstantValue): Do not report more errors than required.
16287
16288 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16289
16290         * expression.cs: fixes bug #38328.
16291
16292 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
16293
16294         * class.cs: Changed all the various members that can be part of a
16295         class from being an ArrayList to be an Array of the right type.
16296         During the DefineType type_list, interface_list, delegate_list and
16297         enum_list are turned into types, interfaces, delegates and enums
16298         arrays.  
16299
16300         And during the member population, indexer_list, event_list,
16301         constant_list, field_list, instance_constructor_list, method_list,
16302         operator_list and property_list are turned into their real arrays.
16303
16304         Although we could probably perform this operation earlier, for
16305         good error reporting we need to keep the lists and remove the
16306         lists for longer than required.
16307
16308         This optimization was triggered by Paolo profiling the compiler
16309         speed on the output of `gen-sample-program.pl' perl script. 
16310
16311         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
16312         not crash in methods like MemberLookupFailed that use this field.  
16313
16314         This problem arises when the compiler fails to resolve a type
16315         during interface type definition for example.
16316
16317 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
16318
16319         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
16320         inherit from System.Object, so we have to stop at null, not only
16321         when reaching System.Object.
16322
16323 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
16324
16325         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
16326         DeclaredOnly because the parent indexer might have had a different
16327         name, but did not loop until the top of the hierarchy was reached.
16328
16329         The problem this one fixes is 35492: when a class implemented an
16330         indexer from an interface, we were getting the interface method
16331         (which was abstract) and we were flagging an error (can not invoke
16332         abstract method).
16333
16334         This also keeps bug 33089 functioning, and test-148 functioning.
16335
16336         * typemanager.cs (IsSpecialMethod): The correct way of figuring
16337         out if a method is special is to see if it is declared in a
16338         property or event, or whether it is one of the predefined operator
16339         names.   This should fix correctly #36804.
16340
16341 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
16342
16343         The goal here is to remove the dependency on EmptyCast.Peel ().
16344         Killing it completely.
16345
16346         The problem is that currently in a number of places where
16347         constants are expected, we have to "probe" for an EmptyCast, and
16348         Peel, which is not the correct thing to do, as this will be
16349         repetitive and will likely lead to errors. 
16350
16351         The idea is to remove any EmptyCasts that are used in casts that
16352         can be reduced to constants, so we only have to cope with
16353         constants. 
16354
16355         This bug hunt was triggered by Bug 37363 and the desire to remove
16356         the duplicate pattern where we were "peeling" emptycasts to check
16357         whether they were constants.  Now constants will always be
16358         constants.
16359
16360         * ecore.cs: Use an enumconstant here instead of wrapping with
16361         EmptyCast.  
16362
16363         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
16364         throwing me off.  By handling this we can get rid of a few hacks.
16365
16366         * statement.cs (Switch): Removed Peel() code.
16367
16368 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
16369
16370         * class.cs: Location information for error 508
16371
16372         * expression.cs (New.DoResolve): Add a guard against double
16373         resolution of an expression.  
16374
16375         The New DoResolve might be called twice when initializing field
16376         expressions (see EmitFieldInitializers, the call to
16377         GetInitializerExpression will perform a resolve on the expression,
16378         and later the assign will trigger another resolution
16379
16380         This leads to bugs (#37014)
16381
16382         * delegate.cs: The signature for EndInvoke should contain any ref
16383         or out parameters as well.  We were not doing this in the past. 
16384
16385         * class.cs (Field.Define): Do not overwrite the type definition
16386         inside the `volatile' group.  Turns out that volatile enumerations
16387         were changing the type here to perform a validity test, which
16388         broke conversions. 
16389
16390 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
16391
16392         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
16393         and structs, we do not want to load the instance variable
16394
16395         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
16396         enum_type has to be handled like an object reference (implicit
16397         conversions exists from this to object), but the regular IsClass
16398         and IsValueType tests will never return true for this one.
16399
16400         Also we use TypeManager.IsValueType instead of type.IsValueType,
16401         just for consistency with the rest of the code (this is only
16402         needed if we ever use the construct exposed by test-180.cs inside
16403         corlib, which we dont today).
16404
16405 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
16406
16407         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
16408         just InternalCall.
16409
16410 2003-02-09  Martin Baulig  <martin@ximian.com>
16411
16412         * namespace.cs (Namespace..ctor): Added SourceFile argument.
16413         (Namespace.DefineNamespaces): New static public method; this is
16414         called when we're compiling with debugging to add all namespaces
16415         to the symbol file.
16416
16417         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
16418         pass it to the Namespace's .ctor.
16419
16420         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
16421         and MethodBase arguments; pass the namespace ID to the symwriter;
16422         pass the MethodBase instead of the token to the symwriter.
16423         (SymbolWriter.DefineNamespace): New method to add a namespace to
16424         the symbol file.
16425
16426 2003-02-09  Martin Baulig  <martin@ximian.com>
16427
16428         * symbolwriter.cs: New file.  This is a wrapper around
16429         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
16430         methods here in near future.
16431
16432 2003-02-09  Martin Baulig  <martin@ximian.com>
16433
16434         * codegen.cs (EmitContext.Mark): Just pass the arguments to
16435         ILGenerator.MarkSequencePoint() which are actually used by the
16436         symbol writer.
16437
16438 2003-02-09  Martin Baulig  <martin@ximian.com>
16439
16440         * location.cs (SourceFile): New public sealed class.  This
16441         contains the name and an index which is used in the location's token.
16442         (Location): Reserve an appropriate number of bits in the token for
16443         the source file instead of walking over that list, this gives us a
16444         really huge performance improvement when compiling with debugging.
16445
16446         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
16447         `SourceFile' argument instead of a string.
16448         (Driver.ProcessFile): Add all the files via Location.AddFile(),
16449         but don't parse/tokenize here, we need to generate the list of all
16450         source files before we do that.
16451         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
16452         the files.
16453
16454         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
16455         instead of a string.
16456
16457         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
16458         of a string.
16459
16460 2003-02-09  Martin Baulig  <martin@ximian.com>
16461
16462         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
16463         filename on `#line default'.
16464
16465 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
16466
16467         * statement.cs: don't clear the pinned var when the fixed statement
16468         returns from the method (fixes bug#37752).
16469
16470 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
16471
16472         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
16473         to IsValueType.
16474
16475 2003-02-07  Martin Baulig  <martin@ximian.com>
16476
16477         * driver.cs: Removed the `--debug-args' command line argument.
16478
16479         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
16480         automatically by the AsssemblyBuilder.
16481         (CodeGen.InitializeSymbolWriter): We don't need to call any
16482         initialization function on the symbol writer anymore.  This method
16483         doesn't take any arguments.
16484
16485 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
16486
16487         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
16488         from referenced assemblies as well.
16489
16490 2003-02-02  Martin Baulig  <martin@ximian.com>
16491
16492         * class.cs (MethodData.Emit): Generate debugging info for external methods.
16493
16494 2003-02-02  Martin Baulig  <martin@ximian.com>
16495
16496         * class.cs (Constructor.Emit): Open the symbol writer before
16497         emitting the constructor initializer.
16498         (ConstructorInitializer.Emit): Call ec.Mark() to allow
16499         single-stepping through constructor initializers.
16500
16501 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
16502
16503         * class.cs: Handle error 549: do not allow virtual methods in
16504         sealed classes. 
16505
16506 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
16507
16508         * decl.cs: Check access levels when resolving types
16509
16510 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
16511
16512         * statement.cs: Add parameters and locals set in catch blocks that might 
16513         return to set vector
16514
16515 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
16516
16517         * class.cs (Operator): Set the SpecialName flags for operators.
16518
16519         * expression.cs (Invocation.DoResolve): Only block calls to
16520         accessors and operators on SpecialName methods.
16521
16522         (Cast.TryReduce): Handle conversions from char constants.
16523
16524
16525 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
16526
16527         * statement.cs: small memory and time optimization in FlowBranching.
16528
16529 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
16530
16531         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
16532         problem that the last fix but in the other sid (Set).
16533
16534         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
16535         access when there is no indexer in the hierarchy.
16536
16537 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
16538
16539         * class.cs: Combine some if statements.
16540
16541 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16542
16543         * driver.cs: fixed bug #37187.
16544
16545 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
16546
16547         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
16548         any indexer, it's needed to build a list with all the indexers in the
16549         hierarchy (AllGetters), else we have problems. Fixes #35653.
16550
16551 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
16552
16553         * class.cs (MethodData.Define): It is wrong for an interface
16554         implementation to be static in both cases: explicit and implicit.
16555         We were only handling this in one case.
16556
16557         Improve the if situation there to not have negations.
16558
16559         * class.cs (Field.Define): Turns out that we do not need to check
16560         the unsafe bit on field definition, only on usage.  Remove the test.
16561
16562 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16563
16564         * driver.cs: use assembly.Location instead of Codebase (the latest
16565         patch made mcs fail when using MS assemblies).
16566
16567 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
16568
16569         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
16570         get the path to *corlib.dll.
16571
16572 2003-01-21  Nick Drochak <ndrochak@gol.com>
16573
16574         * cs-tokenizer.cs:
16575         * pending.cs:
16576         * typemanager.cs: Remove compiler warnings
16577
16578 2003-01-20  Duncan Mak  <duncan@ximian.com>
16579
16580         * AssemblyInfo.cs: Bump the version number to 0.19.
16581
16582 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16583
16584         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
16585
16586 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
16587
16588         * class.cs (Constructor::Emit): Emit debugging info for constructors.
16589
16590 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
16591
16592         * cs-parser.jay: Small fix: we were not comparing the constructor
16593         name correctly.   Thanks to Zoltan for the initial pointer.
16594
16595 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
16596
16597         * cs-tokenizer.cs: Set file name when specified with #line
16598
16599 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
16600
16601         * cs-parser.jay: Only perform the constructor checks here if we
16602         are named like the class;  This will help provider a better
16603         error.  The constructor path is taken when a type definition is
16604         not found, but most likely the user forgot to add the type, so
16605         report that rather than the constructor error.
16606
16607 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
16608
16609         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
16610         allocations.
16611
16612 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
16613
16614         * cs-parser.jay: Add cleanup call.
16615
16616 2003-01-13  Duncan Mak  <duncan@ximian.com>
16617
16618         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
16619         consistent with other methods.
16620
16621 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
16622
16623         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
16624
16625 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
16626
16627         * attribute.cs: only set GuidAttr to true when we have a
16628         GuidAttribute.
16629
16630 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16631
16632         * ecore.cs:
16633         * expression.cs:
16634         * typemanager.cs: fixes to allow mcs compile corlib with the new
16635         Type.IsSubclassOf fix.
16636
16637 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
16638
16639         * expression.cs (LocalVariableReference.DoResolve): Classify a
16640         constant as a value, not as a variable.   Also, set the type for
16641         the variable.
16642
16643         * cs-parser.jay (fixed_statement): take a type instead of a
16644         pointer_type, so we can produce a better error message later.
16645
16646         * statement.cs (Fixed.Resolve): Flag types that are not pointers
16647         as an error.  
16648
16649         (For.DoEmit): Make inifinite loops have a
16650         non-conditional branch back.
16651
16652         (Fixed.DoEmit): First populate the pinned variables, then emit the
16653         statement, then clear the variables.  Before I was emitting the
16654         code once for each fixed piece.
16655
16656
16657 2003-01-08  Martin Baulig  <martin@ximian.com>
16658
16659         * statement.cs (FlowBranching.MergeChild): A break in a
16660         SWITCH_SECTION does not leave a loop.  Fixes #36155.
16661
16662 2003-01-08  Martin Baulig  <martin@ximian.com>
16663
16664         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
16665         lives in the same number space than `param_map'.  Fixes #36154.
16666
16667 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
16668
16669         * cs-parser.jay (constructor_declaration): Set the
16670         Constructor.ModFlags before probing for it.  This makes the
16671         compiler report 514, 515 and 132 (the code was there, but got
16672         broken). 
16673
16674         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
16675         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
16676         (GotoCase.Resolve): Set `Returns' to ALWAYS.
16677
16678 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
16679
16680         * enum.cs: create the enum static fields using the enum type.
16681
16682 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
16683
16684         * class.cs: don't try to create the ParamBuilder for the return
16685         type if it's not needed (and handle it breaking for the ms runtime
16686         anyway).
16687
16688 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
16689
16690         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
16691
16692 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
16693
16694         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
16695         the command.   This showed up while compiling the JANET source
16696         code, which used \r as its only newline separator.
16697
16698 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
16699
16700         * class.cs (Method.Define): If we are an operator (because it
16701         reuses our code), then set the SpecialName and HideBySig.  #36128
16702
16703 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
16704
16705         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
16706         exception, report error 120 `object reference required'.
16707
16708         * driver.cs: Add --pause option, used during to measure the size
16709         of the process as it goes with --timestamp.
16710
16711         * expression.cs (Invocation.DoResolve): Do not allow methods with
16712         SpecialName to be invoked.
16713
16714 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
16715
16716         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
16717         number before adding it.
16718
16719 2002-12-21  Ravi Pratap  <ravi@ximian.com>
16720
16721         * ecore.cs (StandardImplicitConversion): When in an unsafe
16722         context, we allow conversion between void * to any other pointer
16723         type. This fixes bug #35973.
16724
16725 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
16726
16727         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
16728         is not thrown when extensionless outputs are used 
16729
16730 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16731
16732         * rootcontext.cs: fixed compilation of corlib.
16733
16734 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
16735
16736         * attribute.cs (Attributes.Contains): Add new method.
16737
16738         * class.cs (MethodCore.LabelParameters): if the parameter is an
16739         `out' parameter, check that no attribute `[In]' has been passed.
16740
16741         * enum.cs: Handle the `value__' name in an enumeration.
16742
16743 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
16744
16745         * decl.cs: Added special case to allow overrides on "protected
16746         internal" methods
16747
16748 2002-12-18  Ravi Pratap  <ravi@ximian.com>
16749
16750         * attribute.cs (Attributes.AddAttributeSection): Rename to this
16751         since it makes much more sense.
16752
16753         (Attributes.ctor): Don't require a Location parameter.
16754
16755         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
16756
16757         * attribute.cs (ApplyAttributes): Remove extra Location parameters
16758         since we already have that information per attribute.
16759
16760         * everywhere : make appropriate changes.
16761
16762         * class.cs (LabelParameters): Write the code which actually
16763         applies attributes to the return type. We can't do this on the MS
16764         .NET runtime so we flag a warning in the case an exception is
16765         thrown.
16766
16767 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
16768
16769         * const.cs: Handle implicit null conversions here too.
16770
16771 2002-12-17  Ravi Pratap  <ravi@ximian.com>
16772
16773         * class.cs (MethodCore.LabelParameters): Remove the extra
16774         Type [] parameter since it is completely unnecessary. Instead
16775         pass in the method's attributes so that we can extract
16776         the "return" attribute.
16777
16778 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
16779
16780         * cs-parser.jay (parse): Use Report.Error to flag errors instead
16781         of ignoring it and letting the compile continue.
16782
16783         * typemanager.cs (ChangeType): use an extra argument to return an
16784         error condition instead of throwing an exception.
16785
16786 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
16787
16788         * expression.cs (Unary.TryReduce): mimic the code for the regular
16789         code path.  Perform an implicit cast in the cases where we can
16790         implicitly convert to one of the integral types, and then reduce
16791         based on that constant.   This fixes bug #35483.
16792
16793 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16794
16795         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
16796
16797 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16798
16799         * namespace.cs: fixed bug #35489.
16800
16801 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
16802
16803         * class.cs: Remove some dead code.
16804
16805         * cs-parser.jay: Estimate the number of methods needed
16806         (RootContext.MethodCount);
16807
16808         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
16809         numbers instead of StringBuilders.
16810
16811         * support.cs (PtrHashtable): Add constructor with initial size;
16812         We can now reduce reallocations of the method table.
16813
16814 2002-12-10  Ravi Pratap  <ravi@ximian.com>
16815
16816         * attribute.cs (ApplyAttributes): Keep track of the emitted
16817         attributes on a per-target basis. This fixes bug #35413.
16818
16819 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
16820
16821         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
16822         default to the Windows 1252 encoding.
16823
16824         (UnixParseOption): Support version, thanks to Alp for the missing
16825         pointer. 
16826
16827         * AssemblyInfo.cs: Add nice assembly information.
16828
16829         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
16830         (bug 35169).
16831
16832         * cs-parser.jay: Allow a trailing comma before the close bracked
16833         in the attribute_section production.
16834
16835         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
16836         address of the instance was being taken, I will take this out,
16837         because we take the address of the object immediately here.
16838
16839 2002-12-09  Ravi Pratap  <ravi@ximian.com>
16840
16841         * typemanager.cs (AreMultipleAllowed): Take care of the most
16842         obvious case where attribute type is not in the current assembly -
16843         stupid me ;-)
16844
16845 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
16846
16847         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
16848         definitions, instead of doing that afterwards.  
16849
16850         Also we use a nice little hack, depending on the constructor, we
16851         know if we are a "composed" name or a simple name.  Hence, we
16852         avoid the IndexOf test, and we avoid 
16853
16854         * codegen.cs: Add code to assist in a bug reporter to track down
16855         the source of a compiler crash. 
16856
16857 2002-12-07  Ravi Pratap  <ravi@ximian.com>
16858
16859         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
16860         types have been emitted for a given element and flag an error
16861         if something which does not have AllowMultiple set is used more
16862         than once.
16863
16864         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
16865         attribute types and their corresponding AllowMultiple properties
16866
16867         (AreMultipleAllowed): Check the property for a given type.
16868
16869         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
16870         property in the case we have a TypeContainer.
16871
16872         (Attributes.AddAttribute): Detect duplicates and just skip on
16873         adding them. This trivial fix catches a pretty gross error in our
16874         attribute emission - global attributes were being emitted twice!
16875
16876         Bugzilla bug #33187 is now fixed.
16877
16878 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
16879
16880         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
16881         instead of pp_and).
16882
16883         * expression.cs (Binary.ResolveOperator): I can only use the
16884         Concat (string, string, string) and Concat (string, string,
16885         string, string) if the child is actually a concatenation of
16886         strings. 
16887
16888 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
16889
16890         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
16891         context where we need a 2-character lookahead.
16892
16893         * pending.cs (PendingImplementation): Rework so we can keep track
16894         of interface types all the time, and flag those which were
16895         implemented by parents as optional.
16896
16897 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
16898
16899         * expression.cs (Binary.ResolveOperator): Use
16900         String.Concat(string,string,string) or
16901         String.Concat(string,string,string,string) when possible. 
16902
16903         * typemanager: More helper methods.
16904
16905
16906 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
16907
16908         * pending.cs: remove the bogus return from GetMissingInterfaces()
16909         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
16910
16911 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16912
16913         * namespace.cs: avoid duplicated 'using xxx' being added to
16914         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
16915         when we get more than one 'using' statement for the same namespace.
16916         Report a CS0105 warning for it.
16917
16918 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
16919
16920         * cs-tokenizer.cs (consume_identifier): use read directly, instead
16921         of calling getChar/putback, uses internal knowledge of it.    
16922
16923         (xtoken): Reorder tokenizer so most common patterns are checked
16924         first.  This reduces the compilation time in another 5% (from 8.11s
16925         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
16926
16927         The parsing time is 22% of the compilation in mcs, and from that
16928         64% is spent on the tokenization process.  
16929
16930         I tried using a binary search for keywords, but this is slower
16931         than the hashtable.  Another option would be to do a couple of
16932         things:
16933
16934                 * Not use a StringBuilder, instead use an array of chars,
16935                   with a set value.  Notice that this way we could catch
16936                   the 645 error without having to do it *afterwards*.
16937
16938                 * We could write a hand-parser to avoid the hashtable
16939                   compares altogether.
16940
16941         The identifier consumption process takes 37% of the tokenization
16942         time.  Another 15% is spent on is_number.  56% of the time spent
16943         on is_number is spent on Int64.Parse:
16944
16945                 * We could probably choose based on the string length to
16946                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
16947                   computations. 
16948
16949         Another 3% is spend on wrapping `xtoken' in the `token' function.
16950
16951         Handle 0xa0 as whitespace (#34752)
16952
16953 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
16954
16955         * typemanager.cs (IsCLRType): New routine to tell whether a type
16956         is one of the builtin types.  
16957
16958         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
16959         typecode in more places instead of doing pointer comparissions.
16960         We could leverage some knowledge about the way the typecodes are
16961         laid out.
16962
16963         New code to cache namespaces in assemblies, it is currently not
16964         invoked, to be used soon.
16965
16966         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
16967
16968         * expression.cs (Binary.ResolveOperator): specially handle
16969         strings, and do not perform user-defined operator overloading for
16970         built-in types.
16971
16972 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
16973
16974         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
16975         internalcall as it is a pretty simple operation;  Avoid whenever
16976         possible to call Char.IsLetter.
16977
16978         (consume_identifier): Cut by half the number of
16979         hashtable calls by merging the is_keyword and GetKeyword behavior.
16980
16981         Do not short-circuit, because if we do, we
16982         report errors (ie, #if false && true would produce an invalid
16983         directive error);
16984
16985
16986 2002-11-24  Martin Baulig  <martin@ximian.com>
16987
16988         * expression.cs (Cast.TryReduce): If we're in checked syntax,
16989         check constant ranges and report a CS0221.  Fixes #33186.
16990
16991 2002-11-24  Martin Baulig  <martin@ximian.com>
16992
16993         * cs-parser.jay: Make this work for uninitialized variable
16994         declarations in the `for' initializer.  Fixes #32416.
16995
16996 2002-11-24  Martin Baulig  <martin@ximian.com>
16997
16998         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
16999         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
17000
17001 2002-11-24  Martin Baulig  <martin@ximian.com>
17002
17003         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
17004         argument; if true, we also check for user-defined conversions.
17005         This is only needed if both arguments are of a user-defined type.
17006         Fixes #30443, added test-175.cs.
17007         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
17008
17009         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
17010
17011 2002-11-24  Martin Baulig  <martin@ximian.com>
17012
17013         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
17014         function to get the store opcode.
17015         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
17016         only emit the Ldelema if the store opcode is Stobj.  You must run
17017         both test-34 and test-167 to test this.  Fixes #34529.
17018
17019 2002-11-23  Martin Baulig  <martin@ximian.com>
17020
17021         * ecore.cs (Expression.MemberLookup): Added additional
17022         `qualifier_type' argument which is used when we're being called
17023         from MemberAccess.DoResolve() and null if we're called from a
17024         SimpleName lookup.
17025         (Expression.MemberLookupFailed): New method to report errors; this
17026         does the CS1540 check and reports the correct error message.
17027
17028         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
17029         argument for the CS1540 check and redone the way how we're dealing
17030         with private members.  See the comment in the source code for details.
17031         (FilterWithClosure): Reverted this back to revision 1.197; renamed
17032         `closure_start_type' to `closure_qualifier_type' and check whether
17033         it's not null.  It was not this filter being broken, it was just
17034         being called with the wrong arguments.
17035
17036         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
17037         and pass it the correct `qualifier_type'; this also does the error
17038         handling for us.
17039
17040 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
17041
17042         * expression.cs (Invocation.EmitParams): If the we are dealing
17043         with a non-built-in value type, load its address as well.
17044
17045         (ArrayCreation): Use a a pretty constant instead
17046         of the hardcoded value 2.   Use 6 instead of 2 for the number of
17047         static initializers.  
17048
17049         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
17050         because they are not really value types, just glorified integers. 
17051
17052         * driver.cs: Do not append .exe, the CSC compiler does not do it.
17053
17054         * ecore.cs: Remove redundant code for enumerations, make them use
17055         the same code path as everything else, fixes the casting issue
17056         with enumerations in Windows.Forms.
17057
17058         * attribute.cs: Do only cast to string if it is a string, the
17059         validation happens later.
17060
17061         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
17062         people upgrade their corlibs.
17063
17064         * ecore.cs: Oops, enumerations were not following the entire code path
17065
17066 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
17067
17068         * typemanager.cs (FilterWithClosure): Commented out the test for
17069         1540 in typemanager.cs, as it has problems when accessing
17070         protected methods from a parent class (see test-174.cs). 
17071
17072         * attribute.cs (Attribute.ValidateGuid): new method.
17073         (Attribute.Resolve): Use above.
17074
17075 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
17076
17077         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
17078
17079         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
17080         handling for enumerations, as we only needed the TypeContainer
17081         functionality to begin with (this is required for the fix below to
17082         work for enums that reference constants in a container class for
17083         example). 
17084
17085         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
17086
17087         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
17088         a valid TypeBuilder to perform lookups on.o
17089
17090         * class.cs (InheritableMemberSignatureCompare): Use true in the
17091         call to GetGetMethod and GetSetMethod, because we are comparing
17092         the signature, and we need to get the methods *even* if they are
17093         private. 
17094
17095         (PropertyBase.CheckBase): ditto.
17096
17097         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
17098         GotoCase.Resolve): Use Peel on EmpytCasts.
17099
17100         * ecore.cs (EmptyCast): drop child, add Peel method.
17101
17102 2002-11-17  Martin Baulig  <martin@ximian.com>
17103
17104         * ecore.cs (EmptyCast.Child): New public property.
17105
17106         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
17107         label resolved to an EmptyCast.  Fixes #34162.
17108         (GotoCase.Resolve): Likewise.
17109         (Block.EmitMeta): Likewise.
17110
17111 2002-11-17  Martin Baulig  <martin@ximian.com>
17112
17113         * expression.cs (Invocation.BetterConversion): Prefer int over
17114         uint; short over ushort; long over ulong for integer literals.
17115         Use ImplicitConversionExists instead of StandardConversionExists
17116         since we also need to check for user-defined implicit conversions.
17117         Fixes #34165.  Added test-173.cs.
17118
17119 2002-11-16  Martin Baulig  <martin@ximian.com>
17120
17121         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
17122         with the `true' and `false' literals.  Fixes #33151.
17123
17124 2002-11-16  Martin Baulig  <martin@ximian.com>
17125
17126         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
17127         October 22nd; don't do the cs1540 check for static members.
17128
17129         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
17130         now using our own filter here and doing the cs1540 check again.
17131
17132 2002-11-16  Martin Baulig  <martin@ximian.com>
17133
17134         * support.cs (InternalParameters): Don't crash if we don't have
17135         any fixed parameters.  Fixes #33532.
17136
17137 2002-11-16  Martin Baulig  <martin@ximian.com>
17138
17139         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
17140         when looking up static methods to make this work on Windows.
17141         Fixes #33773.
17142
17143 2002-11-16  Martin Baulig  <martin@ximian.com>
17144
17145         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
17146         a setter rather than using PropertyInfo.CanWrite.
17147
17148 2002-11-15  Nick Drochak  <ndrochak@gol.com>
17149
17150         * class.cs: Allow acces to block member by subclasses. Fixes build
17151         breaker.
17152
17153 2002-11-14  Martin Baulig  <martin@ximian.com>
17154
17155         * class.cs (Constructor.Emit): Added the extern/block check.
17156         Fixes bug #33678.
17157
17158 2002-11-14  Martin Baulig  <martin@ximian.com>
17159
17160         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
17161         iteration while looking for indexers, this is needed because the
17162         indexer may have a different name in our base classes.  Fixed the
17163         error reporting (no indexers at all, not get accessor, no
17164         overloaded match).  Fixes bug #33089.
17165         (IndexerAccess.DoResolveLValue): Likewise.
17166
17167 2002-11-14  Martin Baulig  <martin@ximian.com>
17168
17169         * class.cs (PropertyBase.CheckBase): Make this work for multiple
17170         indexers.  Fixes the first part of bug #33089.
17171         (MethodSignature.InheritableMemberSignatureCompare): Added support
17172         for properties.
17173
17174 2002-11-13  Ravi Pratap  <ravi@ximian.com>
17175
17176         * attribute.cs (Attribute.Resolve): Catch the
17177         NullReferenceException and report it since it isn't supposed to
17178         happen. 
17179
17180 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
17181
17182         * expression.cs (Binary.EmitBranchable): Also handle the cases for
17183         LogicalOr and LogicalAnd that can benefit from recursively
17184         handling EmitBranchable.  The code now should be nice for Paolo.
17185
17186 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
17187
17188         * typemanager.cs (LookupType): Added a negative-hit hashtable for
17189         the Type lookups, as we perform quite a number of lookups on
17190         non-Types.  This can be removed once we can deterministically tell
17191         whether we have a type or a namespace in advance.
17192
17193         But this might require special hacks from our corlib.
17194
17195         * TODO: updated.
17196
17197         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
17198         and double which avoids a conversion from an integer to a double.
17199
17200         * expression.cs: tiny optimization, avoid calling IsConstant,
17201         because it effectively performs the lookup twice.
17202
17203 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
17204
17205         But a bogus return here to keep the semantics of the old code
17206         until the Mono runtime is fixed.
17207
17208         * pending.cs (GetMissingInterfaces): New method used to remove all
17209         the interfaces that are already implemented by our parent
17210         classes from the list of pending methods. 
17211
17212         * interface.cs: Add checks for calls after ResolveTypeExpr.
17213
17214 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
17215
17216         * class.cs (Class.Emit): Report warning 67: event not used if the
17217         warning level is beyond 3.
17218
17219         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
17220         being a NullLiteral.
17221
17222         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
17223         specifiers. 
17224
17225         * class.cs (TypeContainer.GetClassBases): Cover a missing code
17226         path that might fail if a type can not be resolved.
17227
17228         * expression.cs (Binary.Emit): Emit unsigned versions of the
17229         operators. 
17230
17231         * driver.cs: use error 5.
17232
17233 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
17234
17235         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
17236
17237 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
17238
17239         * cs-parser.jay (switch_section): A beautiful patch from Martin
17240         Baulig that fixed 33094.
17241
17242 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
17243
17244         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
17245         Check whether the base is abstract and report an error if so.
17246
17247         * expression.cs (IndexerAccess.DoResolveLValue,
17248         IndexerAccess.DoResolve): ditto. 
17249
17250         (Invocation.DoResolve): ditto.
17251
17252         (Invocation.FullMethodDesc): Improve the report string.
17253
17254         * statement.cs (Block): Eliminate IsVariableDefined as it is
17255         basically just a wrapper for GetVariableInfo.
17256
17257         * ecore.cs (SimpleName): Use new 
17258
17259         * support.cs (ReflectionParamter.ParameterType): We unwrap the
17260         type, as we return the actual parameter ref/unref state on a
17261         different call.
17262
17263 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
17264
17265         * support.cs: Return proper flags REF/OUT fixing the previous
17266         commit.  
17267
17268         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
17269         not used to mean `ref' but `ref or out' in ParameterReference
17270
17271         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
17272         full type signature instead of calling TypeManger.CSharpName
17273         ourselves. 
17274
17275         * support.cs (InternalParameters.ParameterDesc): Do not compare
17276         directly to the modflags, because REF/OUT will actually be bitsets
17277         if set. 
17278
17279         * delegate.cs (VerifyMethod): Check also the modifiers.
17280
17281         * cs-tokenizer.cs: Fix bug where floating point values with an
17282         exponent where a sign was missing was ignored.
17283
17284         * driver.cs: Allow multiple assemblies to be specified in a single
17285         /r: argument
17286
17287 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
17288
17289         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
17290         because identifiers after a parenthesis would end up in this kind
17291         of production, and we needed to desamiguate it for having casts
17292         like:
17293
17294                 (UserDefinedType *) xxx
17295
17296 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
17297
17298         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
17299         we should set on the Bindingflags.NonPublic, but not turn on
17300         private_ok.  private_ok controls whether a Private member is
17301         returned (this is chekced on the filter routine), while the
17302         BindingFlags.NonPublic just controls whether private/protected
17303         will be allowed.   This fixes the problem part of the problem of
17304         private properties being allowed to be used in derived classes.
17305
17306         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
17307         so we can call the children DoResolveLValue method (this will
17308         properly signal errors on lvalue assignments to base properties)
17309
17310         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
17311         getter are null, and we have a property info, we know that this
17312         happened because the lookup failed, so we report an error 122 for
17313         protection level violation.
17314
17315         We also silently return if setter and getter are null in the
17316         resolve functions, this condition only happens if we have flagged
17317         the error before.  This is the other half of the problem. 
17318
17319         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
17320         not have accessibility information, that is why we were returning
17321         true in the filter function in typemanager.cs.
17322
17323         To properly report 122 (property is inaccessible because of its
17324         protection level) correctly, we report this error in ResolveAccess
17325         by failing if both the setter and the getter are lacking (ie, the
17326         lookup failed). 
17327
17328         DoResolve and DoLResolve have been modified to check for both
17329         setter/getter being null and returning silently, the reason being
17330         that I did not want to put the knowledge about this error in upper
17331         layers, like:
17332
17333         int old = Report.Errors;
17334         x = new PropertyExpr (...);
17335         if (old != Report.Errors)
17336                 return null;
17337         else
17338                 return x;
17339
17340         So the property expr is returned, but it is invalid, so the error
17341         will be flagged during the resolve process. 
17342
17343         * class.cs: Remove InheritablePropertySignatureCompare from the
17344         class, as we no longer depend on the property signature to compute
17345         whether it is possible to implement a method or not.
17346
17347         The reason is that calling PropertyInfo.GetGetMethod will return
17348         null (in .NET, in Mono it works, and we should change this), in
17349         cases where the Get Method does not exist in that particular
17350         class.
17351
17352         So this code:
17353
17354         class X { public virtual int A { get { return 1; } } }
17355         class Y : X { }
17356         class Z : Y { public override int A { get { return 2; } } }
17357
17358         Would fail in Z because the parent (Y) would not have the property
17359         defined.  So we avoid this completely now (because the alternative
17360         fix was ugly and slow), and we now depend exclusively on the
17361         method names.
17362
17363         (PropertyBase.CheckBase): Use a method-base mechanism to find our
17364         reference method, instead of using the property.
17365
17366         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
17367         routines are gone now.
17368
17369         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
17370         names, they were incorrectly named.
17371
17372         * cs-tokenizer.cs: Return are more gentle token on failure. 
17373
17374         * pending.cs (PendingImplementation.InterfaceMethod): This routine
17375         had an out-of-sync index variable, which caused it to remove from
17376         the list of pending methods the wrong method sometimes.
17377
17378 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
17379
17380         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
17381         CanWrite, because those refer to this particular instance of the
17382         property, and do not take into account the fact that we can
17383         override single members of a property.
17384
17385         Constructor requires an EmitContext.  The resolution process does
17386         not happen here, but we need to compute the accessors before,
17387         because the resolution does not always happen for properties.
17388
17389         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
17390         subclass, before we did not update this flag, but we did update
17391         bindingflags. 
17392
17393         (GetAccessors): Drop this routine, as it did not work in the
17394         presence of partially overwritten set/get methods. 
17395
17396         Notice that this broke the cs1540 detection, but that will require
17397         more thinking. 
17398
17399 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17400
17401         * class.cs:
17402         * codegen.cs:
17403         * driver.cs: issue a warning instead of an error if we don't support
17404         debugging for the platform. Also ignore a couple of errors that may
17405         arise when trying to write the symbols. Undo my previous patch.
17406
17407 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17408
17409         * driver.cs: ignore /debug switch except for Unix platforms.
17410
17411 2002-10-23  Nick Drochak  <ndrochak@gol.com>
17412
17413         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
17414
17415 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
17416
17417         * driver.cs: Do not make mcs-debug conditional, so we do not break
17418         builds that use it.
17419
17420         * statement.cs (UsageVector.MergeChildren): I would like Martin to
17421         review this patch.  But basically after all the children variables
17422         have been merged, the value of "Breaks" was not being set to
17423         new_breaks for Switch blocks.  I think that it should be set after
17424         it has executed.  Currently I set this to the value of new_breaks,
17425         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
17426         conservative, but I do not understand this code very well.
17427
17428         I did not break anything in the build, so that is good ;-)
17429
17430         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
17431
17432 2002-10-20  Mark Crichton  <crichton@gimp.org>
17433
17434         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
17435
17436 2002-10-20  Nick Drochak  <ndrochak@gol.com>
17437
17438         * cfold.cs: Fixed compile blocker.
17439
17440 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
17441
17442         * driver.cs: I was chekcing the key, not the file.
17443
17444 2002-10-19  Ravi Pratap  <ravi@ximian.com>
17445
17446         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
17447         message that we were generating - we just need to silently return
17448         a null.
17449
17450 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
17451
17452         * class.cs (Event.Define): Change my previous commit, as this
17453         breaks the debugger.  This is a temporary hack, as it seems like
17454         the compiler is generating events incorrectly to begin with.
17455
17456         * expression.cs (Binary.ResolveOperator): Added support for 
17457         "U operator - (E x, E y)"
17458
17459         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
17460         y)".
17461
17462         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
17463         init-only variables, but this path did not take into account that
17464         there might be also instance readonly variables.  Correct this
17465         problem. 
17466
17467         This fixes bug 32253
17468
17469         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
17470         delegates as well.
17471
17472         * driver.cs: Change the extension for modules to `netmodule'
17473
17474         * cs-parser.jay: Improved slightly the location tracking for
17475         the debugger symbols.
17476
17477         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
17478         modifiers that were specified instead of the hardcoded value
17479         (FamAndAssem).  This was basically ignoring the static modifier,
17480         and others.  Fixes 32429.
17481
17482         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
17483         fixed a bug in the process (32476)
17484
17485         * expression.cs (ArrayAccess.EmitAssign): Patch from
17486         hwang_rob@yahoo.ca that fixes bug 31834.3
17487
17488 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
17489
17490         * driver.cs: Make the module extension .netmodule.
17491
17492 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
17493
17494         * driver.cs: Report an error if the resource file is not found
17495         instead of crashing.
17496
17497         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
17498         false, like Emit does.
17499
17500 2002-10-16  Nick Drochak  <ndrochak@gol.com>
17501
17502         * typemanager.cs: Remove unused private member.  Also reported mcs
17503         bug to report this as a warning like csc.
17504
17505 2002-10-15  Martin Baulig  <martin@gnome.org>
17506
17507         * statement.cs (Statement.Emit): Made this a virtual method; emits
17508         the line number info and calls DoEmit().
17509         (Statement.DoEmit): New protected abstract method, formerly knows
17510         as Statement.Emit().
17511
17512         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
17513
17514 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
17515
17516         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
17517         have fixed a remaining problem: not every AddXXXX was adding a
17518         fully qualified name.  
17519
17520         Now everyone registers a fully qualified name in the DeclSpace as
17521         being defined instead of the partial name.  
17522
17523         Downsides: we are slower than we need to be due to the excess
17524         copies and the names being registered this way.  
17525
17526         The reason for this is that we currently depend (on the corlib
17527         bootstrap for instance) that types are fully qualified, because
17528         we dump all the types in the namespace, and we should really have
17529         types inserted into the proper namespace, so we can only store the
17530         basenames in the defined_names array.
17531
17532 2002-10-10  Martin Baulig  <martin@gnome.org>
17533
17534         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
17535         from bug #31834, see the bug report for a testcase which is
17536         miscompiled.
17537
17538 2002-10-10  Martin Baulig  <martin@gnome.org>
17539
17540         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
17541         flow analysis code for this.
17542
17543         * statement.cs (Do, While, For): Tell the flow analysis code about
17544         infinite loops.
17545         (FlowBranching.UsageVector): Added support for infinite loops.
17546         (Block.Resolve): Moved the dead code elimination here and use flow
17547         analysis to do it.
17548
17549 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
17550
17551         * class.cs (Field.Define): Catch cycles on struct type
17552         definitions. 
17553
17554         * typemanager.cs (IsUnmanagedtype): Do not recursively check
17555         fields if the fields are static.  We only need to check instance
17556         fields. 
17557
17558         * expression.cs (As.DoResolve): Test for reference type.
17559
17560         * statement.cs (Using.ResolveExpression): Use
17561         ConvertImplicitRequired, not ConvertImplicit which reports an
17562         error on failture
17563         (Using.ResolveLocalVariableDecls): ditto.
17564
17565         * expression.cs (Binary.ResolveOperator): Report errors in a few
17566         places where we had to.
17567
17568         * typemanager.cs (IsUnmanagedtype): Finish implementation.
17569
17570 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
17571
17572         * expression.cs: Use StoreFromPtr instead of extracting the type
17573         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
17574
17575         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
17576         an enumeration value to a System.Enum, but System.Enum is not a
17577         value type, but an class type, so we need to box.
17578
17579         (Expression.ConvertExplicit): One codepath could return
17580         errors but not flag them.  Fix this.  Fixes #31853
17581
17582         * parameter.cs (Resolve): Do not allow void as a parameter type.
17583
17584 2002-10-06  Martin Baulig  <martin@gnome.org>
17585
17586         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
17587         if it's a class type and not a struct.  Fixes #31815.
17588
17589 2002-10-06  Martin Baulig  <martin@gnome.org>
17590
17591         * statement.cs: Reworked the flow analysis code a bit to make it
17592         usable for dead code elimination.
17593
17594 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17595
17596         * cs-parser.jay: allow empty source files. Fixes bug #31781.
17597
17598 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
17599
17600         * expression.cs (ComposedCast.DoResolveType): A quick workaround
17601         to fix the test 165, will investigate deeper.
17602
17603 2002-10-04  Martin Baulig  <martin@gnome.org>
17604
17605         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
17606         finally blocks actually work.
17607         (Try.Resolve): We don't need to create a sibling for `finally' if
17608         there is no finally block.
17609
17610 2002-10-04  Martin Baulig  <martin@gnome.org>
17611
17612         * class.cs (Constructor.Define): The default accessibility for a
17613         non-default constructor is private, not public.
17614
17615 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
17616
17617         * class.cs (Constructor): Make AllowedModifiers public, add
17618         EXTERN.
17619
17620         * cs-parser.jay: Perform the modifiers test here, as the
17621         constructor for the Constructor class usually receives a zero
17622         because of the way we create it (first we create, later we
17623         customize, and we were never checking the modifiers).
17624
17625         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
17626         is a version of LookupTypeReflection that includes the type-name
17627         cache.  This can be used as a fast path for functions that know
17628         the fully qualified name and are only calling into *.GetType() to
17629         obtain a composed type.
17630
17631         This is also used by TypeManager.LookupType during its type
17632         composition.
17633
17634         (LookupType): We now also track the real type name, as sometimes
17635         we can get a quey for the real type name from things like
17636         ComposedCast.  This fixes bug 31422.
17637
17638         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
17639         complete type fullname, it does not have to go through the type
17640         resolution system to obtain the composed version of the type (for
17641         obtaining arrays or pointers).
17642
17643         (Conditional.Emit): Use the EmitBoolExpression to
17644         generate nicer code, as requested by Paolo.
17645
17646         (ArrayCreation.CheckIndices): Use the patch from
17647         hwang_rob@yahoo.ca to validate the array initializers. 
17648
17649 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
17650
17651         * class.cs (ConstructorInitializer.Emit): simplify code by using
17652         Invocation.EmitCall, and at the same time, fix the bugs in calling
17653         parent constructors that took variable arguments. 
17654
17655         * ecore.cs (Expression.ConvertNumericExplicit,
17656         Expression.ImplicitNumericConversion): Remove the code that
17657         manually wrapped decimal (InternalTypeConstructor call is now gone
17658         as well).
17659
17660         * expression.cs (Cast.TryReduce): Also handle decimal types when
17661         trying to perform a constant fold on the type.
17662
17663         * typemanager.cs (IsUnmanagedtype): Partially implemented.
17664
17665         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
17666         that only turned off an error report, and did nothing else. 
17667
17668 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
17669
17670         * driver.cs: Handle and ignore /fullpaths
17671
17672 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
17673
17674         * expression.cs (Binary.ResolveOperator): Catch the case where
17675         DoNumericPromotions returns true, 
17676
17677         (Binary.DoNumericPromotions): Simplify the code, and the tests.
17678
17679 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
17680
17681         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
17682         report error 70.
17683
17684 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
17685
17686         * ecore.cs (ConvertNumericExplicit): It is not enough that the
17687         conversion exists, but it is also required that the conversion be
17688         performed.  This manifested in "(Type64Enum) 2".  
17689
17690         * class.cs (TypeManager.AddMethod): The fix is not to change
17691         AddEnum, because that one was using a fully qualified name (every
17692         DeclSpace derivative does), but to change the AddMethod routine
17693         that was using an un-namespaced name.  This now correctly reports
17694         the duplicated name.
17695
17696         Revert patch until I can properly fix it.  The issue
17697         is that we have a shared Type space across all namespaces
17698         currently, which is wrong.
17699
17700         Options include making the Namespace a DeclSpace, and merge
17701         current_namespace/current_container in the parser.
17702
17703 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
17704
17705         * cs-parser.jay: Improve error reporting when we get a different
17706         kind of expression in local_variable_type and
17707         local_variable_pointer_type. 
17708
17709         Propagate this to avoid missleading errors being reported.
17710
17711         * ecore.cs (ImplicitReferenceConversion): treat
17712         TypeManager.value_type as a target just like object_type.   As
17713         code like this:
17714
17715         ValueType v = 1;
17716
17717         Is valid, and needs to result in the int 1 being boxed before it
17718         is assigned to the value type v.
17719
17720         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
17721         to validate the enumeration name.
17722
17723         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
17724         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
17725         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
17726
17727         * ecore.cs (TryImplicitIntConversion): When doing an
17728         implicit-enumeration-conversion, check if the type is 64-bits and
17729         perform a conversion before passing to EnumConstant.
17730
17731 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
17732
17733         * decl.cs (Error_AmbiguousTypeReference); New routine used to
17734         report ambiguous type references.  Unlike the MS version, we
17735         report what the ambiguity is.   Innovation at work ;-)
17736
17737         (DeclSpace.FindType): Require a location argument to
17738         display when we display an ambiguous error.
17739
17740         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
17741
17742         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
17743
17744         * expression.cs (EmitDynamicInitializers): Apply patch from
17745         hwang_rob@yahoo.ca that fixes the order in which we emit our
17746         initializers. 
17747
17748 2002-09-21  Martin Baulig  <martin@gnome.org>
17749
17750         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
17751         delegate takes no arguments.
17752
17753 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
17754
17755         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
17756         from integers.
17757
17758         * expression.cs: Extract the underlying type.
17759
17760         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
17761
17762         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
17763
17764 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
17765
17766         * class.cs (TypeContainer.DefineType): We can not use the nice
17767         PackingSize with the size set to 1 DefineType method, because it
17768         will not allow us to define the interfaces that the struct
17769         implements.
17770
17771         This completes the fixing of bug 27287
17772
17773         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
17774         means also structs.  This fixes part of the problem. 
17775         (Expresion.ImplicitReferenceConversionExists): ditto.
17776
17777         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
17778         error if there were no errors reported during the type lookup
17779         process, to avoid duplicates or redundant errors.  Without this
17780         you would get an ambiguous errors plus a type not found.  We have
17781         beaten the user enough with the first error.  
17782
17783         (DeclSparce.FindType): Emit a warning if we have an ambiguous
17784         reference. 
17785
17786         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
17787         during the resolution process, stop the lookup, this avoids
17788         repeated error reports (same error twice).
17789
17790         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
17791
17792         * typemanager.cs (LookupType): Redo the type lookup code to match
17793         the needs of System.Reflection.  
17794
17795         The issue is that System.Reflection requires references to nested
17796         types to begin with a "+" sign instead of a dot.  So toplevel
17797         types look like: "NameSpace.TopLevelClass", and nested ones look
17798         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
17799         levels. 
17800
17801 2002-09-19  Martin Baulig  <martin@gnome.org>
17802
17803         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
17804         says that a method always returns or always throws an exception,
17805         don't report the CS0161.
17806
17807         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
17808         set `Returns = new_returns'.
17809
17810 2002-09-19  Martin Baulig  <martin@gnome.org>
17811
17812         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
17813         to an enum constant, check for a CS0176.
17814
17815 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
17816
17817         * class.cs (TypeContainer.CheckPairedOperators): Now we check
17818         for operators that must be in pairs and report errors.
17819
17820         * ecore.cs (SimpleName.DoResolveType): During the initial type
17821         resolution process, when we define types recursively, we must
17822         check first for types in our current scope before we perform
17823         lookups in the enclosing scopes.
17824
17825         * expression.cs (MakeByteBlob): Handle Decimal blobs.
17826
17827         (Invocation.VerifyArgumentsCompat): Call
17828         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
17829         I thought we were supposed to always call this, but there are a
17830         few places in the code where we dont do it.
17831
17832 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
17833
17834         * driver.cs: Add support in -linkres and -resource to specify the
17835         name of the identifier.
17836
17837 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
17838
17839         * ecore.cs (StandardConversionExists): Sync with the conversion
17840         code: allow anything-* to void* conversions.
17841
17842         (FindMostSpecificSource): Use an Expression argument
17843         instead of a Type, because we might be handed over a Literal which
17844         gets a few more implicit conversions that plain types do not.  So
17845         this information was being lost.
17846
17847         Also, we drop the temporary type-holder expression when not
17848         required.
17849
17850 2002-09-17  Martin Baulig  <martin@gnome.org>
17851
17852         * class.cs (PropertyBase.CheckBase): Don't check the base class if
17853         this is an explicit interface implementation.
17854
17855 2002-09-17  Martin Baulig  <martin@gnome.org>
17856
17857         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
17858         different `IndexerName' attributes.
17859
17860         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
17861         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
17862         virtual CommonResolve().
17863
17864 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
17865
17866         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
17867         and convert that to the UnderlyingType.
17868
17869         * statement.cs (Foreach.Resolve): Indexers are just like variables
17870         or PropertyAccesses.
17871
17872         * cs-tokenizer.cs (consume_string): Track line numbers and columns
17873         inside quoted strings, we were not doing this before.
17874
17875 2002-09-16  Martin Baulig  <martin@gnome.org>
17876
17877         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
17878         resolve it.  This is needed for the definite assignment check of the
17879         instance expression, fixes bug #29846.
17880         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
17881
17882 2002-09-16  Nick Drochak  <ndrochak@gol.com>
17883
17884         * parameter.cs: Fix compile error.  Cannot reference static member
17885         from an instance object.  Is this an mcs bug?
17886
17887 2002-09-14  Martin Baulig  <martin@gnome.org>
17888
17889         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
17890         multiple times.  Fixes bug #30295, added test-166.cs.
17891
17892 2002-09-14  Martin Baulig  <martin@gnome.org>
17893
17894         * statement.cs (Block.Emit): Don't emit unreachable code.
17895         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
17896         `break' statements.
17897         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
17898
17899 2002-09-14  Martin Baulig  <martin@gnome.org>
17900
17901         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
17902         is set.
17903
17904 2002-09-14  Martin Baulig  <martin@gnome.org>
17905
17906         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
17907         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
17908         be false on the ms runtime.
17909
17910 2002-09-13  Martin Baulig  <martin@gnome.org>
17911
17912         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
17913         the CS0038 error message.
17914
17915 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
17916
17917         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
17918         constant inside, return it.
17919
17920 2002-09-12  Martin Baulig  <martin@gnome.org>
17921
17922         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
17923         implicit conversion can be done between enum types.
17924
17925         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
17926         check whether an implicit conversion to the current enum's UnderlyingType
17927         exists and report an error if not.
17928
17929         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
17930         without debugging support.
17931
17932         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
17933         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
17934
17935 2002-09-12  Martin Baulig  <martin@gnome.org>
17936
17937         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
17938
17939         * ecore.cs (IMemberExpr.DeclaringType): New property.
17940         (SimpleName.SimpleNameResolve): Check whether we're accessing a
17941         nonstatic member of an outer type (CS0038).
17942
17943 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
17944
17945         * driver.cs: Activate the using-error detector at warning level
17946         4 (at least for MS-compatible APIs).
17947
17948         * namespace.cs (VerifyUsing): Small buglett fix.
17949
17950         * pending.cs (PendingImplementation): pass the container pointer. 
17951
17952         * interface.cs (GetMethods): Allow for recursive definition.  Long
17953         term, I would like to move every type to support recursive
17954         definitions, not the current ordering mechanism that we have right
17955         now.
17956
17957         The situation is this: Attributes are handled before interfaces,
17958         so we can apply attributes to interfaces.  But some attributes
17959         implement interfaces, we will now handle the simple cases
17960         (recursive definitions will just get an error).  
17961
17962         * parameter.cs: Only invalidate types at the end if we fail to
17963         lookup all types.  
17964
17965 2002-09-09  Martin Baulig  <martin@gnome.org>
17966
17967         * ecore.cs (PropertyExpr.Emit): Also check for
17968         TypeManager.system_int_array_get_length so this'll also work when
17969         compiling corlib.  Fixes #30003.
17970
17971 2002-09-09  Martin Baulig  <martin@gnome.org>
17972
17973         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
17974         and throw an exception if we can't get the type's size.  Fixed #30040,
17975         added test-165.cs.
17976
17977 2002-09-09  Martin Baulig  <martin@gnome.org>
17978
17979         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
17980
17981         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
17982         context.  Fixes bug #30027.
17983
17984         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
17985         virtual functions.  Fixes bug #30043, added test-164.cs.
17986
17987 2002-09-08  Ravi Pratap  <ravi@ximian.com>
17988
17989         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
17990
17991 2002-09-08  Nick Drochak  <ndrochak@gol.com>
17992
17993         * driver.cs: Use an object to get the windows codepage since it's not a
17994         static property.
17995
17996 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
17997
17998         * statement.cs (For.Emit): for infinite loops (test == null)
17999         return whether there is a break inside, not always "true".
18000
18001         * namespace.cs (UsingEntry): New struct to hold the name of the
18002         using definition, the location where it is defined, and whether it
18003         has been used in a successful type lookup.
18004
18005         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
18006         strings.
18007
18008         * decl.cs: ditto.
18009
18010 2002-09-06  Ravi Pratap  <ravi@ximian.com>
18011
18012         * attribute.cs : Fix incorrect code which relied on catching
18013         a NullReferenceException to detect a null being passed in
18014         where an object was expected.
18015
18016 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
18017
18018         * statement.cs (Try): flag the catch variable as assigned
18019
18020         * expression.cs (Cast): Simplified by using ResolveType instead of
18021         manually resolving.
18022
18023         * statement.cs (Catch): Fix bug by using ResolveType.
18024
18025 2002-09-06  Ravi Pratap  <ravi@ximian.com>
18026
18027         * expression.cs (BetterConversion): Special case for when we have
18028         a NullLiteral as the argument and we have to choose between string
18029         and object types - we choose string the way csc does.
18030
18031         * attribute.cs (Attribute.Resolve): Catch the
18032         NullReferenceException and report error #182 since the Mono
18033         runtime no more has the bug and having this exception raised means
18034         we tried to select a constructor which takes an object and is
18035         passed a null.
18036
18037 2002-09-05  Ravi Pratap  <ravi@ximian.com>
18038
18039         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
18040         message (1502, 1503) when we can't locate a method after overload
18041         resolution. This is much more informative and closes the bug
18042         Miguel reported.
18043
18044         * interface.cs (PopulateMethod): Return if there are no argument
18045         types. Fixes a NullReferenceException bug.
18046
18047         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
18048         expressions too. Previously we were checking only in one place for
18049         positional arguments leaving out named arguments.
18050
18051         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
18052         type to the enum type is not allowed. Remove code corresponding to
18053         that.
18054
18055         (ConvertNumericExplicit): Allow explicit conversions from
18056         the underlying type to enum type. This precisely follows the spec
18057         and closes a bug filed by Gonzalo.
18058
18059 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18060
18061         * compiler.csproj:
18062         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
18063
18064 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
18065
18066         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
18067         it was important that we stored the right value after the
18068         reduction in `converted'.
18069
18070 2002-09-04  Martin Baulig  <martin@gnome.org>
18071
18072         * location.cs (Location.SymbolDocument): Use full pathnames for the
18073         source files.
18074
18075 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
18076
18077         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
18078         of the expression resolve mechanism, because that will catch the
18079         SimpleName error failures.
18080
18081         (Conditional): If we can not resolve the
18082         expression, return, do not crash.
18083
18084 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18085
18086         * cs-tokenizer.cs:
18087         (location): display token name instead of its number.
18088
18089 2002-08-28  Martin Baulig  <martin@gnome.org>
18090
18091         * expression.cs (Binary.ResolveOperator): Don't silently return
18092         but return an error if an operator cannot be applied between two
18093         enum types.
18094
18095 2002-08-28  Martin Baulig  <martin@gnome.org>
18096
18097         * class.cs (Constructor.Define): Set the permission attributes
18098         correctly instead of making all constructors public.
18099
18100 2002-08-28  Martin Baulig  <martin@gnome.org>
18101
18102         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
18103         for private members before reporting a CS0103; if we find anything,
18104         it's a CS0122.
18105
18106 2002-08-28  Martin Baulig  <martin@gnome.org>
18107
18108         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
18109         to check whether `closure_start_type == closure_invocation_type',
18110         we also need to check whether `m.DeclaringType == closure_invocation_type'
18111         before bypassing the permission checks.  We might be accessing
18112         protected/private members from the base class.
18113         (TypeManager.RealMemberLookup): Only set private_ok if private
18114         members were requested via BindingFlags.NonPublic.
18115
18116         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
18117
18118         * expression.cs (MemberAccess.ResolveMemberAccess): Set
18119         MethodGroupExpr.IsExplicitImpl if appropriate.
18120         (Invocation.DoResolve): Don't report the CS0120 for explicit
18121         interface implementations.
18122
18123 2002-08-27  Martin Baulig  <martin@gnome.org>
18124
18125         * expression.cs (Invocation.DoResolve): If this is a static
18126         method and we don't have an InstanceExpression, we must report
18127         a CS0120.
18128
18129 2002-08-25  Martin Baulig  <martin@gnome.org>
18130
18131         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
18132         `==' between a valuetype and an object.
18133
18134 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
18135
18136         * ecore.cs (TypeExpr): Provide a ToString method.
18137
18138 2002-08-24  Martin Baulig  <martin@gnome.org>
18139
18140         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
18141         now called proggie.dbg and it's a binary file.
18142
18143 2002-08-23  Martin Baulig  <martin@gnome.org>
18144
18145         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
18146
18147 2002-08-23  Martin Baulig  <martin@gnome.org>
18148
18149         * struct.cs (MyStructInfo.ctor): Make this work with empty
18150         structs; it's not allowed to use foreach() on null.
18151
18152 2002-08-23  Martin Baulig  <martin@gnome.org>
18153
18154         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
18155         writer the full pathname of the generated assembly.
18156
18157 2002-08-23  Martin Baulig  <martin@gnome.org>
18158
18159         * statements.cs (FlowBranching.UsageVector.MergeChildren):
18160         A `finally' block never returns or breaks; improved handling of
18161         unreachable code.
18162
18163 2002-08-23  Martin Baulig  <martin@gnome.org>
18164
18165         * statement.cs (Throw.Resolve): Allow `throw null'.
18166
18167 2002-08-23  Martin Baulig  <martin@gnome.org>
18168
18169         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
18170         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
18171         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
18172         MemberLookup would return a wrong event if this is an explicit
18173         interface implementation and the class has an event with the same
18174         name.
18175
18176 2002-08-23  Martin Baulig  <martin@gnome.org>
18177
18178         * statement.cs (Block.AddChildVariableNames): New public method.
18179         (Block.AddChildVariableName): Likewise.
18180         (Block.IsVariableNameUsedInChildBlock): Likewise.
18181         (Block.AddVariable): Check whether a variable name has already
18182         been used in a child block.
18183
18184         * cs-parser.jay (declare_local_variables): Mark all variable names
18185         from the current block as being used in a child block in the
18186         implicit block.
18187
18188 2002-08-23  Martin Baulig  <martin@gnome.org>
18189
18190         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
18191         find the symbol writer.
18192
18193         * driver.cs: csc also allows the arguments to /define being
18194         separated by commas, not only by semicolons.
18195
18196 2002-08-23  Martin Baulig  <martin@gnome.org>
18197
18198         * interface.cs (Interface.GetMembers): Added static check for events.
18199
18200 2002-08-15  Martin Baulig  <martin@gnome.org>
18201
18202         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
18203         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
18204
18205         * ecore.cs (Expression.MemberLookup): Added documentation and explained
18206         why the MethodData.EmitDestructor() change was necessary.
18207
18208 2002-08-20  Martin Baulig  <martin@gnome.org>
18209
18210         * class.cs (TypeContainer.FindMembers): Added static check for events.
18211
18212         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
18213
18214         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
18215         use Type.GetEvents(), not Type.FindMembers().
18216
18217 2002-08-20  Martin Baulig  <martin@gnome.org>
18218
18219         * decl.cs (MemberCache): Added a special method cache which will
18220         be used for method-only searched.  This ensures that a method
18221         search will return a MethodInfo with the correct ReflectedType for
18222         inherited methods.      
18223
18224 2002-08-20  Martin Baulig  <martin@gnome.org>
18225
18226         * decl.cs (DeclSpace.FindMembers): Made this public.
18227
18228 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18229
18230         * delegate.cs: fixed build on windows.
18231         [FIXME:  Filed as bug #29150: MCS must report these errors.]
18232
18233 2002-08-19  Ravi Pratap  <ravi@ximian.com>
18234
18235         * ecore.cs (StandardConversionExists): Return a false
18236         if we are trying to convert the void type to anything else
18237         since that is not allowed.
18238
18239         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
18240         we flag error 70 in the event an event is trying to be accessed
18241         directly from outside the declaring type.
18242
18243 2002-08-20  Martin Baulig  <martin@gnome.org>
18244
18245         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
18246         MemberCache from typemanager.cs to decl.cs.
18247
18248 2002-08-19  Martin Baulig  <martin@gnome.org>
18249
18250         * class.cs (TypeContainer): Implement IMemberContainer.
18251         (TypeContainer.DefineMembers): Create the MemberCache.
18252         (TypeContainer.FindMembers): Do better BindingFlags checking; only
18253         return public members if BindingFlags.Public was given, check
18254         whether members are static.
18255
18256 2002-08-16  Martin Baulig  <martin@gnome.org>
18257
18258         * decl.cs (DeclSpace.Define): Splitted this in Define and
18259         DefineMembers.  DefineMembers is called first and initializes the
18260         MemberCache.
18261
18262         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
18263         DefineMembers() on all our DeclSpaces.
18264
18265         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
18266         but call DefineMembers() on all nested interfaces.  We call their
18267         Define() in our new Define() function.
18268
18269         * interface.cs (Interface): Implement IMemberContainer.
18270         (Interface.Define): Moved all code except the attribute stuf to
18271         DefineMembers().
18272         (Interface.DefineMembers): Initialize the member cache.
18273
18274         * typemanager.cs (IMemberFinder): Removed this interface, we don't
18275         need this anymore since we can use MemberCache.FindMembers directly.
18276
18277 2002-08-19  Martin Baulig  <martin@gnome.org>
18278
18279         * typemanager.cs (MemberCache): When creating the cache for an
18280         interface type, add all inherited members.
18281         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
18282         to `out bool used_cache' and documented it.
18283         (TypeManager.MemberLookup): If we already used the cache in the first
18284         iteration, we don't need to do the interfaces check.
18285
18286 2002-08-19  Martin Baulig  <martin@gnome.org>
18287
18288         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
18289         here from IMemberFinder and don't implement this interface anymore.
18290         (DeclSpace.MemberCache): Moved here from IMemberFinder.
18291
18292         * typemanager.cs (IMemberFinder): This interface is now only used by
18293         classes which actually support the member cache.
18294         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
18295         since we only put DeclSpaces into this Hashtable.
18296         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
18297         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
18298
18299 2002-08-16  Martin Baulig  <martin@gnome.org>
18300
18301         * typemanager.cs (ICachingMemberFinder): Removed.
18302         (IMemberFinder.MemberCache): New property.
18303         (TypeManager.FindMembers): Merged this with RealFindMembers().
18304         This function will never be called from TypeManager.MemberLookup()
18305         so we can't use the cache here, just the IMemberFinder.
18306         (TypeManager.MemberLookup_FindMembers): Check whether the
18307         IMemberFinder has a MemberCache and call the cache's FindMembers
18308         function.
18309         (MemberCache): Rewrote larger parts of this yet another time and
18310         cleaned it up a bit.
18311
18312 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
18313
18314         * driver.cs (LoadArgs): Support quoting.
18315
18316         (Usage): Show the CSC-like command line arguments.
18317
18318         Improved a few error messages.
18319
18320 2002-08-15  Martin Baulig  <martin@gnome.org>
18321
18322         * typemanager.cs (IMemberContainer.Type): New property.
18323         (IMemberContainer.IsInterface): New property.
18324
18325         The following changes are conditional to BROKEN_RUNTIME, which is
18326         defined at the top of the file.
18327
18328         * typemanager.cs (MemberCache.MemberCache): Don't add the base
18329         class'es members, but add all members from TypeHandle.ObjectType
18330         if we're an interface.
18331         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
18332         is the current type.
18333         (MemberCache.CacheEntry.Container): Removed this field.
18334         (TypeHandle.GetMembers): Include inherited members.
18335
18336 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18337
18338         * typemanager.cs: fixed compilation and added a comment on a field that
18339         is never used.
18340
18341 2002-08-15  Martin Baulig  <martin@gnome.org>
18342
18343         * class.cs (ConstructorInitializer.Resolve): In the
18344         Expression.MemberLookup call, use the queried_type as
18345         invocation_type.
18346
18347         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
18348         declared' attribute, it's always true.
18349         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
18350         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
18351         temporary wrapper for FindMembers which tells MemberLookup whether
18352         members from the base classes are included in the return value.
18353         This will go away soon.
18354         (TypeManager.MemberLookup): Use this temporary hack here; once the
18355         new MemberCache is completed, we don't need to do the DeclaredOnly
18356         looping here anymore since the MemberCache will take care of this.
18357         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
18358         (MemberCache): When creating the MemberCache for a class, get
18359         members from the current class and all its base classes.
18360         (MemberCache.CacheEntry.Container): New field.  This is a
18361         temporary hack until the Mono runtime is fixed to distinguish
18362         between ReflectedType and DeclaringType.  It allows us to use MCS
18363         with both the MS runtime and the unfixed Mono runtime without
18364         problems and without accecting performance.
18365         (MemberCache.SearchMembers): The DeclaredOnly looping from
18366         TypeManager.MemberLookup is now done here.      
18367
18368 2002-08-14  Martin Baulig  <martin@gnome.org>
18369
18370         * statement.cs (MyStructInfo.MyStructInfo): Don't call
18371         Type.GetFields on dynamic types but get the fields from the
18372         corresponding TypeContainer.
18373         (MyStructInfo.GetStructInfo): Added check for enum types.
18374
18375         * typemanager.cs (MemberList.IsSynchronized): Implemented.
18376         (MemberList.SyncRoot): Implemented.
18377         (TypeManager.FilterWithClosure): No need to check permissions if
18378         closure_start_type == closure_invocation_type, don't crash if
18379         closure_invocation_type is null.
18380
18381 2002-08-13  Martin Baulig  <martin@gnome.org>
18382
18383         Rewrote TypeContainer.FindMembers to use a member cache.  This
18384         gives us a speed increase of about 35% for the self-hosting MCS
18385         build and of about 15-20% for the class libs (both on GNU/Linux).
18386
18387         * report.cs (Timer): New class to get enhanced profiling.  This
18388         whole class is "TIMER" conditional since it remarkably slows down
18389         compilation speed.
18390
18391         * class.cs (MemberList): New class.  This is an IList wrapper
18392         which we're now using instead of passing MemberInfo[]'s around to
18393         avoid copying this array unnecessarily.
18394         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
18395         (ICachingMemberFinder, IMemberContainer): New interface.
18396         (TypeManager.FilterWithClosure): If `criteria' is null, the name
18397         has already been checked, otherwise use it for the name comparision.
18398         (TypeManager.FindMembers): Renamed to RealMemberFinder and
18399         provided wrapper which tries to use ICachingMemberFinder.FindMembers
18400         if possible.  Returns a MemberList, not a MemberInfo [].
18401         (TypeHandle): New class, implements IMemberContainer.  We create
18402         one instance of this class per type, it contains a MemberCache
18403         which is used to do the member lookups.
18404         (MemberCache): New class.  Each instance of this class contains
18405         all members of a type and a name-based hash table.
18406         (MemberCache.FindMembers): This is our new member lookup
18407         function.  First, it looks up all members of the requested name in
18408         the hash table.  Then, it walks this list and sorts out all
18409         applicable members and returns them.
18410
18411 2002-08-13  Martin Baulig  <martin@gnome.org>
18412
18413         In addition to a nice code cleanup, this gives us a performance
18414         increase of about 1.4% on GNU/Linux - not much, but it's already
18415         half a second for the self-hosting MCS compilation.
18416
18417         * typemanager.cs (IMemberFinder): New interface.  It is used by
18418         TypeManager.FindMembers to call FindMembers on a TypeContainer,
18419         Enum, Delegate or Interface.
18420         (TypeManager.finder_to_member_finder): New PtrHashtable.
18421         (TypeManager.finder_to_container): Removed.
18422         (TypeManager.finder_to_delegate): Removed.
18423         (TypeManager.finder_to_interface): Removed.
18424         (TypeManager.finder_to_enum): Removed.
18425
18426         * interface.cs (Interface): Implement IMemberFinder.
18427
18428         * delegate.cs (Delegate): Implement IMemberFinder.
18429
18430         * enum.cs (Enum): Implement IMemberFinder.
18431
18432         * class.cs (TypeContainer): Implement IMemberFinder.
18433
18434 2002-08-12  Martin Baulig  <martin@gnome.org>
18435
18436         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
18437
18438 2002-08-12  Martin Baulig  <martin@gnome.org>
18439
18440         * ecore.cs (ITypeExpression): New interface for expressions which
18441         resolve to a type.
18442         (TypeExpression): Renamed to TypeLookupExpression.
18443         (Expression.DoResolve): If we're doing a types-only lookup, the
18444         expression must implement the ITypeExpression interface and we
18445         call DoResolveType() on it.
18446         (SimpleName): Implement the new ITypeExpression interface.
18447         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
18448         hack, the situation that we're only looking up types can't happen
18449         anymore when this method is called.  Moved the type lookup code to
18450         DoResolveType() and call it.
18451         (SimpleName.DoResolveType): This ITypeExpression interface method
18452         is now doing the types-only lookup.
18453         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
18454         (ResolveFlags): Added MaskExprClass.
18455
18456         * expression.cs (MemberAccess): Implement the ITypeExpression
18457         interface.
18458         (MemberAccess.DoResolve): Added support for a types-only lookup
18459         when we're called via ITypeExpression.DoResolveType().
18460         (ComposedCast): Implement the ITypeExpression interface.
18461
18462         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
18463         Expression.Resolve() with ResolveFlags.Type instead.
18464
18465 2002-08-12  Martin Baulig  <martin@gnome.org>
18466
18467         * interface.cs (Interface.Define): Apply attributes.
18468
18469         * attribute.cs (Attribute.ApplyAttributes): Added support for
18470         interface attributes.
18471
18472 2002-08-11  Martin Baulig  <martin@gnome.org>
18473
18474         * statement.cs (Block.Emit): Only check the "this" variable if we
18475         do not always throw an exception.
18476
18477         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
18478         whether the property has a set accessor.
18479
18480 2002-08-11  Martin Baulig  <martin@gnome.org>
18481
18482         Added control flow analysis support for structs.
18483
18484         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
18485         with control flow analysis turned off.
18486         (IVariable): New interface.
18487         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
18488         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
18489         (FieldExpr.DoResolve): Resolve the instance expression with flow
18490         analysis turned off and do the definite assignment check after the
18491         resolving when we know what the expression will resolve to.
18492
18493         * expression.cs (LocalVariableReference, ParameterReference):
18494         Implement the new IVariable interface, only call the flow analysis
18495         code if ec.DoFlowAnalysis is true.
18496         (This): Added constructor which takes a Block argument.  Implement
18497         the new IVariable interface.
18498         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
18499         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
18500         This does the definite assignment checks for struct members.
18501
18502         * class.cs (Constructor.Emit): If this is a non-static `struct'
18503         constructor which doesn't have any initializer, call
18504         Block.AddThisVariable() to tell the flow analysis code that all
18505         struct elements must be initialized before control returns from
18506         the constructor.
18507
18508         * statement.cs (MyStructInfo): New public class.
18509         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
18510         argument to this indexer.  If non-zero, check an individual struct
18511         member, not the whole struct.
18512         (FlowBranching.CheckOutParameters): Check struct members.
18513         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
18514         overloaded versions of these methods which take an additional
18515         `int field_idx' argument to check struct members.
18516         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
18517         overloaded versions of these methods which take an additional
18518         `string field_name' argument to check struct member.s
18519         (VariableInfo): Implement the IVariable interface.
18520         (VariableInfo.StructInfo): New public property.  Returns the
18521         MyStructInfo instance of the variable if it's a struct or null.
18522         (Block.AddThisVariable): New public method.  This is called from
18523         Constructor.Emit() for non-static `struct' constructor which do
18524         not have any initializer.  It creates a special variable for the
18525         "this" instance variable which will be checked by the flow
18526         analysis code to ensure that all of the struct's fields are
18527         initialized before control returns from the constructor.
18528         (UsageVector): Added support for struct members.  If a
18529         variable/parameter is a struct with N members, we reserve a slot
18530         in the usage vector for each member.  A struct is considered fully
18531         initialized if either the struct itself (slot 0) or all its
18532         members are initialized.
18533
18534 2002-08-08  Martin Baulig  <martin@gnome.org>
18535
18536         * driver.cs (Driver.MainDriver): Only report an error CS5001
18537         if there were no compilation errors.
18538
18539         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
18540         `UnsafeContext' property to determine whether the parent is in
18541         unsafe context rather than checking the parent's ModFlags:
18542         classes nested in an unsafe class are unsafe as well.
18543
18544 2002-08-08  Martin Baulig  <martin@gnome.org>
18545
18546         * statement.cs (UsageVector.MergeChildren): Distinguish between
18547         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
18548         we return.  Added test17() and test18() to test-154.cs.
18549
18550 2002-08-08  Martin Baulig  <martin@gnome.org>
18551
18552         * typemanager.cs (TypeManager.FilterWithClosure): If we have
18553         Family access, make sure the invoking type isn't a subclass of the
18554         queried type (that'd be a CS1540).
18555
18556         * ecore.cs (Expression.MemberLookup): Added overloaded version of
18557         this method which takes an additional `Type invocation_type'.
18558
18559         * expression.cs (BaseAccess.DoResolve): Use the base type as
18560         invocation and query type.
18561         (MemberAccess.DoResolve): If the lookup failed and we're about to
18562         report a CS0122, try a lookup with the ec.ContainerType - if this
18563         succeeds, we must report a CS1540.
18564
18565 2002-08-08  Martin Baulig  <martin@gnome.org>
18566
18567         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
18568         (MethodGroupExpr): Implement the IMemberExpr interface.
18569
18570         * expression (MemberAccess.ResolveMemberAccess): No need to have
18571         any special code for MethodGroupExprs anymore, they're now
18572         IMemberExprs.   
18573
18574 2002-08-08  Martin Baulig  <martin@gnome.org>
18575
18576         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
18577         Family, FamANDAssem and FamORAssem permissions.
18578         (TypeManager.IsSubclassOrNestedChildOf): New public method.
18579
18580 2002-08-08  Martin Baulig  <martin@gnome.org>
18581
18582         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
18583         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
18584         or loop block.
18585
18586 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
18587
18588         * driver.cs: implemented /resource option to embed managed resources.
18589
18590 2002-08-07  Martin Baulig  <martin@gnome.org>
18591
18592         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
18593         (FieldBase.HasFieldInitializer): New public property.
18594         (FieldBase.GetInitializerExpression): New public method.  Resolves and
18595         returns the field initializer and makes sure it is only resolved once.
18596         (TypeContainer.EmitFieldInitializers): Call
18597         FieldBase.GetInitializerExpression to get the initializer, this ensures
18598         that it isn't resolved multiple times.
18599
18600         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
18601         the resolving process (SimpleName/MemberLookup) that we're currently
18602         emitting a field initializer (which must not access any instance members,
18603         this is an error CS0236).
18604
18605         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
18606         argument, if the `IsFieldInitializer' flag is set, we must report and
18607         error CS0236 and not an error CS0120.   
18608
18609 2002-08-07  Martin Baulig  <martin@gnome.org>
18610
18611         * ecore.cs (IMemberExpr): New public interface.
18612         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
18613         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
18614         if the expression is an IMemberExpr.
18615
18616         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
18617         to be null, implicitly default to `this' if we're non-static in
18618         this case.  Simplified the code a lot by using the new IMemberExpr
18619         interface.  Also fixed bug #28176 here.
18620
18621 2002-08-06  Martin Baulig  <martin@gnome.org>
18622
18623         * cs-parser.jay (SimpleLookup): Removed.  We need to create
18624         ParameterReferences during semantic analysis so that we can do a
18625         type-only search when resolving Cast, TypeOf and SizeOf.
18626         (block): Pass the `current_local_parameters' to the Block's
18627         constructor.
18628
18629         * class.cs (ConstructorInitializer): Added `Parameters parameters'
18630         argument to the constructor.
18631         (ConstructorInitializer.Resolve): Create a temporary implicit
18632         block with the parameters.
18633
18634         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
18635         references here if we aren't doing a type-only search.
18636
18637         * statement.cs (Block): Added constructor which takes a
18638         `Parameters parameters' argument.
18639         (Block.Parameters): New public property.
18640
18641         * support.cs (InternalParameters.Parameters): Renamed `parameters'
18642         to `Parameters' and made it public readonly.
18643
18644 2002-08-06  Martin Baulig  <martin@gnome.org>
18645
18646         * ecore.cs (Expression.Warning): Made this public as well.
18647
18648         * report.cs (Report.Debug): Print the contents of collections.
18649
18650 2002-08-06  Martin Baulig  <martin@gnome.org>
18651
18652         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
18653         used to tell Resolve() which kinds of expressions it may return.
18654         (Expression.Resolve): Added overloaded version of this method which
18655         takes a `ResolveFlags flags' argument.  This can be used to tell
18656         Resolve() which kinds of expressions it may return.  Reports a
18657         CS0118 on error.
18658         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
18659         ResolveFlags.SimpleName.
18660         (Expression.Error118): Added overloaded version of this method which
18661         takes a `ResolveFlags flags' argument.  It uses the flags to determine
18662         which kinds of expressions are allowed.
18663
18664         * expression.cs (Argument.ResolveMethodGroup): New public method.
18665         Resolves an argument, but allows a MethodGroup to be returned.
18666         This is used when invoking a delegate.
18667
18668         * TODO: Updated a bit.
18669
18670 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18671
18672         Fixed compilation with csc.
18673
18674         * ecore.cs: Expression.Error made public. Is this correct? Should
18675         Warning be made public too?
18676
18677         * expression.cs: use ea.Location instead of ea.loc.
18678         [FIXME:  Filed as bug #28607: MCS must report these errors.]
18679
18680 2002-08-06  Martin Baulig  <martin@gnome.org>
18681
18682         * ecore.cs (Expression.loc): Moved the location here instead of
18683         duplicating it in all derived classes.
18684         (Expression.Location): New public property.
18685         (Expression.Error, Expression.Warning): Made them non-static and
18686         removed the location argument.
18687         (Expression.Warning): Added overloaded version which takes an
18688         `int level' argument.
18689         (Expression.Error118): Make this non-static and removed the
18690         expression and location arguments.
18691         (TypeExpr): Added location argument to the constructor.
18692
18693         * expression.cs (StaticCallExpr): Added location argument to
18694         the constructor.
18695         (Indirection, PointerArithmetic): Likewise.
18696         (CheckedExpr, UnCheckedExpr): Likewise.
18697         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
18698         (StringPtr): Likewise.
18699
18700
18701 2002-08-05  Martin Baulig  <martin@gnome.org>
18702
18703         * expression.cs (BaseAccess.DoResolve): Actually report errors.
18704
18705         * assign.cs (Assign.DoResolve): Check whether the source
18706         expression is a value or variable.
18707
18708         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
18709         while resolving the corresponding blocks.
18710
18711         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
18712         an error, don't silently return null.
18713
18714         * statement.cs (Block.AddVariable): Do the error reporting here
18715         and distinguish between CS0128 and CS0136.
18716         (Block.DoResolve): Report all unused labels (warning CS0164).
18717         (LabeledStatement): Pass the location to the constructor.
18718         (LabeledStatement.HasBeenReferenced): New property.
18719         (LabeledStatement.Resolve): Set it to true here.
18720
18721         * statement.cs (Return.Emit): Return success even after reporting
18722         a type mismatch error (CS0126 or CS0127), this is what csc does and
18723         it avoids confusing the users with any consecutive errors.
18724
18725 2002-08-05  Martin Baulig  <martin@gnome.org>
18726
18727         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
18728
18729         * const.cs (Const.LookupConstantValue): Catch circular definitions.
18730
18731         * expression.cs (MemberAccess.DoResolve): Silently return if an
18732         error has already been reported.
18733
18734         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
18735         error has already been reported.
18736
18737 2002-08-05  Martin Baulig  <martin@gnome.org>
18738
18739         * statement.cs (UsageVector): Only initialize the `parameters'
18740         vector if we actually have any "out" parameters.
18741
18742 2002-08-05  Martin Baulig  <martin@gnome.org>
18743
18744         * expression.cs (Binary.ResolveOperator): When combining delegates,
18745         they must have the same type.
18746
18747 2002-08-05  Martin Baulig  <martin@gnome.org>
18748
18749         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
18750         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
18751         work with the ms runtime and we also don't need it: if we're a
18752         PropertyBuilder and not in the `indexer_arguments' hash, then we
18753         are a property and not an indexer.
18754
18755         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
18756         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
18757         since the latter one doesn't work with the ms runtime.
18758
18759 2002-08-03  Martin Baulig  <martin@gnome.org>
18760
18761         Fixed bugs #27998 and #22735.
18762
18763         * class.cs (Method.IsOperator): New public field.
18764         (Method.CheckBase): Report CS0111 if there's already a method
18765         with the same parameters in the current class.  Report CS0508 when
18766         attempting to change the return type of an inherited method.
18767         (MethodData.Emit): Report CS0179 if a method doesn't have a body
18768         and it's not marked abstract or extern.
18769         (PropertyBase): New abstract base class for Property and Indexer.
18770         (PropertyBase.CheckBase): Moved here from Property and made it work
18771         for indexers.
18772         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
18773         the same so we can reuse it there.
18774         (Property, Indexer): Derive from PropertyBase.
18775         (MethodSignature.inheritable_property_signature_filter): New delegate
18776         to find properties and indexers.
18777
18778         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
18779         argument and improved error reporting.
18780
18781         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
18782         EmptyReadOnlyParameters and made it a property.
18783
18784         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
18785         version of this method which takes a `PropertyInfo indexer'.
18786         (TypeManager.RegisterIndexer): New method.
18787
18788         * class.cs: Added myself as author of this file :-)
18789
18790 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18791
18792         * class.cs: fixed compilation on windoze.
18793
18794 2002-08-03  Martin Baulig  <martin@gnome.org>
18795
18796         * interface.cs (Interface.GetInterfaceBases): Check whether all
18797         base interfaces are at least as accessible than the current one.
18798
18799         * class.cs (TypeContainer.GetClassBases): Check whether base types
18800         are at least as accessible than the current type.
18801         (TypeContainer.AsAccessible): Implemented and made non-static.
18802         (MemberBase.CheckParameters): Report errors if the accessibility
18803         checks fail.
18804
18805         * delegate.cs (Delegate.Delegate): The default visibility is
18806         internal for top-level types and private for nested types.
18807         (Delegate.Define): Report errors if the accessibility checks fail.
18808
18809         * enum.cs (Enum.Enum): The default visibility is internal for
18810         top-level types and private for nested types.
18811         (Enum.DefineType): Compute the correct visibility.
18812
18813         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
18814         function which takes a `bool is_toplevel' instead of a TypeContainer.
18815
18816         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
18817         builtin type.
18818
18819 2002-08-02  Martin Baulig  <martin@gnome.org>
18820
18821         * expression.cs (LocalVariableReferenc): Added constructor which
18822         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
18823         (LocalVariableReference.IsReadOnly): New property.
18824         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
18825         variable is readonly, use our own readonly flag to do this; you can
18826         use the new constructor to get a writable reference to a read-only
18827         variable.
18828
18829         * cs-parser.jay (foreach_statement, using_statement): Get a writable
18830         reference to the local variable.
18831
18832 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
18833
18834         * rootcontext.cs (ResolveCore): Also include System.Exception
18835
18836         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
18837         we reach an EmptyStatement.
18838
18839         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
18840         is also fine.
18841
18842         * expression.cs (Binary.ResolveOperator): Check error result in
18843         two places.
18844
18845         use brtrue/brfalse directly and avoid compares to null.
18846
18847 2002-08-02  Martin Baulig  <martin@gnome.org>
18848
18849         * class.cs (TypeContainer.Define): Define all nested interfaces here.
18850         Fixes bug #28407, added test-155.cs.
18851
18852 2002-08-01  Martin Baulig  <martin@gnome.org>
18853
18854         * class.cs (Event.EmitDefaultMethod): Make this work with static
18855         events.  Fixes #28311, added verify-3.cs.
18856
18857 2002-08-01  Martin Baulig  <martin@gnome.org>
18858
18859         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
18860         `is_disposable' fields.
18861         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
18862         `hm.is_disposable' if we're using the collection pattern.
18863         (Foreach.EmitCollectionForeach): Use the correct type for the
18864         enumerator's local variable, only emit the try/finally block if
18865         necessary (fixes #27713).
18866
18867 2002-08-01  Martin Baulig  <martin@gnome.org>
18868
18869         * ecore.cs (Expression.report118): Renamed to Error118 and made
18870         it public static.
18871
18872         * statement.cs (Throw.Resolve): Check whether the expression is of
18873         the correct type (CS0118) and whether the type derives from
18874         System.Exception (CS0155).
18875         (Catch.Resolve): New method.  Do the type lookup here and check
18876         whether it derives from System.Exception (CS0155).
18877         (Catch.CatchType, Catch.IsGeneral): New public properties.
18878
18879         * typemanager.cs (TypeManager.exception_type): Added.
18880
18881 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
18882
18883         * driver.cs: Updated About function.
18884
18885 2002-07-31  Martin Baulig  <martin@gnome.org>
18886
18887         Implemented Control Flow Analysis.
18888
18889         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
18890         (EmitContext.CurrentBranching): Added.
18891         (EmitContext.StartFlowBranching): Added.
18892         (EmitContext.EndFlowBranching): Added.
18893         (EmitContext.KillFlowBranching): Added.
18894         (EmitContext.IsVariableAssigned): Added.
18895         (EmitContext.SetVariableAssigned): Added.
18896         (EmitContext.IsParameterAssigned): Added.
18897         (EmitContext.SetParameterAssigned): Added.
18898         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
18899         Added control flow analysis stuff here.
18900
18901         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
18902         resolve the expression as lvalue.
18903         (LocalVariableReference.DoResolve): Check whether the variable has
18904         already been assigned.
18905         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
18906         the parameter as assigned here.
18907         (ParameterReference.DoResolve): Check whether the parameter has already
18908         been assigned.
18909         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
18910         expression as lvalue.
18911
18912         * statement.cs (FlowBranching): New class for the flow analysis code.
18913         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
18914         (LabeledStatement.IsDefined): New public property.
18915         (LabeledStatement.AddUsageVector): New public method to tell flow
18916         analyis that the label may be reached via a forward jump.
18917         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
18918         flow analysis.
18919         (VariableInfo.Number): New public field.  This is used by flow analysis
18920         to number all locals of a block.
18921         (Block.CountVariables): New public property.  This is the number of
18922         local variables in this block (including the locals from all parent
18923         blocks).
18924         (Block.EmitMeta): Number all the variables.
18925
18926         * statement.cs: Added flow analysis support to all classes.
18927
18928 2002-07-31  Martin Baulig  <martin@gnome.org>
18929
18930         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
18931         To get debugging messages, compile mcs with /define:MCS_DEBUG and
18932         then use this argument.
18933
18934         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
18935
18936         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
18937         use this to specify /define options.
18938
18939 2002-07-29  Martin Baulig  <martin@gnome.org>
18940
18941         * statement.cs (Fixed): Moved all code that does variable lookups
18942         and resolvings from Emit to Resolve.
18943
18944         * statement.cs (For): Moved all code that does variable lookups
18945         and resolvings from Emit to Resolve.
18946
18947         * statement.cs (Using): Moved all code that does variable lookups
18948         and resolvings from Emit to Resolve.
18949
18950 2002-07-29  Martin Baulig  <martin@gnome.org>
18951
18952         * attribute.cs (Attribute.Resolve): Explicitly catch a
18953         System.NullReferenceException when creating the
18954         CustromAttributeBuilder and report a different warning message.
18955
18956 2002-07-29  Martin Baulig  <martin@gnome.org>
18957
18958         * support.cs (ParameterData.ParameterName): Added method to
18959         get the name of a parameter.
18960
18961         * typemanager.cs (TypeManager.IsValueType): New public method.
18962
18963 2002-07-29  Martin Baulig  <martin@gnome.org>
18964
18965         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
18966         is a flag which specifies that it's either ref or out.
18967         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
18968         the out parameter to `out Parameter.Modifier mod', also set the
18969         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
18970
18971         * support.cs (InternalParameters.ParameterModifier): Distinguish
18972         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
18973         Parameter.Modifier.ISBYREF flag if it's either ref or out.
18974
18975         * expression.cs (Argument.GetParameterModifier): Distinguish
18976         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
18977         Parameter.Modifier.ISBYREF flag if it's either ref or out.
18978
18979 2002-07-29  Martin Baulig  <martin@gnome.org>
18980
18981         * expression.cs (ParameterReference.ParameterReference): Added
18982         `Location loc' argument to the constructor.
18983
18984         * cs-parser.jay: Pass location to ParameterReference.
18985
18986 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
18987
18988         * statement.cs (Try): Initialize the location.
18989
18990         * cs-parser.jay: pass location to Try.
18991
18992         * expression.cs (Unary.Reduce): Change the prototype to return
18993         whether a constant fold could be performed or not.  The result is
18994         returned in an out parameters.  In the case of Indirection and
18995         AddressOf, we want to perform the full tests.
18996
18997 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
18998
18999         * statement.cs (Statement.Emit): Flag dead code.
19000
19001 2002-07-27  Andrew Birkett  <andy@nobugs.org>
19002
19003         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
19004
19005 2002-07-27  Martin Baulig  <martin@gnome.org>
19006
19007         * class.cs (MethodData.Define): Put back call to
19008         TypeManager.AddMethod(), accidentally commented this out.
19009
19010         * report.cs (Debug): New public method to print debugging information,
19011         this is `[Conditional ("DEBUG")]'.
19012
19013 2002-07-26  Martin Baulig  <martin@gnome.org>
19014
19015         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
19016         (switch_statement): Push the current_block to the switch_stack and
19017         pop it again when we're done with the switch.
19018         (switch_section): The new block is a child of the current_block.
19019         Fixes bug #24007, added test-152.cs.
19020
19021 2002-07-27  Martin Baulig  <martin@gnome.org>
19022
19023         * expression.cs (Invocation.EmitArguments): When calling a varargs
19024         function with only its fixed arguments, we need to pass an empty
19025         array.
19026
19027 2002-07-27  Martin Baulig  <martin@gnome.org>
19028
19029         Mono 0.13 has been released.
19030
19031 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
19032
19033         * driver.cs: Rename --resource to --linkres, because that is what
19034         we do currently, we dont support --resource yet.
19035
19036         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
19037
19038 2002-07-25  Martin Baulig  <martin@gnome.org>
19039
19040         * class.cs (MethodData): New public class.  This is a `method builder'
19041         class for a method or one accessor of a Property/Indexer/Event.
19042         (MethodData.GetMethodFlags): Moved here from MemberBase.
19043         (MethodData.ApplyAttributes): Likewise.
19044         (MethodData.ApplyObsoleteAttribute): Likewise.
19045         (MethodData.ApplyConditionalAttribute): Likewise.
19046         (MethodData.ApplyDllImportAttribute): Likewise.
19047         (MethodData.CheckAbstractAndExternal): Likewise.
19048         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
19049         (MethodData.Emit): Formerly known as Method.Emit().
19050         (MemberBase): Moved everything which was specific to a single
19051         accessor/method to MethodData.
19052         (Method): Create a new MethodData and call Define() and Emit() on it.
19053         (Property, Indexer, Event): Create a new MethodData objects for each
19054         accessor and call Define() and Emit() on them.
19055
19056 2002-07-25  Martin Baulig  <martin@gnome.org>
19057
19058         Made MethodCore derive from MemberBase to reuse the code from there.
19059         MemberBase now also checks for attributes.
19060
19061         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
19062         (MemberBase.GetMethodFlags): Moved here from class Method and marked
19063         as virtual.
19064         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
19065         `CallingConventions cc' and `Attributes opt_attrs' arguments.
19066         (MemberBase.ApplyAttributes): New virtual method; applies the
19067         attributes to a method or accessor.
19068         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
19069         (MemberBase.ApplyConditionalAttribute): Likewise.
19070         (MemberBase.ApplyDllImportAttribute): Likewise.
19071         (MemberBase.CheckAbstractAndExternal): Likewise.
19072         (MethodCore.ParameterTypes): This is now a property instead of a
19073         method, it's initialized from DoDefineParameters().
19074         (MethodCore.ParameterInfo): Removed the set accessor.
19075         (MethodCore.DoDefineParameters): New protected virtual method to
19076         initialize ParameterTypes and ParameterInfo.
19077         (Method.GetReturnType): We can now simply return the MemberType.
19078         (Method.GetMethodFlags): Override the MemberBase version and add
19079         the conditional flags.
19080         (Method.CheckBase): Moved some code from Define() here, call
19081         DoDefineParameters() here.
19082         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
19083         here to avoid some larger code duplication.
19084         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
19085         ensure that abstract and external accessors don't declare a body.
19086
19087         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
19088         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
19089         lookup in the attribute's parent classes, so we need to abort as soon
19090         as we found the first match.
19091         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
19092         the attribute has no arguments.
19093
19094         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
19095         of a Method.
19096
19097 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19098
19099         * cs-parser.jay: reverted previous patch.
19100
19101 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19102
19103         * cs-parser.jay: fixed bug #22119.
19104
19105 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19106
19107         * attribute.cs: fixed compilation. The error was:
19108         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
19109         be assigned to before control leaves the current method."
19110         [FIXME:  Filed as bug #28186: MCS must report this error.]
19111
19112 2002-07-25  Martin Baulig  <martin@gnome.org>
19113
19114         * attribute.cs (Attribute.Conditional_GetConditionName): New static
19115         method to pull the condition name ouf of a Conditional attribute.
19116         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
19117         the obsolete message and error flag out of an Obsolete attribute.
19118
19119         * class.cs (Method.GetMethodFlags): New public method to get the
19120         TypeManager.MethodFlags for this method.
19121         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
19122         private methods.
19123         (Method.Define): Get and apply the Obsolete and Conditional attributes;
19124         if we're overriding a virtual function, set the new private variable
19125         `parent_method'; call the new TypeManager.AddMethod().
19126
19127         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
19128         the MethodBuilder and the Method in a PtrHashtable.
19129         (TypeManager.builder_to_method): Added for this purpose.
19130         (TypeManager.MethodFlags): Added IsObsoleteError.
19131         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
19132         Obsolete and Conditional arguments in MethodBuilders.  If we discover
19133         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
19134         the message from the attribute.
19135
19136 2002-07-24  Martin Baulig  <martin@gnome.org>
19137
19138         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
19139         preprocessor directives, ensure that the argument to #define/#undef is
19140         exactly one identifier and that it's actually an identifier.
19141
19142         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
19143         did not work ....
19144
19145 2002-07-24  Martin Baulig  <martin@gnome.org>
19146
19147         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
19148         initialize it to TypeManager.object_type in the constructor.
19149         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
19150         of the `hm.get_current' method if we're using the collection pattern.
19151         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
19152         for the explicit conversion to make it work when we're using the collection
19153         pattern and the `Current' property has a different return type than `object'.
19154         Fixes #27713.
19155
19156 2002-07-24  Martin Baulig  <martin@gnome.org>
19157
19158         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
19159         does not match, but don't report any errors.  This method is called in
19160         order for all methods in a MethodGroupExpr until a matching method is
19161         found, so we don't want to bail out if the first method doesn't match.
19162         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
19163         matches, report the 123.  Fixes #28070.
19164
19165 2002-07-24  Martin Baulig  <martin@gnome.org>
19166
19167         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
19168         TypeManager.TypeToCoreType() to the top of the method so the
19169         following equality checks will work.  Fixes #28107.
19170
19171 2002-07-24  Martin Baulig  <martin@gnome.org>
19172
19173         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
19174         operand is of type uint, and the other operand is of type sbyte,
19175         short or int, the operands are converted to type long." -
19176         Actually do what this comment already told us.  Fixes bug #28106,
19177         added test-150.cs.
19178
19179 2002-07-24  Martin Baulig  <martin@gnome.org>
19180
19181         * class.cs (MethodBase): New abstract class.  This is now a base
19182         class for Property, Indexer and Event to avoid some code duplication
19183         in their Define() and DefineMethods() methods.
19184         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
19185         generic methods for Define() and DefineMethods().
19186         (FieldBase): Derive from MemberBase, not MemberCore.
19187         (Property): Derive from MemberBase, not MemberCore.
19188         (Property.DefineMethod): Moved all the code from this method to the
19189         new MethodBase.DefineAccessor(), just call it with appropriate
19190         argumetnts.
19191         (Property.Define): Call the new Property.DoDefine(), this does some
19192         sanity checks and we don't need to duplicate the code everywhere.
19193         (Event): Derive from MemberBase, not MemberCore.
19194         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
19195         accessors, this will also make them work with interface events.
19196         (Indexer): Derive from MemberBase, not MemberCore.
19197         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
19198         (Indexer.Define): Use the new MethodBase functions.
19199
19200         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
19201         argument to the constructor.
19202         (Interface.FindMembers): Added support for interface events.
19203         (Interface.PopluateEvent): Implemented.
19204
19205         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
19206
19207 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
19208
19209         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
19210         but this is required to check for a method name being the same as
19211         the containing class.  
19212
19213         Handle this now.
19214
19215 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19216
19217         * interface.cs: initialize variable.
19218
19219 2002-07-23  Martin Baulig  <martin@gnome.org>
19220
19221         Implemented the IndexerName attribute in interfaces.
19222
19223         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
19224         name if this is an explicit interface implementation.
19225         (Indexer.InterfaceIndexerName): New public variable.  If we're
19226         implementing an interface indexer, this is the IndexerName in that
19227         interface.  Otherwise, it's the IndexerName.
19228         (Indexer.DefineMethod): If we're implementing interface indexer,
19229         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
19230         and Pending.ImplementIndexer methods.
19231         (Indexer.Define): Also define the PropertyBuilder if we're
19232         implementing an interface indexer and this is neither an explicit
19233         interface implementation nor do the IndexerName match the one in
19234         the interface.
19235
19236         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
19237         If a method is defined here, then we always need to create a proxy
19238         for it.  This is used when implementing interface indexers.
19239         (Pending.IsInterfaceIndexer): New public method.
19240         (Pending.ImplementIndexer): New public method.
19241         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
19242         This is used when implementing interface indexers to define a proxy
19243         if necessary.
19244         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
19245         define a proxy if necessary.
19246
19247         * interface.cs (Interface.IndexerName): New public variable.
19248         (Interface.PopulateIndexer): Set the IndexerName.
19249         (Interface.DefineIndexers): New private method.  Populate all the
19250         indexers and make sure their IndexerNames match.
19251
19252         * typemanager.cs (IndexerPropertyName): Added support for interface
19253         indexers.
19254
19255 2002-07-22  Martin Baulig  <martin@gnome.org>
19256
19257         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
19258         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
19259         ret if HasReturnLabel.
19260         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
19261         variables.
19262
19263         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
19264         and set the ec.LoopBeginTryCatchLevel.
19265         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
19266         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
19267         the current ec.TryCatchLevel, the branch goes out of an exception
19268         block.  In this case, we need to use Leave and not Br.
19269
19270 2002-07-22  Martin Baulig  <martin@gnome.org>
19271
19272         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
19273         block unless the block does not always return or it is contained in
19274         another try { ... } catch { ... } block.  Fixes bug #26506.
19275         Added verify-1.cs to the test suite.
19276
19277 2002-07-22  Martin Baulig  <martin@gnome.org>
19278
19279         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
19280         then we do not always return.  Fixes bug #24985.
19281
19282 2002-07-22  Martin Baulig  <martin@gnome.org>
19283
19284         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
19285         lookup on a per-class level; ie. walk up the class hierarchy until we
19286         found at least one applicable method, then choose the best among them.
19287         Fixes bug #24463 and test-29.cs.
19288
19289 2002-07-22  Martin Baulig  <martin@gnome.org>
19290
19291         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
19292         return types of the methods.  The return type is not part of the
19293         signature and we must not check it to make the `new' modifier work.
19294         Fixes bug #27999, also added test-147.cs.
19295         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
19296
19297         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
19298         on the method's return type.
19299
19300 2002-07-21  Martin Baulig  <martin@gnome.org>
19301
19302         * assign.cs: Make this work if the rightmost source is a constant and
19303         we need to do an implicit type conversion.  Also adding a few more tests
19304         to test-38.cs which should have caught this.
19305
19306         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
19307         target in the makefile for this.  The makefile.gnu is primarily intended
19308         for end-users who don't want to debug the compiler.
19309
19310 2002-07-21  Martin Baulig  <martin@gnome.org>
19311
19312         * assign.cs: Improved the Assign class so it can now handle embedded
19313         assignments (X = Y = Z = something).  As a side-effect this'll now also
19314         consume less local variables.  test-38.cs now passes with MCS, added
19315         a few new test cases to that test.
19316
19317 2002-07-20  Martin Baulig  <martin@gnome.org>
19318
19319         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
19320         instructions.  Fixes bug #27977, also added test-146.cs.
19321
19322 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19323
19324         * cs-tokenizer.cs: fixed getHex ().
19325
19326 2002-07-19  Martin Baulig  <martin@gnome.org>
19327
19328         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
19329         not Type.GetType() to lookup the array type.  This is needed when
19330         we're constructing an array of a user-defined type.
19331         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
19332         single-dimensional arrays, but also for single-dimensial arrays of
19333         type decimal.
19334
19335 2002-07-19  Martin Baulig  <martin@gnome.org>
19336
19337         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
19338         this function is called, it's not allowed to share LocalBuilders
19339         among ILGenerators.
19340
19341 2002-07-19  Martin Baulig  <martin@gnome.org>
19342
19343         * expression.cs (Argument.Resolve): Report an error 118 when trying
19344         to pass a type as argument.
19345
19346 2002-07-18  Martin Baulig  <martin@gnome.org>
19347
19348         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
19349         Conv_R_Un for the signed `long' type.
19350
19351 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
19352
19353         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
19354         `expr' for the temporary result, as that will fail if we do
19355         multiple resolves on the same expression.
19356
19357 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
19358
19359         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
19360         ec.TypeContainer for looking up aliases. 
19361
19362         * class.cs (TypeContainer): Remove LookupAlias from here.
19363
19364         * decl.cs (DeclSpace); Move here.
19365
19366 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
19367
19368         * class.cs (FindMembers): Only call filter if the constructor
19369         bulider is not null.
19370
19371         Also handle delegates in `NestedTypes' now.  Now we will perform
19372         type lookups using the standard resolution process.  This also
19373         fixes a bug.
19374
19375         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
19376         This uses Expressions (the limited kind that can be parsed by the
19377         tree) instead of strings.
19378
19379         * expression.cs (ComposedCast.ToString): Implement, used to flag
19380         errors since now we have to render expressions.
19381
19382         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
19383         FormArrayType. 
19384
19385         * ecore.cs (SimpleName.ToString): ditto.
19386
19387         * cs-parser.jay: Instead of using strings to assemble types, use
19388         Expressions to assemble the type (using SimpleName, ComposedCast,
19389         MemberAccess).  This should fix the type lookups in declarations,
19390         because we were using a different code path for this.
19391
19392         * statement.cs (Block.Resolve): Continue processing statements
19393         even when there is an error.
19394
19395 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
19396
19397         * class.cs (Event.Define): Also remove the `remove' method from
19398         the list of pending items.
19399
19400         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
19401         generate more compact code. 
19402
19403 2002-07-17  Martin Baulig  <martin@gnome.org>
19404
19405         * const.cs (Const.LookupConstantValue): Add support for constant
19406         `unchecked' and `checked' expressions.
19407         Also adding test case test-140.cs for this.
19408
19409 2002-07-17  Martin Baulig  <martin@gnome.org>
19410
19411         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
19412         check whether mi.ReturnType implements the IEnumerator interface; the
19413         `==' and the IsAssignableFrom() will fail in this situation.
19414
19415 2002-07-16  Ravi Pratap  <ravi@ximian.com>
19416
19417         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
19418         here too.
19419
19420 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19421
19422         * expression.cs: fixed bug #27811.
19423
19424 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
19425
19426         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
19427         Molaro: when we are a ref, the value already contains a pointer
19428         value, do not take the address of it.
19429
19430 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
19431         * removed mb-parser.jay and mb-tokenizer.cs
19432
19433 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
19434
19435         * expression.cs: check against the building corlib void type.
19436
19437 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
19438
19439         * ecore.cs: fix for valuetype static readonly fields: when 
19440         initializing them, we need their address, not the address of a copy.
19441
19442 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
19443
19444         * typemanager.cs: register also enum_type in corlib.
19445
19446 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
19447
19448         * class.cs: allow calling this (but not base) initializers in structs.
19449
19450 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
19451
19452         * ecore.cs: make sure we compare against the building base types
19453         in GetTypeSize ().
19454
19455 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
19456
19457         * typemanager.cs: fix TypeToCoreType() to handle void and object
19458         (corlib gets no more typerefs after this change).
19459
19460 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
19461
19462         * expression.cs (ArrayCreation.EmitArrayArguments): use
19463         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
19464
19465         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
19466         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
19467         array indexes, the runtime actually forbids them.
19468
19469         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
19470         for array arguments here.
19471
19472         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
19473         instead of the default for ValueTypes.
19474
19475         (New.DoEmit): Use IsValueType instead of
19476         IsSubclassOf (value_type)
19477         (New.DoResolve): ditto.
19478         (Invocation.EmitCall): ditto.
19479
19480         * assign.cs (Assign): ditto.
19481
19482         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
19483         Statements *are* currently doing part of their resolution during
19484         Emit.  
19485
19486         Expressions do always resolve during resolve, but statements are
19487         only required to propagate resolution to their children.
19488
19489 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
19490
19491         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
19492
19493         (LoadAssembly): Do not add the dll if it is already specified
19494
19495         (MainDriver): Add the System directory to the link path at the end,
19496         after all the other -L arguments. 
19497
19498         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
19499         wrong opcode for loading bytes and bools (ldelem.i1 instead of
19500         ldelem.u1) and using the opposite for sbytes.
19501
19502         This fixes Digger, and we can finally run it.
19503
19504         * driver.cs (UnixParseOption): Move the option parsing here.  
19505         (CSCParseOption): Implement CSC-like parsing of options.
19506
19507         We now support both modes of operation, the old Unix way, and the
19508         new CSC-like way.  This should help those who wanted to make cross
19509         platform makefiles.
19510
19511         The only thing broken is that /r:, /reference: and /lib: are not
19512         implemented, because I want to make those have the same semantics
19513         as the CSC compiler has, and kill once and for all the confussion
19514         around this.   Will be doing this tomorrow.
19515
19516         * statement.cs (Unsafe.Resolve): The state is checked during
19517         resolve, not emit, so we have to set the flags for IsUnsfe here.
19518
19519 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
19520
19521         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
19522         not catch the Error_ObjectRefRequired in SimpleName (as it is
19523         possible to have a class/instance variable name that later gets
19524         deambiguated), we have to check this here.      
19525
19526 2002-07-10  Ravi Pratap  <ravi@ximian.com>
19527
19528         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
19529         make static and put into Expression.
19530
19531         (Event.Define): Register the private field of the event with the 
19532         TypeManager so that GetFieldFromEvent can get at it.
19533
19534         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
19535         keep track of the private field associated with an event which
19536         has no accessors.
19537
19538         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
19539         private field.
19540
19541         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
19542
19543 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
19544
19545         * expression.cs (Binary.EmitBranchable): this routine emits the
19546         Binary expression in a branchable context.  This basically means:
19547         we need to branch somewhere, not just get the value on the stack.
19548
19549         This works together with Statement.EmitBoolExpression.
19550
19551         * statement.cs (Statement.EmitBoolExpression): Use
19552         EmitBranchable. 
19553
19554 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
19555
19556         * statement.cs (For): Reduce the number of jumps in loops.
19557
19558         (For): Implement loop inversion for the For statement.
19559
19560         (Break): We can be breaking out of a Try/Catch controlled section
19561         (foreach might have an implicit try/catch clause), so we need to
19562         use Leave instead of Br.
19563
19564         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
19565         now).  If the instace expression supports IMemoryLocation, we use
19566         the AddressOf method from the IMemoryLocation to extract the
19567         address instead of emitting the instance.
19568
19569         This showed up with `This', as we were emitting the instance
19570         always (Emit) instead of the Address of This.  Particularly
19571         interesting when This is a value type, as we dont want the Emit
19572         effect (which was to load the object).
19573
19574 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
19575
19576         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
19577
19578         * statement.cs (Checked): Set the CheckedState during the resolve
19579         process too, as the ConvCast operations track the checked state on
19580         the resolve process, and not emit.
19581
19582         * cs-parser.jay (namespace_member_declaration): Flag that we have
19583         found a declaration when we do.  This is used to flag error 1529
19584
19585         * driver.cs: Report ok when we display the help only.
19586
19587 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
19588
19589         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
19590
19591 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
19592
19593         * cs-tokenizer.cs (define): We also have to track locally the
19594         defines.  AllDefines is just used for the Conditional Attribute,
19595         but we also need the local defines for the current source code. 
19596
19597 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
19598
19599         * statement.cs (While, For, Do): These loops can exit through a
19600         Break statement, use this information to tell whether the
19601         statement is the last piece of code.
19602
19603         (Break): Flag that we break.
19604
19605         * codegen.cs (EmitContexts): New `Breaks' state variable.
19606
19607 2002-07-03  Martin Baulig  <martin@gnome.org>
19608
19609         * class.cs (TypeContainer.MethodModifiersValid): Allow override
19610         modifiers in method declarations in structs.  Otherwise, you won't
19611         be able to override things like Object.Equals().
19612
19613 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
19614
19615         * class.cs (Method, Property, Indexer): Do not allow the public
19616         modifier to be used in explicit interface implementations.
19617
19618         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
19619         override modifiers in method declarations in structs
19620
19621 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
19622
19623         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
19624         integer or real overflow, report an error
19625
19626 2002-07-02  Martin Baulig  <martin@gnome.org>
19627
19628         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
19629         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
19630         to tell the runtime about our newly created System.Object and
19631         System.ValueType types.
19632
19633 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
19634
19635         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
19636         struct instead of Ldarg/Starg.
19637
19638 2002-07-02  Martin Baulig  <martin@gnome.org>
19639
19640         * expression.cs (Indirection.Indirection): Call
19641         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
19642
19643 2002-07-02  Martin Baulig  <martin@gnome.org>
19644
19645         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
19646         ValueType, call TypeManager.TypeToCoreType() on it.
19647         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
19648         the OpCodes.Newarr argument.
19649
19650 2002-07-02  Martin Baulig  <martin@gnome.org>
19651
19652         * expression.cs (Invocation.EmitCall): When compiling corlib,
19653         replace all calls to the system's System.Array type to calls to
19654         the newly created one.
19655
19656         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
19657         System.Array methods.
19658         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
19659         from the system's System.Array type which must be replaced.
19660
19661 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
19662
19663         * typemanager.cs: load unverifiable_code_ctor so we can build
19664         corlib using the correct type. Avoid using GetTypeCode() with
19665         TypeBuilders.
19666         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
19667         TypeManager.object_type to allow building corlib.
19668
19669 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
19670
19671         * ecore.cs: handle System.Enum separately in LoadFromPtr().
19672
19673 2002-07-01  Martin Baulig  <martin@gnome.org>
19674
19675         * class.cs: Make the last change actually work, we need to check
19676         whether `ifaces != null' to avoid a crash.
19677
19678 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
19679
19680         * class.cs: when we build structs without fields that implement
19681         interfaces, we need to add the interfaces separately, since there is
19682         no API to both set the size and add the interfaces at type creation
19683         time.
19684
19685 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
19686
19687         * expression.cs: the dimension arguments to the array constructors
19688         need to be converted if they are a long.
19689
19690 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
19691
19692         * class.cs: don't emit ldarg.0 if there is no parent constructor
19693         (fixes showstopper for corlib).
19694
19695 2002-06-29  Martin Baulig  <martin@gnome.org>
19696
19697         MCS now compiles corlib on GNU/Linux :-)
19698
19699         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
19700         ie. check for MethodImplOptions.InternalCall.
19701
19702         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
19703         and TypeManager.attribute_type are null, so we must explicitly check
19704         whether parent is not null to find out whether it's an attribute type.
19705         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
19706         and SetBuilder, not only if the property is neither abstract nor external.
19707         This is necessary to set the MethodImplOptions on the accessor methods.
19708         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
19709         SetBuilder, see Property.Emit().
19710
19711         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
19712         populate "System.Object", "System.ValueType" and "System.Attribute" since
19713         they've already been populated from BootCorlib_PopulateCoreTypes().
19714
19715 2002-06-29  Martin Baulig  <martin@gnome.org>
19716
19717         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
19718         is the NullLiteral, we also need to make sure that target_type is not
19719         an enum type.   
19720
19721 2002-06-29  Martin Baulig  <martin@gnome.org>
19722
19723         * rootcontext.cs (RootContext.ResolveCore): We must initialize
19724         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
19725         before calling BootstrapCorlib_ResolveDelegate ().
19726
19727 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19728
19729         * statement.cs: fixed build-breaker. All tests passed ok.
19730
19731 2002-06-27  Martin Baulig  <martin@gnome.org>
19732
19733         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
19734         for System.Decimal when compiling corlib.
19735
19736 2002-06-27  Martin Baulig  <martin@gnome.org>
19737
19738         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
19739         switch blocks which contain nothing but a default clause.
19740
19741 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
19742
19743        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
19744
19745 2002-06-27  Martin Baulig  <martin@gnome.org>
19746
19747         * ecore.cs (PropertyExpr.PropertyExpr): Call
19748         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
19749
19750         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
19751         is already a TypeBuilder.
19752
19753 2002-06-27  Martin Baulig  <martin@gnome.org>
19754
19755         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
19756         `target_type == TypeManager.array_type', not IsAssignableFrom() in
19757         the "from an array-type to System.Array" case.  This makes it work
19758         when compiling corlib.
19759
19760 2002-06-27  Martin Baulig  <martin@gnome.org>
19761
19762         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
19763         non-static PropertyExpr, set its InstanceExpression.  This makes
19764         the `ICollection.Count' property work in System/Array.cs.
19765
19766 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
19767
19768         * driver.cs: Made error handling more consistent.  Errors now
19769         tracked by Report class, so many methods which used to return int
19770         now return void.  Main() now prints success/failure and 
19771         errors/warnings message.
19772
19773         Renamed '--probe' compiler argument to '--expect-error'.  Removed
19774         the magic number return values (123 and 124).  Now, if the
19775         expected error occurs, the compiler exits with success (exit value
19776         0).  If the compilation completes without seeing that particular
19777         error, the compiler exits with failure (exit value 1).  The
19778         makefile in mcs/errors has been changed to handle the new behaviour.
19779
19780         * report.cs: Made 'expected error' number a property and renamed
19781         it from 'Probe' to 'ExpectedError'.
19782
19783         * genericparser.cs: Removed error handling support, since it is
19784         now all done by Report class.
19785
19786         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
19787         class, so parse() no longer returns an int.
19788
19789         * namespace.cs: Use Report.Error instead of GenericParser.error
19790
19791 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
19792
19793         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
19794         TypeContainer.AddOperator): At the front of the list put the
19795         explicit implementations, so they get resolved/defined first. 
19796
19797 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
19798
19799         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
19800         interface type is implemented by this TypeContainer.  Used during
19801         explicit interface implementation.
19802
19803         (Property.Define, Indexer.Define, Method.Define): Validate that
19804         the given interface in the explicit implementation is one of the
19805         base classes for the containing type.
19806
19807         Also if we are explicitly implementing an interface, but there is
19808         no match in the pending implementation table, report an error.
19809
19810         (Property.Define): Only define the property if we are
19811         not explicitly implementing a property from an interface.  Use the
19812         correct name also for those properties (the same CSC uses,
19813         although that is really not needed).
19814
19815         (Property.Emit): Do not emit attributes for explicitly implemented
19816         properties, as there is no TypeBuilder.
19817
19818         (Indexer.Emit): ditto.
19819
19820         Hiding then means that we do not really *implement* a pending
19821         implementation, which makes code fail.
19822
19823 2002-06-22  Martin Baulig  <martin@gnome.org>
19824
19825         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
19826         the return value of Object.GetType().  [FIXME: we need to do this whenever
19827         we get a type back from the reflection library].
19828
19829 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
19830
19831         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
19832
19833 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
19834
19835         * attribute.cs: Return null if we can not look up the type.
19836
19837         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
19838         the interface types found.
19839
19840         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
19841         interface types found.
19842
19843         * typemanager.cs (GetInterfaces): Make this routine returns alll
19844         the interfaces and work around the lame differences between
19845         System.Type and System.Reflection.Emit.TypeBuilder in the results
19846         result for GetInterfaces.
19847
19848         (ExpandInterfaces): Given an array of interface types, expand and
19849         eliminate repeated ocurrences of an interface.  This expands in
19850         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
19851         be IA, IB, IC.
19852
19853 2002-06-21  Martin Baulig  <martin@gnome.org>
19854
19855         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
19856         on System.Enum.
19857
19858 2002-06-21  Martin Baulig  <martin@gnome.org>
19859
19860         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
19861         and called with one of the core types, return the corresponding typebuilder for
19862         that type.
19863
19864         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
19865         element type.
19866
19867 2002-06-21  Martin Baulig  <martin@gnome.org>
19868
19869         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
19870         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
19871         (Expression.ConvertReferenceExplicit): Likewise.
19872
19873         * expression.cs (ElementAccess.DoResolve): Likewise.
19874         (ElementAccess.DoResolveLValue): Likewise.
19875
19876 2002-06-10  Martin Baulig  <martin@gnome.org>
19877
19878         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
19879         add the "value" parameter to the parameter list.
19880
19881         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
19882         to our caller.
19883
19884 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
19885
19886         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
19887         the argument to an int, uint, long or ulong, per the spec.  Also
19888         catch negative constants in array creation.
19889
19890 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
19891
19892         * class.cs: do not allow the same interface to appear twice in
19893         the definition list.
19894
19895 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
19896
19897         * ecore.cs: don't use ldlen with System.Array.
19898
19899 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
19900
19901         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
19902
19903 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
19904
19905         * modifiers.cs: produce correct field attributes for protected
19906         internal. Easy fix so miguel can work on ther harder stuff:-)
19907
19908 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
19909
19910         * pending.cs: New file.  Move the code from class.cs here.
19911         Support clearning the pending flag for all methods (when not doing
19912         explicit interface implementation).
19913
19914 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
19915
19916         * rootcontext.cs: added a couple more types needed to bootstrap.
19917
19918 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
19919
19920         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
19921         constructor in the type, instead of any constructor in the type
19922         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
19923         a bug in the Mono runtime when applying the params attribute). 
19924
19925 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
19926         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
19927
19928 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
19929
19930         * expression.cs (Unary.ResolveOperator): Use TypeManager
19931         to resolve the type.
19932
19933 2002-06-13  Ravi Pratap  <ravi@ximian.com>
19934
19935         * cs-parser.jay (enum_member_declaration): Pass in the attributes
19936         attached.
19937
19938         * enum.cs (AddEnumMember): Add support to store the attributes associated 
19939         with each member too.
19940
19941         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
19942         field builders too - this takes care of the enum member case.
19943
19944 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
19945
19946         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
19947         address-of operator on both value types and pointers.
19948
19949 2002-06-10  Martin Baulig  <martin@gnome.org>
19950
19951         * interface.cs (Interface.PopulateIndexer): Add the indexer's
19952         PropertyBuilder to the `property_builders' list.
19953
19954         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
19955         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
19956         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
19957         find any indexers which are inherited from an interface.
19958
19959 2002-06-09  Martin Baulig  <martin@gnome.org>
19960
19961         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
19962         the same type as the constant if necessary.  There's also a test-130.cs
19963         for this.
19964
19965         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
19966
19967         * typemanager.cs (TypeManager.ChangeType): Previously known as
19968         Enum.ChangeEnumType().
19969
19970 2002-06-09  Martin Baulig  <martin@gnome.org>
19971
19972         * expression.cs (Cast.TryReduce): Added support for consts.
19973
19974 2002-06-08  Ravi Pratap  <ravi@ximian.com>
19975
19976         * class.cs (Accessor): Hold attributes information so we can pass
19977         it along.
19978
19979         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
19980         Modify to pass in attributes attached to the methods.
19981
19982         (add_accessor_declaration, remove_accessor_declaration): Ditto.
19983
19984         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
19985         to handle the Accessor kind :-)
19986
19987         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
19988
19989 2002-06-08  Martin Baulig  <martin@gnome.org>
19990
19991         * expression.cs (Unary.TryReduceNegative): Added support for
19992         ULongConstants.
19993
19994 2002-06-08  Martin Baulig  <martin@gnome.org>
19995
19996         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
19997         name can't be found in the `defined_names' - the caller will do a
19998         MemberLookup in this case and thus find methods in System.Enum
19999         such as Enum.IsDefined().
20000
20001 2002-06-08  Martin Baulig  <martin@gnome.org>
20002
20003         * enum.cs (Enum.ChangeEnumType): This is a custom version of
20004         Convert.ChangeType() which works with TypeBuilder created types.
20005         (Enum.LookupEnumValue, Enum.Define): Use it here.
20006
20007         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
20008         `TypeBuilder.BaseType != null' check.
20009         (TypeContainer.FindMembers): Only lookup parent members if we
20010         actually have a parent.
20011         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
20012         (ConstructorInitializer.Resolve): Likewise.
20013
20014         * interface.cs (Interface.FindMembers): Added
20015         `TypeBuilder.BaseType != null' check.
20016
20017         * rootcontext.cs (RootContext.ResolveCore): Added
20018         "System.Runtime.CompilerServices.IndexerNameAttribute" to
20019         classes_second_stage.
20020
20021         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
20022         debug_type and trace_type when compiling with --nostdlib.       
20023
20024 2002-06-07  Martin Baulig  <martin@gnome.org>
20025
20026         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
20027         (AddField): Set it to true when adding a non-static field.
20028         (DefineType): Use `have_nonstatic_fields' to find out whether we
20029         have non-static fields, not `Fields != null'.
20030
20031 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
20032
20033         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
20034         dereferencing a null on the static-field code path)
20035
20036 2002-05-30  Martin Baulig  <martin@gnome.org>
20037
20038         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
20039         to take command line arguments.  Use reflection to call the new
20040         custom `Initialize' function on the symbol writer and pass it the
20041         command line arguments.
20042
20043         * driver.cs (--debug-args): New command line argument to pass command
20044         line arguments to the symbol writer.
20045
20046 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
20047
20048         * assign.cs (DoResolve): Forgot to do the implicit conversion to
20049         the target type for indexers and properties.  Thanks to Joe for
20050         catching this.
20051
20052 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
20053
20054         * typemanager.cs (MethodFlags): returns the method flags
20055         (Obsolete/ShouldIgnore) that control warning emission and whether
20056         the invocation should be made, or ignored. 
20057
20058         * expression.cs (Invocation.Emit): Remove previous hack, we should
20059         not do this on matching a base type, we should do this based on an attribute
20060
20061         Only emit calls to System.Diagnostics.Debug and
20062         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
20063         on the command line.
20064
20065         * rootcontext.cs: Global settings for tracing and debugging.
20066
20067         * cs-tokenizer.cs (define): New utility function to track
20068         defines.   Set the global settings for TRACE and DEBUG if found.
20069
20070 2002-05-25  Ravi Pratap  <ravi@ximian.com>
20071
20072         * interface.cs (Populate*): Pass in the TypeContainer as well as
20073         the DeclSpace as parameters so that we can create EmitContexts and
20074         then use that to apply attributes etc.
20075
20076         (PopulateMethod, PopulateEvent, PopulateProperty)
20077         (PopulateIndexer): Apply attributes everywhere.
20078
20079         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
20080         etc.
20081
20082         (ApplyAttributes): Update accordingly.
20083
20084         We now apply interface attributes for all members too.
20085
20086 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
20087
20088         * class.cs (Indexer.Define); Correctly check if we are explicit
20089         implementation (instead of checking the Name for a ".", we
20090         directly look up if the InterfaceType was specified).
20091
20092         Delay the creation of the PropertyBuilder.
20093
20094         Only create the PropertyBuilder if we are not an explicit
20095         interface implementation.   This means that explicit interface
20096         implementation members do not participate in regular function
20097         lookups, and hence fixes another major ambiguity problem in
20098         overload resolution (that was the visible effect).
20099
20100         (DefineMethod): Return whether we are doing an interface
20101         implementation. 
20102
20103         * typemanager.cs: Temporary hack until we get attributes in
20104         interfaces (Ravi is working on that) and we get IndexerName
20105         support in interfaces.
20106
20107         * interface.cs: Register the indexers as properties.
20108
20109         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
20110         warning, I have verified that this is a bug in the .NET runtime
20111         (JavaScript suffers of the same problem).
20112
20113         * typemanager.cs (MemberLookup): When looking up members for
20114         interfaces, the parent of an interface is the implicit
20115         System.Object (so we succeed in searches of Object methods in an
20116         interface method invocation.  Example:  IEnumerable x;  x.ToString
20117         ()) 
20118
20119 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
20120
20121         * class.cs (Event): Events should also register if they do
20122         implement the methods that an interface requires.
20123
20124         * typemanager.cs (MemberLookup); use the new GetInterfaces
20125         method. 
20126
20127         (GetInterfaces): The code used to lookup interfaces for a type is
20128         used in more than one place, factor it here. 
20129
20130         * driver.cs: Track the errors at the bottom of the file, we kept
20131         on going.
20132
20133         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
20134         instance if the method we are calling is static!
20135
20136 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
20137
20138         * attribute.cs (ApplyAttributes): Make this function filter out
20139         the IndexerName attribute (as that attribute in reality is never
20140         applied) and return the string constant for the IndexerName
20141         attribute. 
20142
20143         * class.cs (TypeContainer.Emit): Validate that all the indexers
20144         have the same IndexerName attribute, and if so, set the
20145         DefaultName attribute on the class. 
20146
20147         * typemanager.cs: The return value might contain other stuff (not
20148         only methods).  For instance, consider a method with an "Item"
20149         property and an Item method.
20150
20151         * class.cs: If there is a problem with the parameter types,
20152         return. 
20153
20154 2002-05-24  Ravi Pratap  <ravi@ximian.com>
20155
20156         * ecore.cs (ImplicitConversionExists): Wrapper function which also
20157         looks at user defined conversion after making a call to 
20158         StandardConversionExists - we need this for overload resolution.
20159
20160         * expression.cs : Update accordingly the various method calls.
20161
20162         This fixes 2 bugs filed against implicit user defined conversions 
20163
20164 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
20165
20166         * statement.cs: Track the result of the assignment.
20167
20168 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
20169
20170         * expression.cs (MemberAccess): Improved error reporting for
20171         inaccessible members.
20172
20173 2002-05-22  Martin Baulig  <martin@gnome.org>
20174
20175         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
20176         itself with debugging support.
20177
20178 2002-05-22  Martin Baulig  <martin@gnome.org>
20179
20180         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
20181         Removed, this isn't needed anymore.
20182
20183 2002-05-20  Martin Baulig  <martin@gnome.org>
20184
20185         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
20186         be underlying type for an enum.
20187
20188 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
20189
20190         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
20191         that splits out the loading of just the core types.
20192
20193         * rootcontext.cs (ResolveCore): Split the struct resolution in
20194         two, so we can load the enumeration underlying types before any
20195         enums are used.
20196
20197         * expression.cs (Is): Bandaid until we fix properly Switch (see
20198         bug #24985 for details).
20199
20200         * typemanager.cs (ImplementsInterface): The hashtable will contain
20201         a null if there are no interfaces implemented.
20202
20203 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
20204
20205         * cs-parser.jay (indexer_declarator): It is fine to have array
20206         parameters
20207
20208 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
20209
20210         * typemanager.cs: (RegisterBuilder): New function used to register
20211         TypeBuilders that implement interfaces.  Since
20212         TypeBuilder.GetInterfaces (as usual) does not work with lame
20213         Reflection.Emit. 
20214         (AddUserType): register interfaces.
20215
20216         (ImplementsInterface): Use the builder_to_ifaces hash if we are
20217         dealing with TypeBuilder.  Also, arrays are showing up as
20218         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
20219         methods can not be invoked on them!
20220
20221         * ecore.cs (ExplicitReferenceConversionExists): Made public.
20222         (ImplicitReferenceConversionExists): Split out from
20223         StandardConversionExists. 
20224
20225         * expression.cs (As): We were only implementing one of the three
20226         cases for the as operator.  We now implement them all.
20227         (Is): Implement the various other cases for Is as well.
20228
20229         * typemanager.cs (CACHE): New define used to control if we want or
20230         not the FindMembers cache.  Seems to have a negative impact on
20231         performance currently
20232
20233         (MemberLookup): Nested types have full acess to
20234         enclosing type members
20235
20236         Remove code that coped with instance/static returns for events, we
20237         now catch this in RealFindMembers.
20238
20239         (RealFindMembers): only perform static lookup if the instance
20240         lookup did not return a type or an event.  
20241
20242 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
20243
20244         * assign.cs (CompoundAssign): We pass more semantic information
20245         now to Compound Assignments than we did before: now we have all
20246         the information at hand, and now we resolve the target *before* we
20247         do the expression expansion, which allows the "CacheValue" method
20248         to have the effect we intended (before, a [x] += 1 would generate
20249         two differen ArrayAccess expressions from the ElementAccess,
20250         during the resolution process).
20251
20252         (CompoundAssign.DoResolve): Resolve target and original_source here.
20253
20254 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
20255
20256         * expression.cs (ArrayAccess): dropped debugging information. 
20257
20258         * typemanager.cs: Small bug fix: I was always returning i_members,
20259         instead of one of i_members or s_members (depending on which had
20260         the content).
20261
20262         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
20263         method is invoked before any code generation takes place, and it
20264         is a mechanism to inform that the expression will be invoked more
20265         than once, and that the method should use temporary values to
20266         avoid having side effects
20267
20268         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
20269
20270         * ecore.cs (Expression.CacheTemporaries): Provide empty default
20271         implementation.
20272
20273         * expression.cs (Indirection, ArrayAccess): Add support for
20274         CacheTemporaries in these two bad boys. 
20275
20276         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
20277         ldobj or ldind_ref.  
20278         (StoreFromPtr): Handle stobj as well.
20279
20280         * expression.cs (UnaryMutator): Share more code.
20281
20282         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
20283         down: I was not tracking the Filter function as well, which
20284         was affecting the results of the cache.
20285
20286 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
20287
20288         * attribute.cs: Remove the hack to handle the CharSet property on
20289         StructLayouts. 
20290
20291 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
20292
20293         * attribute.cs (DoResolve): More uglyness, we now only try to
20294         resolve the attribute partially, to extract the CharSet
20295         information (only if we are a StructLayout attribute).  Otherwise 
20296
20297         (GetExtraTypeInfo): Add some code to conditionally kill in the
20298         future this.   I am more and more convinced that the .NET
20299         framework has special code to handle the attribute setting on
20300         certain elements.
20301
20302         * expression.cs (IsParamsMethodApplicable): Revert my previous
20303         foreach change here, it was wrong.
20304
20305 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
20306
20307         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
20308         (pp_expr): do not abort on unknown input, just return.
20309         (eval): abort if there are pending chars.
20310
20311         * attribute.cs (Attribute.Resolve): Positional parameters are
20312         optional.  Deal with that case.
20313
20314         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
20315         the Ansi/Unicode/Auto information for the type.
20316
20317         (TypeContainer.DefineType): instantiate the EmitContext here, as
20318         we will be using it during the type definition (to resolve
20319         attributes) and during the emit phase.
20320
20321         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
20322         to pull type information out of the attributes
20323
20324         (Attribute.Resolve): track the constructor builder, and allow for
20325         multiple invocations (structs and classes will use this).
20326
20327         * ecore.cs (MemberLookupFinal): new version with all the
20328         parameters customizable.
20329
20330         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
20331         constructors.  Return if the result value is null (as the error
20332         would have been flagged already by MemberLookupFinal)
20333
20334         Do not allow instances of abstract classes or interfaces to be
20335         created.
20336
20337         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
20338         We have to compare the assembly property here when dealing with
20339         FamANDAssem and Assembly access modifiers, because we might be
20340         creating an assembly from *modules* (that means that we are not
20341         getting TypeBuilders for types defined in other modules that are
20342         part of this assembly).
20343
20344         (Method.Emit): If the method is marked abstract and has a body,
20345         emit an error. 
20346
20347         (TypeContainer.DefineMembers): If both the defined member and the
20348         parent name match are methods, then do not emit any warnings: let
20349         the Method.Define routine take care of flagging warnings.  But if
20350         there is a mismatch (method overrides something else, or method is
20351         overriwritten by something, then emit warning).
20352
20353         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
20354         set to null, this means `do not check for the return type on the
20355         signature'. 
20356
20357         (Method.Define): set the return type for the method signature to
20358         null, so that we get methods with the same name and parameters and
20359         different return types.  This is used to flag warning 114 (you are
20360         hiding a method, and you probably want to use the new/override
20361         keywords instead).
20362
20363         * typemanager.cs (MemberLookup): Implemented proper access
20364         control, closing a long standing set of bug reports.  The problem
20365         was that the Framework only has two bits: Public and NonPublic,
20366         and NonPublic includes private and protected methods, but we need
20367         to enforce the FamANDAssem, FamOrAssem and Family. 
20368
20369 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
20370
20371         * statement.cs (GotoCase): Return true: Ammounts to giving up
20372         knowledge on whether we return or not, and letting the other case
20373         be responsible for it.
20374
20375 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
20376
20377         * driver.cs: Do not load directories for each file processed, only
20378         do it if there is a pattern.
20379
20380         * ecore.cs: Report readonly assigns here as well, as we might have
20381         been resolved only by MemberAccess.
20382
20383         (SimpleName.SimpleNameResolve): Also be useful for LValue
20384         resolution.   We need this to propagate assign to local readonly variables
20385
20386         * typemanager.cs: Use a ptrhashtable for the criteria, because we
20387         do not want to reuse potential criteria memory.
20388
20389         * class.cs (MyEventBuilder): Set reflected_type;
20390
20391         * ecore.cs (Constantify): Added support for constifying bools.
20392
20393         (RootContext.LookupType): Added a cache for values looked up in
20394         the declaration space.
20395
20396         * typemanager.cs (FindMembers): Now is a front-end to
20397         RealFindMembers, and provides a two-level hashtable-based cache to
20398         the request.  
20399
20400         15% performance improvement: from 22.5 to 19.2 seconds.
20401
20402         * expression.cs (IsParamsMethodApplicable): use foreach.
20403         (Invocation.DoResolve): ditto.
20404         (New.DoResolve): ditto.
20405         (ArrayCreation.DoResolve): ditto.
20406
20407         * ecore.cs (FindMostEncompassingType): use foreach.
20408
20409         * delegate.cs (NewDelegate.DoResolve): Use foreach
20410
20411         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
20412         (RemoveMethods): use foreach.
20413
20414         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
20415         nested foreach statements instead of for, and also break out of
20416         the inner loop once a match is found.
20417
20418         (Invocation.OverloadResolve): Use foreach, simplify the code. 
20419
20420 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
20421
20422         * cfold.cs (BinaryFold): During an enumeration evaluation context,
20423         we actually unwrap the expression to allow for extra information
20424         to be extracted. 
20425
20426         * expression.cs: Use Shr_Un on unsigned operations. 
20427
20428 2002-05-08  Ravi Pratap  <ravi@ximian.com>
20429
20430         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
20431         applicable operators was not being considered correctly. This closes
20432         the bug Miguel reported.
20433
20434 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
20435
20436         * attribute.cs: check that the type derives from System.Attribute
20437         and report the correct error in that case (moved the duplicate code to
20438         its own method, too).
20439
20440 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
20441
20442         * attribute.cs: lookup attribute type name as the spec says: first the
20443         bare attribute name and then name + "Attribute" (nant compiles with
20444         mcs after this fix).
20445
20446 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
20447
20448         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
20449         Because of the way we parse things, we should try to see if a
20450         UIntConstant can fit in an integer.
20451
20452 2002-05-07  Ravi Pratap  <ravi@ximian.com>
20453
20454         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
20455         when we are in an explicit context.
20456
20457         (ConvertReferenceExplicit): When converting from Iface type S to Class
20458         T make sure the rules are implemented as an OR.
20459
20460         * parameter.cs (ParameterType): Make it a property for now although the
20461         purpose really isn't anything immediate.
20462
20463         * expression.cs (Is*Applicable): Do better checking on the parameter type
20464         of a ref/out parameter. The ones from the system assemblies are already 
20465         marked with the correct type so we don't need to do any correction.
20466
20467         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
20468         the object type is standard too so include that.
20469
20470 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20471
20472         * ecore.cs (StandardConversionExists): Augment with missing code:
20473         deal with IntConstant, LongConstants and Enumerations.
20474
20475         * assign.cs: Report the error, instead of failing silently
20476
20477         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
20478         typecontainer that they are declared, because the
20479         typecontainer/namespace will have the list of using clauses that
20480         need to be applied.
20481
20482         Assembly Attributes were escaping the normal registration
20483         mechanism. 
20484
20485         (EmitCode): Apply attributes within an EmitContext that represents
20486         the container they were declared on.
20487
20488         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
20489
20490 2002-05-06  Ravi Pratap  <ravi@ximian.com>
20491
20492         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
20493         Revamp completely - make much cleaner as we now operate only
20494         on a set of Types.
20495
20496         (FindMostSpecificSource, FindMostSpecificTarget): New methods
20497         to implement the logic detailed in the spec more correctly.
20498
20499         (UserDefinedConversion): Update accordingly.
20500
20501 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20502
20503         * statement.cs: Return flow analysis information up.
20504
20505         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
20506         and the default.
20507
20508         (token): Do not consume an extra character before calling
20509         decimal_digits.
20510
20511 2002-05-06  Piers Haken <piersh@friskit.com>
20512
20513         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
20514
20515 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20516
20517         * class.cs (Constructor.Emit): Set the IsStatic flag in the
20518         EmitContext during the instance constructor initializer
20519         resolution, to stop access to instance variables.
20520
20521         This is mandated by the spec, last paragraph of the `constructor
20522         initializers' section. 
20523
20524 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
20525
20526         * cs-parser.jay, class.cs (Accessor): new class used to represent
20527         an accessor (get or set).  In the past we used `null' to represent
20528         a missing accessor.  But this is ambiguous because there was no
20529         way to tell in abstract indexers/properties if one of them was
20530         specified.
20531
20532         Now there is a way of addressing that.
20533
20534         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
20535         instead of FindMembers.
20536
20537         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
20538         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
20539
20540         * attribute.cs: Treat indexers and properties as the same in terms
20541         of applying attributes
20542
20543         * ecore.cs (FindMostEncompassedType): Use statically initialized
20544         EmptyExpressions()s like we do elsewhere to avoid creating useless
20545         objects (and we take this out of the tight loop).
20546
20547         (GetConversionOperators): Move the code to extract the actual
20548         operators to a separate routine to clean things up.
20549
20550 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
20551
20552         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
20553         events are always registered FieldBuilders.
20554
20555         * class.cs (FieldBase): New class shared by Fields 
20556
20557         * delegate.cs: If we are a toplevel delegate, use our full name.
20558         If we are a nested delegate, then only use our tail name.
20559
20560 2002-05-02  Ravi Pratap  <ravi@ximian.com>
20561
20562         * expression.cs (IsApplicable): Ensure that we add the "&" to
20563         ref/out types before comparing it with the type of the argument.
20564
20565         (IsParamsMethodApplicable): Ditto.
20566
20567         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
20568         silly me ;-)
20569
20570         * delegate.cs : Handle the case when we have more than one applicable
20571         method. Flag an error only when we finish checking all.
20572
20573 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
20574
20575         * expression.cs: Add support for boolean static initializers.
20576
20577 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
20578
20579         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
20580
20581         * parameter.cs (ComputeParameterTypes,
20582         ComputeAndDefineParameterTypes): Better error handling: now we
20583         clear the `types' cache if we fail during any of the type lookups.
20584         We also return the status code correctly to our caller
20585
20586         * delegate.cs: If we fail to define a delegate, abort the extra
20587         steps. 
20588
20589         * expression.cs (Binary.ResolveOperator): for
20590         operator==(object,object) and operator !=(object, object) we also
20591         have to verify that there is an implicit conversion from one to
20592         the other.
20593
20594         (ArrayAccess.DoResolve): Array Access can operate on
20595         non-variables. 
20596
20597 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
20598
20599         * assign.cs (CompoundAssign): A new class used as a "flag" that
20600         the assignment actually is happening as part of a compound
20601         assignment operator.
20602
20603         During compound assignment, a few new rules exist to enable things
20604         like:
20605
20606         byte b |= 1 + 2
20607
20608         From the spec:
20609
20610         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
20611         to the type of x) if y is implicitly convertible to the type of x,
20612         and the operator is a builtin operator and the return type of the
20613         operator is explicitly convertible to the type of x. 
20614
20615         * rootcontext.cs: Reset warning level to 2.  4 catches various
20616         "interesting" features in mcs, we must clean this up at some
20617         point, but currently am trying to kill other bugs ;-)
20618
20619         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
20620         in container classes as well.  
20621
20622         * expression.cs (Binary.ResolveOperator): Handle string case
20623         before anything else (as operator overloading does emit an error
20624         before doing anything else).
20625
20626         This code could go away when we move to a table driven model, but
20627         i could not come up with a good plan last night.
20628
20629 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
20630
20631         * typemanager.cs (CSharpName): reimplementation using regex.
20632         * class.cs: added null check for fields in Emit
20633         * rootcontext.cs: set warninglevel to 4
20634
20635 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
20636
20637         * typemanager.cs (CSharpName): reimplemented with Lupus
20638         suggestion.
20639
20640 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
20641
20642         * statement.cs (If): correclty implement Resolve, because we were
20643         not catching sem errors in there.  The same process is needed
20644         everywhere else. 
20645         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
20646
20647
20648         (Statement.Warning_DeadCodeFound): Factorize code.
20649         (While): Report dead code here too.
20650
20651         (Statement): Added Resolve virtual method to allow
20652         for resolution split from the emit code.
20653
20654 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
20655
20656         * statement.cs (EmitBoolExpression): No longer try to resolve the
20657         expression here.    
20658         (MakeBoolean): New utility function that resolve, implicitly
20659         converts to boolean and tags the expression. 
20660
20661
20662         (If, Do): Implement dead code elimination.
20663         (While): Implement loop inversion
20664
20665         (Do, While, For, If): Resolve the expression prior to calling our
20666         code generation.
20667
20668 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
20669
20670         * class.cs:
20671           - added method Report28 (warning: program has more than one entry point)
20672           - added method IsEntryPoint, implements paragraph 10.1 of the spec
20673           - modified method Method.Define, the part at the end of the method
20674
20675         * rootcontext.cs: added static public Location EntryPointLocation;
20676           
20677         * ../errors/cs0028.cs : Add test case for the above warning.              
20678
20679         * typemanager.cs:
20680           - modified method CSharpName to allow arrays of primitive type to
20681             be printed nicely (e.g. instead of System.Int32[][] it now prints
20682             int[][])
20683           - added method CSharpSignature: returns the signature of a method
20684             in string format to be used in reporting errors, warnings, etc.
20685
20686         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
20687         with String.Empty.
20688
20689 2002-04-26  Ravi Pratap  <ravi@ximian.com>
20690
20691         * delegate.cs (Define): Fix extremely silly bug where I was
20692         setting the type of the 'object' parameter of the BeginInvoke
20693         method to System.IAsyncResult instead of System.Object ;-)
20694
20695 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
20696
20697         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
20698         here. 
20699
20700         (Constructor.Emit): return if we fail to initialize the
20701         constructor.  Another door closed!  
20702
20703         * expression.cs (New.DoResolve): Improve error message (from -6 to
20704         1501).  Use DeclaredOnly lookup to find the exact constructor.
20705
20706         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
20707         loop.  This is useful.
20708
20709         * cs-parser.jay: Adjust the default parameters so that destructors
20710         have the proper signature.
20711
20712 2002-04-26  Martin Baulig  <martin@gnome.org>
20713
20714         * driver.cs (LoadAssembly): If `assembly' contains any characters
20715         which are only valid in path names and not in assembly names
20716         (currently slash, backslash and point), use Assembly.LoadFrom ()
20717         instead of Assembly.Load () on the `assembly' (before iteration
20718         over the link_paths).
20719
20720 2002-04-26  Martin Baulig  <martin@gnome.org>
20721
20722         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
20723
20724 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
20725
20726         * class.cs (Property): use the new typemanager.MemberLookup
20727
20728         (TypeContainer.MemberLookup): Implement using the
20729         TypeManager.MemberLookup now. 
20730
20731         * typemanager.cs: Make MemberLookup a function of the TypeManager,
20732         and return MemberInfos, so that these can be used without an
20733         EmitContext (what we had before).
20734
20735 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
20736
20737         * expression.cs: Fix the case where the argument to params if the
20738         type of the params.  I omitted handling this before.   Fixed
20739
20740 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
20741
20742         * driver.cs: Call BootCorlib_PopulateCoreType
20743
20744         * class.cs (Property.CheckBase): Check for properties only, not
20745         for all members. 
20746
20747         * interface.cs: Temporary hack: try/catch around the
20748         CustomAttributeBuilder, because I am getting an exception that I
20749         do not understand.
20750
20751         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
20752         types whose definitions are required to be there (attributes are
20753         defined before standard types).
20754
20755         Compute definitions as we boot the various types, as they are used
20756         immediately (value_type class will need object_type, but if we do
20757         not initialize object_type, we will pass a null, which will let
20758         the runtime pick the System.Object from the existing corlib, which
20759         is not what we want).
20760
20761 2002-04-22  Patrik Torstensson <totte@labs2.com>
20762
20763         * cs-tokenizer.cs: fixed a number of trim() issues.
20764
20765 2002-04-22  Ravi Pratap  <ravi@ximian.com>
20766
20767         * expression.cs (Argument.Type): Ensure that we return the correct
20768         type when we have out or ref parameters [in which case we 
20769         append a "&"].
20770
20771 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
20772
20773         * class.cs (Property, Indexer): Allow extern modifier in there. 
20774
20775         * typemanager.cs (InitBaseTypes): Initializes object_type and
20776         value_type, since those will be used early on during the bootstrap
20777         process to compile corlib.
20778
20779         (InitCoreTypes): Move code from here to InitBaseTypes.
20780
20781 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
20782
20783         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
20784         single-dimension arrays as using the ldlen opcode.  
20785
20786         Daniel Lewis discovered this optimization.  
20787
20788         * typemanager.cs: Add signature for System.Array::get_Length
20789
20790 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20791
20792         * statement.cs: report the error when the foreach does not apply to an
20793         array nor a collection.
20794
20795 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
20796
20797         * expression.cs: Add implicit conversions to the operator ~.
20798
20799         * constant.cs (DecimalConstant.Emit): Emit decimal value.
20800
20801         * typemanager.cs: Locate the decimal constructor.
20802
20803 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20804
20805         * attribute.cs: use the new property of TypeOf.
20806         * expression.cs: added 'get' property around typearg.
20807
20808         These changes fix a build breaker reported by NickD. Is this the
20809         correct way to fix?  If not, please, revert my changes and make it
20810         work :-).
20811
20812 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
20813
20814         * attribute.cs: Add support for typeof in attribute invocations.
20815         I am not sure that this is right though.
20816
20817 2002-04-14  Duncan Mak  <duncan@ximian.com>
20818
20819         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
20820         Binary.Operator.Division case.
20821
20822 2002-04-13  Ravi Pratap  <ravi@ximian.com>
20823
20824         * class.cs (DefineType): Ensure that we do a proper check on
20825         attribute types and also register it with the TypeManager.
20826
20827         (TypeContainer.Targets): The default for attribute types is
20828         AttributeTargets.All.
20829
20830         * attribute.cs (ApplyAttributes): Registering the attribute type
20831         is done elsewhere, not when we discover we have a Usage attribute.
20832
20833 2002-04-12  Ravi Pratap  <ravi@ximian.com>
20834
20835         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
20836         and get rid of is_delegate parameter.
20837
20838         * everywhere : update.
20839
20840 2002-04-12  Ravi Pratap  <ravi@ximian.com>
20841
20842         * cs-parser.jay (compilation_unit): Revamp completely to use
20843         some new ideas that I got from Rhys' grammar to solve the problems
20844         with assembly level attributes.
20845
20846         (outer_declaration): New grammar production.
20847
20848         (attribute_sections): Add.
20849
20850         (opt_attributes): Base on attribute_sections
20851
20852         (namespace_declaration): Allow opt_attributes to tackle the case
20853         when we have assembly level attributes - we are clever in this
20854         regard now ;-)
20855
20856         * attribute.cs (ApplyAttributes): Do not worry about assembly 
20857         attributes in the non-global context.
20858
20859         * rootcontext.cs (AddGlobalAttributes): Go back to using this
20860         instead of SetGlobalAttributes.
20861
20862         * class.cs, rootcontext.cs : Ensure we define and generate 
20863         attribute types before anything else.
20864
20865         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
20866         and flag the new error -20 for the case when the attribute type
20867         does not have valid targets specified. csc does not catch this.
20868
20869         * ../errors/errors.txt : update for error # -20
20870
20871 2002-04-11  Ravi Pratap  <ravi@ximian.com>
20872
20873         * support.cs (InternalParameters.ParameterModifier): Do some null
20874         checking and return sane values.
20875
20876         * class.cs (Method.Define): If we are a PInvoke method, ensure
20877         that we are static and extern. Report error # 601
20878
20879         * ../errors/cs0601.cs : Add test case for the above error.
20880
20881 2002-04-07  Ravi Pratap  <ravi@ximian.com>
20882
20883         * rootcontext.cs (attribute_types): We need to keep type of
20884         all attribute types separately and emit code for them first.
20885
20886         (RegisterAttribute) : Implement.
20887
20888         * class.cs (DefineType): Check if the current Type is a custom
20889         attribute type and register it accordingly.
20890
20891         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
20892         adding the first attribute twice and rename to
20893
20894         (SetGlobalAttributes): this.
20895
20896         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
20897         lookups.
20898
20899         * attribute.cs (ApplyAttributes): Take an additional argument telling us
20900         if we are processing global arguments. Hmm, I am unsure of this.
20901
20902 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20903
20904         * expression.cs: added static array of strings to avoid calling
20905         Enum.ToString () for Operator in Binary. Significant recover of
20906         performance.
20907
20908 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
20909
20910         * class.cs (FindMembers): Allow the Builders of the various
20911         members to be null.  If they are skip them.  This only happens
20912         during the PInvoke declaration.
20913
20914 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
20915
20916         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
20917         failure, so we do not keep going afterwards.
20918
20919         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
20920         wanted to pass `false' as the `is_delegate' argument.  If this is
20921         the case, why not use delegate_type == null to mean `is_delegate =
20922         false' and anything else as is_delegate = true.
20923
20924 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
20925
20926         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
20927         code for the section, not the beginning of the tests.
20928
20929 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
20930
20931         * cfold.cs: Handle operator + (Enum x, Underlying x) 
20932
20933         * expression.cs (Binary): same.  Warn about errors where we have
20934         Enum/Enum in operator + as well.
20935
20936 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
20937
20938         * statement.cs:
20939                 - added support for switch(bool)
20940                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
20941                 - add TableSwitchEmit() to handle table-based switch statements
20942
20943 2002-04-05  Ravi Pratap  <ravi@ximian.com>
20944
20945         * expression.cs (Invocation.OverloadResolve): Factor out code which
20946         does parameter compatibility checking with arguments so that we can 
20947         re-use the code even from Delegate.VerifyApplicability
20948
20949         (VerifyArgumentsCompat): Move above code here.
20950
20951         * delegate.cs (VerifyApplicability): Get rid of duplicate code
20952         and instead make a call to the above method.
20953
20954 2002-03-31  Ravi Pratap  <ravi@ximian.com>
20955
20956         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
20957         We use it to keep track of classes which are attribute types.
20958
20959 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
20960
20961         * delegate.cs (Delegate.Define): Correctly define the types in the
20962         presence of fixed and array parameters.
20963
20964         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
20965         doing FindMembers.
20966
20967         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
20968         include NonPublic after the first iteration.
20969
20970         * class.cs (Indexer.CheckBase): Only check if both parents are
20971         non-null. 
20972
20973         * cs-parser.jay (accessor_body): If empty, set to null.
20974
20975         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
20976         same code path here to resolve constants names that we did have in
20977         MemberAccess.DoResolve.  There is too much code duplicated here.
20978
20979 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
20980
20981         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
20982
20983         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
20984         to MakeUnionSet.
20985
20986         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
20987         tokens, numbers and strings.
20988
20989         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
20990         parenthesis.
20991
20992         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
20993         asyncronous parameters and the regular parameters.  
20994
20995         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
20996         specify the target directory.
20997
20998         * expression.cs: (This.DoResolve): Simplify
20999         (As.Emit): Optimize, do not generate IsInst if the expression is
21000         always of the given type.
21001
21002         (Is.DoResolve): Bug fix, we were reporting both always/never for
21003         the is expression.
21004
21005         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
21006         creating too many unnecessary arrays.
21007
21008 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
21009
21010         * class.cs (EmitFieldInitializer): Use Assign expression to assign
21011         fields instead of rolling our own initializer.   Takes care of all
21012         implicit conversions, and drops unnecessary static checks/argument.
21013
21014 2002-03-31  Dick Porter  <dick@ximian.com>
21015
21016         * driver.cs: use the GetDirectories() return values properly, and
21017         use "/" as path separator.
21018
21019 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
21020
21021         * expression.cs (Unary): Optimize - - expr into expr.
21022         (Binary): Optimize a + (-b) into a -b.
21023
21024         * codegen.cs (CodeGen): Made all methods static.
21025
21026 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
21027
21028         * rootcontext.cs: 
21029
21030         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
21031         TypeBuilder property.
21032
21033         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
21034         instead. 
21035
21036         * tree.cs: Removed the various RecordXXXX, and replaced with a
21037         single RecordDecl.  Removed all the accessor methods, and just
21038         left a single access point Type 
21039
21040         * enum.cs: Rename DefineEnum to DefineType.
21041
21042         * decl.cs: New abstract method `DefineType' used to unify the
21043         Defines for Enumerations, Interfaces, TypeContainers and
21044         Delegates.
21045
21046         (FindType): Moved LookupInterfaceOrClass here.  Moved the
21047         LookupBaseClasses method that used to live in class.cs and
21048         interface.cs here, and renamed to FindType.
21049
21050         * delegate.cs: Implement DefineType.  Take advantage of the
21051         refactored pattern for locating the parent builder without taking
21052         the parent_builder argument (which we know does not work if we are
21053         nested, and triggering a toplevel definition).
21054
21055 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
21056
21057         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
21058         accessibility of a member has changed during override and report
21059         an error if so.
21060
21061         * class.cs (Method.Define, Property.Define): Only complain on
21062         overrides if the method is private, any other accessibility is
21063         fine (and since we just checked the permission is the same, we are
21064         good to go).
21065
21066         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
21067         and elif are processed always.  The other pre-processing
21068         directives are only processed if we are "taking" the path
21069
21070 2002-03-29  Martin Baulig  <martin@gnome.org>
21071
21072         * class.cs (Method.Emit): Only emit symbolic debugging info if the
21073         current location is not Null.
21074
21075         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
21076         a separate method so we can profile it.
21077
21078         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
21079         `span.Seconds' are just seconds, but no minutes or hours.
21080         (MainDriver): Profile the CodeGen.SaveSymbols calls.
21081
21082 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
21083
21084         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
21085         Remove the gratuitous set of Final:
21086
21087                                 // If an interface implementation, then we can set Final.
21088                                 if (((flags & MethodAttributes.Abstract) == 0) &&
21089                                     implementing.DeclaringType.IsInterface)
21090                                         flags |= MethodAttributes.Final;
21091
21092         I do not know what I was smoking when I used that.
21093
21094
21095         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
21096         step into fixing the name resolution issues for delegates and
21097         unifying the toplevel name resolution.
21098
21099 2002-03-28  Martin Baulig  <martin@gnome.org>
21100
21101         * class.cs (Method.Emit): If we have a symbol writer, call its
21102         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
21103         tell it about the current method.
21104
21105         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
21106         writer that we're going to emit the first byte of IL code for a new
21107         statement (a new source line).
21108         (EmitContext.EmitTopBlock): If we have a symbol writer, call
21109         EmitContext.Mark() before emitting any code.
21110
21111         * location.cs (SymbolDocument): Return null when we're Null.
21112
21113         * statement.cs (Statement): Moved the `Location loc' variable here.
21114         (Statement.EmitBoolExpression): If we have a symbol writer, call
21115         ec.Mark() before emitting any code to tell it that we're at the
21116         beginning of a new statement.
21117         (StatementExpression): Added `Location' argument to the constructor.
21118         (Block): Added public readonly variable `StartLocation' and public
21119         variable `EndLocation'.  The latter is to be set using SetEndLocation().
21120         (Block): Added constructor which takes a start and end location.
21121         (Block.SetEndLocation): New method. This sets the end location.
21122         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
21123         local variables we create.
21124         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
21125         each statement and do also mark the begin and end of the block.
21126
21127         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
21128         tell it the current lexer.Location, use Location.Null for the end of the
21129         block.
21130         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
21131         current block, set its end location using SetEndLocation().
21132         (statement_expression): StatementExpression constructor now takes the
21133         lexer.Location as additional argument.
21134         (for_statement, declare_local_variables): Likewise.
21135         (declare_local_variables): When creating a new implicit block, use the
21136         new Block constructor and pass it the lexer.Location.
21137
21138 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
21139
21140         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
21141         members also on the parent interfaces recursively.
21142
21143 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
21144
21145         * report.cs: Use new formats, since Gonzalo finished the missing
21146         bits. 
21147
21148         * expression.cs (Binary.ResolveOperator): added missing operator|
21149         operator& and operator^ for bool/bool.
21150
21151         * cs-parser.jay: CheckDef now takes a Location argument that is
21152         used to report errors more precisly (instead of reporting the end
21153         of a definition, we try to track something which is a lot closer
21154         to the source of the problem).
21155
21156         * cs-tokenizer.cs: Track global token use, so we can properly flag
21157         the use of #define/#undef after the first token has been seen.
21158
21159         Also, rename the reportXXXX to Error_DescriptiveName
21160
21161         * decl.cs (DeclSpace.IsTopLevel): Move property here from
21162         TypeContainer, so that Enum and Interface can use this too.
21163
21164         * class.cs (TypeContainer.LookupInterfaceOrClass,
21165         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
21166         `builder' argument.  Typically this was used to pass the parent
21167         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
21168         the definition).  
21169
21170         The problem is that a nested class could trigger the definition of
21171         a toplevel class, and the builder would be obviously wrong in that
21172         case. 
21173
21174         So we drop this argument, and we compute dynamically the
21175         TypeBuilder/ModuleBuilder (the correct information was available
21176         to us anyways from DeclSpace.Parent)
21177
21178         * interface.cs (Interface.DefineInterface): Drop builder
21179         parameter cleanup like class.cs
21180
21181         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
21182         like class.cs
21183
21184         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
21185         values. 
21186
21187         (Try.Emit): Propagate the returns value from the statement.
21188
21189         (Return.Emit): Even if we are leavning 
21190
21191         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
21192
21193         * modifiers.cs: Fix the computation of MethodAttributes flags.
21194
21195 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
21196
21197         * driver.cs: allow compilation of files that start with '/'.
21198         Add a default case when checking the argument of --target.
21199
21200 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
21201
21202         * interface.cs: Implement the same search algorithm for types in
21203         the interface code.
21204
21205         * delegate.cs: Do not allow multiple definition.
21206
21207         * Recovered ChangeLog that got accidentally amputated
21208
21209         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
21210
21211         * rootcontext.cs: Load manually enum to allow core classes to
21212         contain enumerations.
21213
21214         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
21215         Update to new static methods in TypeManager.
21216
21217         * typemanager.cs (GetMethod, GetConstructor): Use our
21218         implementation of FindMembers to find the members, since during
21219         corlib compilation, the types are TypeBuilders and GetMethod and
21220         GetConstructor do not work.
21221
21222         Make all methods in TypeManager static.
21223
21224         (InitCodeHelpers): Split the functionality from
21225         the InitCodeTypes function.
21226
21227         * driver.cs: Call InitCodeHelpers after we have populated the
21228         types. 
21229
21230         * cs-parser.jay (delegate_declaration): we did not used to compute
21231         the delegate name correctly for void delegates.
21232
21233 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
21234
21235         * rootcontext.cs (RootContext): Init the interface_resolve_order
21236         and type_container_resolve_order always.
21237
21238         (ResolveCore, BootstrapCorlib_ResolveClass,
21239         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
21240         compiler when compiling with --nostdlib
21241
21242         * class.cs (TypeContainer.DefineType): Check that our parent is
21243         not null.  This test is most important when we are bootstraping
21244         the core types.
21245
21246         * codegen.cs: Split out the symbol writing code.
21247
21248 2002-03-25  Martin Baulig  <martin@gnome.org>
21249
21250         * driver.cs (-g): Made -g an alias for --debug.
21251
21252 2002-03-24  Martin Baulig  <martin@gnome.org>
21253
21254         * codegen.cs (SymbolWriter): New public variable. Returns the
21255         current symbol writer.
21256         (CodeGen): Added `bool want_debugging_support' argument to the
21257          constructor. If true, tell the ModuleBuild that we want debugging
21258         support and ask it for the ISymbolWriter.
21259         (Save): If we have a symbol writer, call it's Close() method after
21260         saving the assembly.
21261
21262         * driver.c (--debug): New command line argument to create a
21263         debugger information file.
21264
21265         * location.cs (SymbolDocument): New public property. Returns an
21266         ISymbolDocumentWriter object for the current source file or null
21267         if we don't have a symbol writer.
21268
21269 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
21270
21271         * driver.cs (LoadAssembly): Correctly return when all the paths
21272         have been tried and not before.
21273
21274         * statement.cs (Switch.Emit): return the actual coverage for this
21275         statement (returns/not-returns)
21276
21277         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
21278         switch of the statement if we are the last switch section.  That
21279         kills two problems: try/catch problems (we used to emit an empty
21280         nop at the end) and switch statements where all branches would
21281         return. 
21282
21283 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
21284
21285         * driver.cs: Add default assemblies (the equivalent to the
21286         Microsoft CSC.RSP file)
21287
21288         * cs-tokenizer.cs: When updating `cols and setting it to zero,
21289         also update tokens_seen and set it to false.
21290
21291         * driver.cs: Implement --recurse for Mike.
21292
21293         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
21294         correctly splitting out the paths.
21295
21296 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
21297
21298         * interface.cs (Interface.PopulateProperty): Instead of using
21299         `parent' as the declaration space for the set parameters, use
21300         `this' 
21301
21302         * support.cs (InternalParameters): InternalParameters constructor
21303         takes a DeclSpace instead of a TypeContainer.
21304
21305         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
21306         types are being initialized, load the address of it before calling
21307         the function.  
21308
21309         (New): Provide a mechanism to disable the generation of local
21310         value type temporaries when the caller will be providing us with
21311         an address to store it.
21312
21313         (ArrayCreation.EmitDynamicInitializers): Use it.
21314
21315 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
21316
21317         * expression.cs (Invocation.EmitArguments): Only probe for array
21318         property if there is more than one argument.  Sorry about that.
21319
21320         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
21321         empty param arrays.
21322
21323         * class.cs (Method.LabelParameters): Fix incorrect code path that
21324         prevented the `ParamArrayAttribute' from being applied to the
21325         params attribute.
21326
21327 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
21328
21329         * support.cs (ReflectionParameters): Correctly compute whether the
21330         last argument is a params array.  Fixes the problem with
21331         string.Split ('a')
21332
21333         * typemanager.cs: Make the assemblies array always be non-null
21334         (empty, but non-null)
21335
21336         * tree.cs (RecordDecl): New function that abstracts the recording
21337         of names.  This reports error 101, and provides a pointer to the
21338         previous declaration.  Fixes a crash in the compiler.
21339
21340         * cs-parser.jay (constructor_declaration): Update to new grammar,
21341         and provide a constructor_body that can be empty.
21342
21343 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
21344
21345         * driver.cs: Add support for --resources.
21346
21347         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
21348         Make all types for the various array helper methods be integer.
21349
21350         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
21351         CheckState to ConvCast.
21352
21353         (ConvCast): Now it takes a `checked' state argument, to avoid
21354         depending on the emit context for the conversion, and just using
21355         the resolve time setting.
21356
21357         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
21358         instead of Invocation.EmitArguments.  We do not emit the original
21359         arguments, instead we emit those which have been converted to
21360         unsigned int expressions.
21361
21362         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
21363
21364         * codegen.cs: ditto.
21365
21366         * expression.cs (LocalVariableReference): Drop the use of the
21367         Store function that depended on the variable index.
21368
21369         * statement.cs (VariableInfo): Drop the `Idx' property from this
21370         class, as this is not taking into account the indexes for
21371         temporaries tat we generate during the execution, getting the
21372         indexes wrong.
21373
21374         * class.cs: First emit class initializers, then call the parent
21375         constructor. 
21376
21377         * expression.cs (Binary): Fix opcode emision.
21378         (UnaryMutator.EmitCode): Support checked code generation
21379
21380         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
21381         matches for events for both the Static and Instance scans,
21382         pointing to the same element.   Fix that.
21383
21384 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
21385
21386         * rootcontext.cs (ResolveTree): Always set the
21387         interface_resolve_order, because nested interfaces will be calling
21388         into us.
21389
21390         * class.cs (GetInterfaceOrClass): Track the same resolution
21391         process used by TypeManager.LookupType.  This fixes the nested
21392         type lookups in class declarations (separate path from
21393         LookupType). 
21394
21395         (TypeContainer.DefineType): Also define nested interfaces.
21396         (TypeContainer.RegisterOrder): New public function used to
21397         register the order in which child interfaces need to be closed.
21398
21399         Nested interfaces need to be closed after their parents have been
21400         created. 
21401
21402         * interface.cs (InterfaceAttr): Put all the logic for computing
21403         the interface attribute here. 
21404
21405         (DefineInterface): Register our interface order with the
21406         RootContext or with the TypeContainer depending on the case.
21407
21408 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
21409
21410         * cs-parser.jay: rework foreach statement to work with the new
21411         changes to the policy on SimpleNames.
21412
21413         * report.cs: support Stacktrace on warnings as well.
21414
21415         * makefile: drop --unsafe and /unsafe from the compile.
21416
21417 2002-03-13  Ravi Pratap  <ravi@ximian.com>
21418
21419         * ecore.cs (StandardConversionExists): Modify to take an Expression
21420         as the first parameter. Ensure we do null -> reference type conversion
21421         checking.
21422
21423         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
21424         temporary Expression objects.
21425
21426 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
21427
21428         * interface.cs: workaround bug in method overloading resolution
21429         (there is already a bugzilla bug for it).
21430
21431 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
21432
21433         We could also solve this problem by having a separate path for
21434         performing type lookups, instead of DoResolve, we could have a
21435         ResolveType entry point, and only participating pieces of the
21436         production (simplename, deref, array) would implement this. 
21437
21438         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
21439         signal SimpleName to only resolve type names and not attempt to
21440         resolve anything else.
21441
21442         * expression.cs (Cast): Set the flag.
21443
21444         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
21445
21446         * class.cs: Only report 108 if there is no `new' modifier.
21447
21448         * cs-parser.jay: rework foreach statement to work with the new
21449         changes to the policy on SimpleNames.
21450         
21451         * report.cs: support Stacktrace on warnings as well.
21452
21453         * makefile: drop --unsafe and /unsafe from the compile.
21454
21455 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
21456
21457         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
21458         lookups here, instead of doing that at parse time.  This means
21459         that our grammar will not introduce `LocalVariableReferences' as
21460         expressions at this point.  That solves the problem of code like
21461         this:
21462
21463         class X {
21464            static void Main ()
21465            { int X = 1;
21466             { X x = null }}}
21467
21468         This is only half the fix.  The full fix requires parameters to
21469         also be handled in this way.
21470
21471         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
21472         makes the use more obvious of the DeclSpace.  The
21473         ec.TypeContainer.TypeBuilder is now only used to pull the
21474         TypeBuilder for it.
21475
21476         My theory is that I can get rid of the TypeBuilder completely from
21477         the EmitContext, and have typecasts where it is used (from
21478         DeclSpace to where it matters).  
21479
21480         The only pending problem is that the code that implements Aliases
21481         is on TypeContainer, and probably should go in DeclSpace.
21482
21483         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
21484         lookups here, instead of doing that at parse time.  This means
21485         that our grammar will not introduce `LocalVariableReferences' as
21486         expressions at this point.  That solves the problem of code like
21487         this:
21488
21489         class X {
21490            static void Main ()
21491            { int X = 1;
21492             { X x = null }}}
21493
21494         This is only half the fix.  The full fix requires parameters to
21495         also be handled in this way.
21496
21497         * class.cs (Property.DefineMethod): When implementing an interface
21498         method, set newslot, when implementing an abstract method, do not
21499         set the flag (before we tried never setting it, or always setting
21500         it, which is the difference).
21501         (Indexer.DefineMethod): same.
21502         (Method.DefineMethod): same.
21503
21504         * ecore.cs: Only set the status used flag if we get back a Field.
21505
21506         * attribute.cs: Temporary hack, so Paolo can keep working.
21507
21508 2002-03-08  Ravi Pratap  <ravi@ximian.com>
21509
21510         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
21511         the unmanaged type in the case we have a MarshalAs attribute.
21512
21513         (Resolve): Handle the case when we are parsing the special MarshalAs
21514         attribute [we need to store the unmanaged type to use later]
21515
21516         * typemanager.cs (marshal_as_attr_type): Built in type for the 
21517         MarshalAs Attribute.
21518
21519         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
21520         on parameters and accordingly set the marshalling info.
21521
21522 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
21523
21524         * class.cs: Optimizing slightly by removing redundant code after
21525         we switched to the `NoTypes' return value.
21526         (Property.DefineMethod): use NoTypes here too.
21527
21528         This fixes the bug I introduced in my last batch of changes.
21529
21530 2002-03-05  Ravi Pratap  <ravi@ximian.com>
21531
21532         * tree.cs (RecordEnum): Add. We now keep track of enums too.
21533
21534         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
21535         Enums since those are types too. 
21536
21537         * cs-parser.jay (enum_declaration): Record enums as we parse them.
21538
21539         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
21540         thanks to a call during the lookup process.
21541
21542 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
21543
21544         * statement.cs (Foreach): Lots of work to accomodate a particular
21545         kind of foreach statement that I had not kept in mind.  It is
21546         possible to have foreachs on classes that provide a GetEnumerator
21547         method that return objects that implement the "pattern" for using
21548         a foreach, there is no need to support GetEnumerator
21549         specifically. 
21550
21551         This is needed to compile nant.
21552
21553         * decl.cs: Only report 114 if the member is not `Finalize' and if
21554         the warning level is at least 2.
21555
21556         * class.cs: Moved the compare function from Method to
21557         MethodSignature. 
21558
21559         (MethodSignature.InheritableMemberSignatureCompare): Add new
21560         filter function that is used to extract inheritable methods from a
21561         class. 
21562
21563         (Method.Define): Use the new `inheritable_method_signature_filter'
21564         delegate
21565
21566         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
21567         command. 
21568
21569 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
21570
21571         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
21572
21573         * cs-parser.jay: Add opt_semicolon to the interface declaration.
21574
21575         * expression.cs: Pass location information to
21576         ConvertImplicitStandard. 
21577
21578         * class.cs: Added debugging code to track return values from
21579         interfaces. 
21580
21581 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
21582
21583         * expression.cs (Is.DoResolve): If either side of the `is' is an
21584         interface, do not flag the warning.
21585
21586         * ecore.cs (ImplicitReferenceConversion): We need a separate test
21587         for interfaces
21588
21589         * report.cs: Allow for --fatal to be used with --probe.
21590
21591         * typemanager.cs (NoTypes): Move the definition for the empty Type
21592         array here. 
21593
21594         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
21595         properties. 
21596         (TypeContainer.DefineProxy): New function used to proxy to parent
21597         implementations when implementing interfaces.
21598         (TypeContainer.ParentImplements): used to lookup if our parent
21599         implements a public function that is required by an interface.
21600         (TypeContainer.VerifyPendingMethods): Hook this up.
21601
21602         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
21603         `modules' and `assemblies' arraylists into arrays.  We only grow
21604         these are the very early start up of the program, so this improves
21605         the speedof LookupType (nicely measured).
21606
21607         * expression.cs (MakeByteBlob): Replaced unsafe code with
21608         BitConverter, as suggested by Paolo.
21609
21610         * cfold.cs (ConstantFold.Binary): Special case: perform constant
21611         folding of string concatenation, but if either side is a string,
21612         and the other is not, then return null, and let the runtime use
21613         the concatenation on the string plus the object (using
21614         `Object.ToString'). 
21615
21616 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
21617
21618         Constant Folding has been implemented now.
21619
21620         * expression.cs (Unary.Reduce): Do not throw an exception, catch
21621         the error instead on types that are not supported in one's
21622         complement. 
21623
21624         * constant.cs (Constant and all children): New set of functions to
21625         perform implict and explicit conversions.
21626
21627         * ecore.cs (EnumConstant): Implement the new functions to perform
21628         conversion by proxying to the child expression.
21629
21630         * codegen.cs: (ConstantCheckState): Constant evaluation has its
21631         own separate setting that can not be turned off from the command
21632         line using --unchecked or --checked and is only controlled using
21633         the checked/unchecked statements and expressions.  This setting is
21634         used by the constant folder to flag errors.
21635
21636         * expression.cs (CheckedExpr, UncheckedExpr): Set the
21637         ConstantCheckState as well.   
21638
21639         During Resolve, they also have to flag the state, because the
21640         constant folder runs completely in the Resolve phase.
21641
21642         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
21643         well.
21644
21645 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
21646
21647         * cfold.cs: New file, this file contains the constant folder.
21648
21649         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
21650         argument to track whether we are using the resulting address to
21651         load or store a value and provide better error messages. 
21652
21653         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
21654         new AddressOf arguments.
21655
21656         * statement.cs (Foreach.EmitCollectionForeach): Update
21657
21658         * expression.cs (Argument.Emit): Call AddressOf with proper
21659         arguments to track usage.
21660
21661         (New.DoEmit): Call AddressOf with new arguments.
21662
21663         (Unary.Emit): Adjust AddressOf call.
21664
21665 2002-03-01  Ravi Pratap  <ravi@ximian.com>
21666
21667         * cs-parser.jay (member_access): Change the case for pre-defined types
21668         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
21669         this suggestion.
21670
21671         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
21672         a method body.
21673
21674         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
21675         essentially like methods and apply attributes like MethodImplOptions to them too.
21676
21677         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
21678         not being null.
21679
21680         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
21681         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
21682         is the DeclSpace.
21683
21684         * Update code everywhere accordingly.
21685
21686         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
21687
21688         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
21689
21690 2002-02-28  Ravi Pratap  <ravi@ximian.com>
21691
21692         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
21693         try performing lookups against those instead of jumping straight into using
21694         the 'using' clauses.
21695
21696         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
21697
21698         (LookupType): Perform lookups in implicit parents too.
21699
21700         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
21701         sequence as RootContext.LookupType. 
21702
21703         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
21704         the various cases of namespace lookups into this method.
21705
21706 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
21707
21708         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
21709         in positional arguments)
21710
21711         * class.cs (Operator): Update the AllowedModifiers to contain
21712         extern. 
21713
21714         * cs-parser.jay: Update operator declaration to allow for the
21715         operator body to be empty.
21716
21717         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
21718         values. 
21719
21720 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
21721
21722         * class.cs (Method.Emit): Label parameters.
21723
21724         * driver.cs: Return 1 or 0 as the program exit code.
21725
21726 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
21727
21728         * expression.cs: Special case the `null' object when trying to
21729         auto-compute the type, as anything can be explicitly converted to
21730         that. 
21731
21732         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
21733         spotting this Paolo.
21734
21735         (Expression.ImplicitNumericConversion): Perform comparissions of
21736         the type using the underlying type in the case of an enumeration
21737         rather than using the enumeration type for the compare.
21738
21739         Cope with the underlying == type case, which is not possible to
21740         catch before. 
21741
21742         (Expression.ConvertNumericExplicit): Perform comparissions of
21743         the type using the underlying type in the case of an enumeration
21744         rather than using the enumeration type for the compare.
21745
21746         * driver.cs: If the user does not supply an extension, assume .exe
21747
21748         * cs-parser.jay (if_statement): Rewrote so that we can track the
21749         location for the if statement.
21750
21751         * expression.cs (Binary.ConstantFold): Only concat strings when
21752         the operation is "+", not everything ;-)
21753
21754         * statement.cs (Statement.EmitBoolExpression): Take a location
21755         argument. 
21756         (If, While, Do): Track location.
21757
21758         * expression.cs (Binary.ResolveOperator): In the object + string
21759         case, I was missing a call to ConvertImplicit
21760
21761 2002-02-25  Ravi Pratap  <ravi@ximian.com>
21762
21763         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
21764         Location arguments. Ensure we use RootContext.LookupType to do our work
21765         and not try to do a direct Type.GetType and ModuleBuilder.GetType
21766
21767         * interface.cs (PopulateMethod): Handle the type of the parameter being
21768         null gracefully.
21769
21770         * expression.cs (Invocation.BetterFunction): Handle the case when we 
21771         have a params method with no fixed arguments and a call is made with no
21772         arguments.
21773
21774 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
21775
21776         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
21777         the verbatim-string-literal
21778
21779         * support.cs (InternalParameters.ParameterModifier): handle null
21780         fixed parameters.
21781         (InternalParameters.ParameterType): ditto.
21782
21783         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
21784         duplicating the name of the variable parameter.
21785         (GetParameterByName): Fix bug where we were not looking up array
21786         paramters if they were the only present (thanks Paolo!).
21787         (GetParameterInfo): We only have an empty set of types if both
21788         fixed and array are set to null.
21789         (GetParameterInfo-idx): Handle FixedParameter == null
21790
21791         * cs-parser.jay: Handle the case where there is no catch
21792         statements (missing null test).
21793
21794 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
21795
21796         * driver.cs (MainDriver): Be conservative on our command line
21797         handling.
21798
21799         Catch DirectoryNotFoundException when calling GetFiles.
21800
21801         (SplitPathAndPattern): Used to split the input specification into
21802         a path and a pattern that we can feed to Directory.GetFiles.
21803
21804 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
21805
21806         * statement.cs (Fixed): Implement the last case of the Fixed
21807         statement (string handling).
21808
21809         * expression.cs (StringPtr): New class used to return a char * to
21810         a string;  Used by the Fixed statement.
21811
21812         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
21813
21814         * expression.cs (Binary.ResolveOperator): Remove redundant
21815         MemberLookup pn parent type.
21816         Optimize union call, we do not need a union if the types are the same.
21817         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
21818         type.
21819
21820         Specialize the use of MemberLookup everywhere, instead of using
21821         the default settings. 
21822
21823         (StackAlloc): Implement stackalloc keyword.
21824
21825         * cs-parser.jay: Add rule to parse stackalloc.
21826
21827         * driver.cs: Handle /h, /help, /?
21828
21829         * expression.cs (MakeByteBlob): Removed the hacks we had in place
21830         before we supported unsafe code.
21831
21832         * makefile: add --unsafe to the self compilation of mcs.
21833
21834 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
21835
21836         * expression.cs (PointerArithmetic): New class that is used to
21837         perform pointer arithmetic.
21838         (Binary.Resolve): Handle pointer arithmetic
21839         Handle pointer comparission.
21840         (ArrayPtr): Utility expression class that is used to take the
21841         address of an array.
21842
21843         (ElementAccess): Implement array access for pointers
21844
21845         * statement.cs (Fixed): Implement fixed statement for arrays, we
21846         are missing one more case before we are done.
21847
21848         * expression.cs (Indirection): Implement EmitAssign and set the
21849         ExprClass to Variable.  This allows pointer dereferences to be
21850         treated as variables, and to have values assigned to them.
21851
21852         * ecore.cs (Expression.StoreFromPtr): New utility function to
21853         store values dereferencing.
21854
21855 2002-02-20  Ravi Pratap  <ravi@ximian.com>
21856
21857         * expression.cs (Binary.ResolveOperator): Ensure that we are
21858         not trying to operate on a void type - this fixes the reported
21859         bug.
21860
21861         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
21862         the parent implementation is sealed.
21863
21864         * ../errors/cs0239.cs : Add.
21865
21866         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
21867
21868         * typemanager.cs (unverifiable_code_type): Corresponds to 
21869         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
21870         which have unsafe code in them.
21871
21872         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
21873         unsafe context.
21874
21875 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
21876
21877         * cs-tokenizer.cs: Add support for @"litreal strings"
21878
21879         Make tokenizer accept pre-processor directives
21880         on any column (remove the old C-like limitation). 
21881
21882         * rootcontext.cs (EmitCode): Emit any global attributes.
21883         (AddGlobalAttributes): Used to keep track of assembly attributes. 
21884
21885         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
21886
21887         * cs-parser.jay: Add support for global attributes.  
21888
21889 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
21890
21891         * expression.cs (Indirection): New helper class.  Unary will
21892         create Indirection classes to be able to implement the
21893         IMemoryLocation interface on it.
21894
21895 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
21896
21897         * cs-parser.jay (fixed_statement): reference the right statement.
21898
21899         * statement.cs (Fixed.Emit): Finish implementing the fixed
21900         statement for the &x case.
21901
21902 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
21903
21904         * class.cs (Property.Define, Method.Define): Remove newslot when
21905         `implementing'.  
21906
21907         * modifiers.cs: My use of NewSlot when `Abstract' was set was
21908         wrong.  NewSlot should only be used if the `new' keyword is present.
21909
21910         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
21911         locating our system dir.  Sorry about this.
21912
21913 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
21914
21915         * driver.cs (GetSystemDir): Compute correctly the location of our
21916         system assemblies.  I was using the compiler directory instead of
21917         the library directory.
21918
21919 2002-02-13  Ravi Pratap  <ravi@ximian.com>
21920
21921         * expression.cs (BetterFunction): Put back in what Miguel commented out
21922         since it is the correct fix. The problem is elsewhere ;-)
21923
21924         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
21925         parameters of the parms method are themselves compatible or not !
21926
21927         (StandardConversionExists): Fix very dangerous bug where we were forgetting
21928         to check that a class implements an interface before saying that an implicit
21929         conversion was allowed. Use ImplementsInterface to do the checking.
21930
21931 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
21932
21933         * class.cs (Method.Define): Track whether we are an explicit
21934         implementation or not.  And only call DefineMethodOverride if we
21935         are an explicit implementation.
21936
21937         (Property.DefineMethod): Ditto.
21938
21939 2002-02-11  Ravi Pratap  <ravi@ximian.com>
21940
21941         * expression.cs (BetterFunction): Catch hideous bug which was
21942          preventing us from detecting ambiguous calls due to implicit casts i.e
21943         cs0121.
21944
21945 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
21946
21947         * support.cs (Pair): Remove un-needed method.  I figured why I was
21948         getting the error in cs-parser.jay, the variable in a foreach loop
21949         is readonly, and the compiler does not really treat this as a variable.
21950
21951         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
21952         instead of EQUALS in grammar.  
21953
21954         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
21955
21956         * expression.cs (Unary.DoResolve): Check whether the argument is
21957         managed or not.
21958
21959 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
21960
21961         * support.cs: Api for Pair to set a value.  Despite the fact that
21962         the variables are public the MS C# compiler refuses to compile
21963         code that accesses the field if the variable is part of a foreach
21964         statement. 
21965
21966         * statement.cs (Fixed): Begin implementation of the fixed
21967         statement.
21968
21969         (Block.AddVariable): Return the VariableInfo on success and null
21970         on failure instead of true/false. 
21971
21972         * cs-parser.jay (foreach): Catch errors on variables already
21973         defined (we were ignoring this value before) and properly unwind
21974         the block hierarchy
21975
21976         (fixed_statement): grammar for the fixed statement.
21977
21978 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
21979
21980         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
21981         pointer types to be incretemented.
21982
21983         (SizeOf): Implement.
21984
21985         * cs-parser.jay (pointer_member_access): Implement
21986         expr->IDENTIFIER production.
21987
21988         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
21989         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
21990         on safe contexts.
21991
21992         (Unary): Implement indirection.
21993
21994         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
21995         use in non-unsafe context).
21996
21997         (SimpleName.DoResolve): Check for pointers in field access on safe
21998         contexts. 
21999
22000         (Expression.LoadFromPtr): Factor the load-indirect code in this
22001         function.  This was duplicated in UnboxCast and ParameterReference
22002
22003 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
22004
22005         * expression.cs (ComposedCast): report an error if a pointer cast
22006         is used in a safe region.
22007
22008         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
22009         pointer type casts in unsafe context.
22010
22011         * codegen.cs (EmitContext): Set up IsUnsafe.
22012
22013         * cs-parser.jay (non_expression_type): Add productions for pointer
22014         casts. 
22015
22016         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
22017         code.  We should not use force into static mode if the method is
22018         not virtual.  Fixes bug in MIS
22019
22020         * statement.cs (Do.Emit, While.Emit, For.Emit,
22021         Statement.EmitBoolExpression): Add support to Do and While to
22022         propagate infinite loop as `I do return' semantics.
22023
22024         Improve the For case to also test for boolean constants.
22025
22026         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
22027         to the list of attributes we can add.
22028
22029         Remove `EmitContext' argument.
22030
22031         * class.cs (Method.Define): Apply parameter attributes.
22032         (Constructor.Define): Apply parameter attributes.
22033         (MethodCore.LabelParameters): Move here the core of labeling
22034         parameters. 
22035
22036         * support.cs (ReflectionParameters.ParameterModifier,
22037         InternalParameters.ParameterModifier): Use IsByRef on the type and
22038         only return the OUT bit for these parameters instead of in/out/ref
22039         flags.
22040
22041         This is because I miss-understood things.  The ParameterInfo.IsIn
22042         and IsOut represent whether the parameter has the [In] and [Out]
22043         attributes set.  
22044
22045 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
22046
22047         * ecore.cs (FieldExpr.Emit): Release temporaries.
22048
22049         * assign.cs (LocalTemporary.Release): new function.
22050
22051         * codegen.cs (EmitContext.GetTemporaryStorage,
22052         EmitContext.FreeTemporaryStorage): Rework the way we deal with
22053         temporary storage.  Now we can "put back" localbuilders when we
22054         are done with them
22055
22056 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
22057
22058         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
22059         need to make a copy of the variable to generate verifiable code.
22060
22061 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
22062
22063         * driver.cs: Compute dynamically the system directory.
22064
22065         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
22066         Slower, but more generally useful.  Used by the abstract
22067         registering implementation. 
22068
22069         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
22070         the rules for the special rule on Type/instances.  First check if
22071         we have the same name, and if so, try that special static path
22072         rather than the instance path.
22073
22074 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
22075
22076         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
22077         for, while and if.
22078
22079         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
22080         Enum, ValueType, Delegate or Array for non-corlib compiles.
22081
22082         * cs-tokenizer.cs: Catch long identifiers (645)
22083
22084         * typemanager.cs (IndexerPropetyName): Ravi never tested this
22085         piece of code.
22086
22087         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
22088         fix, we were returning too early, so we were not registering
22089         pending methods from abstract classes.
22090
22091         Do not register pending methods if the class is abstract.
22092
22093         * expression.cs (Conditional.DoResolve): Report circular implicit
22094         conversions when we neecd to compute it for conditional
22095         expressions. 
22096
22097         (Is.DoResolve): If the expression is always of the provided type,
22098         flag warning 183.  If the expression can not ever be of the
22099         provided type flag warning 184.
22100
22101         * class.cs: Catch 169 as well.
22102
22103         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
22104         read. 
22105
22106 2002-01-18  Nick Drochak  <ndrochak@gol.com>
22107
22108         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
22109
22110 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
22111
22112         * interface.cs: (PopulateMethod): Check for pointers being defined
22113         only if the unsafe context is active.
22114         (PopulateProperty): ditto.
22115         (PopulateIndexer): ditto.
22116
22117         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
22118         specified.  If pointers are present, make sure that they are
22119         present in an unsafe context.
22120         (Constructor, Constructor.Define): ditto.
22121         (Field, Field.Define): ditto.
22122         (Property, Property.Define): ditto.
22123         (Event, Event.Define): ditto.
22124
22125         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
22126         hashtable if there are classes or structs defined.
22127
22128         * expression.cs (LocalVariableReference.DoResolve): Simplify this
22129         code, as the constant resolution moved.
22130
22131         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
22132         the metadata, so we can flag error 133. 
22133
22134         * decl.cs (MemberCore.UnsafeOK): New function to test that a
22135         pointer is being declared in an unsafe context.
22136
22137 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
22138
22139         * modifiers.cs (Modifiers.Check): Require a Location argument.
22140         Report error 227 for Unsafe use.
22141
22142         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
22143
22144         * statement.cs (For.Emit): If the test is null, then report that
22145         we do `return', as we wont reach anything afterwards.
22146
22147         (Switch.SwitchGoverningType): Track the expression that matched
22148         the conversion.
22149
22150         * driver.cs: Allow negative numbers as an error code to flag.
22151
22152         * cs-parser.jay: Handle 1551.
22153
22154         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
22155
22156 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
22157
22158         * cs-parser.jay: Report 1518 (type declaration can only contain
22159         class, struct, interface, enum or delegate)
22160
22161         (switch_label): Report 1523 (keywords `case' or `default' must
22162         preced code)
22163
22164         (opt_switch_sections): Report 1522 (empty switch)
22165
22166         * driver.cs: Report 1515 (response file specified multiple times)
22167         Report 1516 (Source file specified multiple times).
22168
22169         * expression.cs (Argument.Resolve): Signal 1510
22170
22171         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
22172         access not allowed in static code)
22173
22174 2002-01-11  Ravi Pratap  <ravi@ximian.com>
22175
22176         * typemanager.cs (IsPointerType): Utility method which we are going
22177         to need a lot.
22178
22179         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
22180         the object type, so we take care of that.
22181
22182         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
22183
22184         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
22185         added to non-params parameters :-)
22186
22187         * typemanager.cs (CSharpName): Include 'void' type too. 
22188
22189         (void_ptr_type): Include in the set of core types.
22190
22191         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
22192         duplicating code.
22193
22194         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
22195         an unsafe context.
22196
22197         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
22198         completely forgotten about it.
22199
22200 2002-01-10  Ravi Pratap  <ravi@ximian.com>
22201
22202         * cs-parser.jay (pointer_type): Add. This begins our implementation
22203         of parsing rules for unsafe code.
22204
22205         (unsafe_statement): Implement.
22206
22207         (embedded_statement): Modify to include the above.
22208
22209         * statement.cs (Unsafe): Implement new class for unsafe blocks.
22210
22211         * codegen.cs (EmitContext.InUnsafe): Add. This determines
22212         if the current context is an unsafe one.
22213
22214         * cs-parser.jay (local_variable_pointer_type): Since local variable types
22215         are handled differently, we need separate rules for them.
22216
22217         (local_variable_declaration): Update to use local_variable_pointer_type
22218         to allow variable declarations of unmanaged pointer types.
22219
22220         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
22221         in unsafe contexts.
22222
22223         * ../errors/cs0214.cs : Add.
22224
22225 2002-01-16  Nick Drochak  <ndrochak@gol.com>
22226
22227         * makefile: remove 'response' file when cleaning.
22228
22229 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
22230
22231         * cs-parser.jay: Report 1524.
22232
22233 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
22234
22235         * typemanager.cs (RegisterMethod): drop checking if we have
22236         registered this from here
22237
22238 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
22239
22240         * class.cs (Method.EmitDestructor): Implement calling our base
22241         destructor. 
22242
22243         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
22244         value of InFinally.
22245
22246         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
22247         this routine and will wrap the call in a try/catch block.  Deal
22248         with the case.
22249
22250 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
22251
22252         * ecore.cs (Expression.MemberLookup): instead of taking a
22253         parameter `same_type' that was used to tell whether we could
22254         access private members we compute our containing type from the
22255         EmitContext.
22256
22257         (FieldExpr): Added partial support for volatile fields.  This does
22258         not work for volatile fields exposed from assemblies, as I can not
22259         figure out how to extract the modreq from it.
22260
22261         Updated all the source files to use this.
22262
22263         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
22264         because it is referenced by MemberLookup very often. 
22265
22266 2002-01-09  Ravi Pratap  <ravi@ximian.com>
22267
22268         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
22269         TypeBuilder.GetCustomAttributes to retrieve what we need.
22270
22271         Get rid of redundant default_member_attr_type as this is the same as
22272         default_member_type which already exists.
22273
22274         * interface.cs, attribute.cs : Update accordingly.
22275
22276 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
22277
22278         * typemanager.cs: Enable IndexerPropertyName again.  It does not
22279         work for TYpeBuilders though.  Ravi, can you please fix this?
22280
22281         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
22282
22283         * expression.cs (Argument.Emit): Handle the case of ref objects
22284         being passed to ref functions;  
22285
22286         (ParameterReference.EmitLoad): Loads the content of the pointer
22287         without dereferencing.
22288
22289 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
22290
22291         * cs-tokenizer.cs: Implemented the pre-processing expressions.
22292
22293 2002-01-08  Ravi Pratap  <ravi@ximian.com>
22294
22295         * class.cs (Indexer.DefineMethod): Incorporate the interface
22296         type in the name of the method if we are doing explicit interface
22297         implementation.
22298
22299         * expression.cs (ConversionExists): Remove as it is completely obsolete.
22300
22301         (BetterConversion): Fix extremely trivial bug where we were referring to
22302         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
22303         again !
22304
22305         * ../errors/bug16.cs : Add although we have fixed it.
22306
22307 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
22308
22309         * expression.cs (BaseIndexer): Begin implementation.
22310
22311         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
22312
22313         * cs-parser.jay (indexer_declarator): Use qualified_identifier
22314         production directly to remove a shift/reduce, and implement
22315         explicit interface implementation.
22316
22317         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
22318         after a floating point suffix.
22319
22320         * expression.cs (DoNumericPromotions): Improved the conversion for
22321         uint/uint.  If we have a constant, we avoid doing a typecast to a
22322         larger type.
22323
22324         * class.cs (Indexer): Implement explicit interface implementation
22325         for indexers.
22326
22327 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
22328
22329         * class.cs: make the default instance constructor public and hidebysig.
22330
22331 2001-01-03  Ravi Pratap  <ravi@ximian.com>
22332
22333         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
22334         so we can call it from elsewhere.
22335
22336         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
22337         we emit it internally if the class has a defined indexer; otherwise the user
22338         emits it by decorating the class definition with the DefaultMemberAttribute.
22339
22340         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
22341         attribute is not used on a type which defines an indexer.
22342
22343         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
22344         character when we skip whitespace.
22345
22346         * ../errors/cs0646.cs : Add.
22347
22348 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
22349
22350         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
22351         again. 
22352
22353         * makefile: Add practical target `mcs3.exe' which builds the third
22354         generation compiler. 
22355
22356         * expression.cs (New): Fix structures constructor calling.
22357
22358         * class.cs (Property, Method, Indexer): Emit Final flag on the
22359         method if we are an interface implementation and we are not
22360         abstract. 
22361
22362         * ecore.cs (PropertyExpr): New public field `IsBase', tells
22363         whether this property is referencing a `base' method.
22364
22365         * expression.cs (Invocation.EmitCall): take an extra argument:
22366         is_base, this is used to determine whether the `call' or
22367         `callvirt' opcode should be used.
22368
22369
22370         * delegate.cs: update EmitCall.
22371
22372         * class.cs (Method.Define): Set NewSlot for the cases where we are
22373         not implementing an interface method.
22374
22375         (Property.Define): ditto.
22376
22377 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
22378
22379         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
22380         'r'.  Allows mcs to parse itself fully.
22381
22382 2002-01-02  Ravi Pratap  <ravi@ximian.com>
22383
22384         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
22385         of the number of initializers that require the InitializeArray method.
22386
22387         (CheckIndices): Store the Expression in all cases - not the plain value. Also
22388         update the above field where necessary.
22389
22390         (MakeByteBlob): Update accordingly.
22391
22392         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
22393         greater than 2.
22394
22395         (EmitDynamicInitializers): Update in accordance with the new optimization.
22396
22397         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
22398         same OpCode applies.
22399
22400         * cs-parser.jay : Fix some glaring errors I introduced.
22401
22402 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
22403
22404         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
22405         so that we can check for name clashes there too.
22406
22407         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
22408         for interface indexers.
22409
22410         * interfaces.cs (Define): Emit the default member attribute.
22411
22412         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
22413         variable was being referred to while setting the value ;-)
22414
22415 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
22416
22417         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
22418         byte-by-byte information when we know the data is zero.
22419
22420         Make the block always a multiple of 4, because
22421         DefineInitializedData has a bug.
22422
22423         * assign.cs: Fix, we should assign from the temporary, not from
22424         the source. 
22425
22426         * expression.cs (MakeByteBlob): Fix my incorrect code.
22427
22428 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
22429
22430         * typemanager.cs (EnumToUnderlying): This function is used to get
22431         the underlying type from an enumeration, because it does not
22432         always work. 
22433
22434         * constant.cs: Use the I4_S form for values between -128 and 127.
22435
22436         * statement.cs (Block.LookupLabel): Looks up a label.
22437         (Block): Drop support for labeled blocks.
22438
22439         (LabeledStatement): New kind of statement that represents a label
22440         only.
22441
22442         (Goto): Finally implement this bad boy.
22443
22444         * cs-parser.jay: Update to reflect new mechanism to implement
22445         labels.
22446
22447 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
22448
22449         * codegen.cs (EmitContext.This): a codegen property that keeps the
22450         a single instance of this instead of creating many different this
22451         instances. 
22452
22453         * delegate.cs (Delegate.DoResolve): Update to use the property;
22454
22455         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
22456
22457         * expression.cs (BaseAccess.DoResolve): Ditto.
22458
22459 2001-12-29  Ravi Pratap  <ravi@ximian.com>
22460
22461         * typemanager.cs (methodimpl_attr_type): Add to hold the type
22462         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
22463
22464         (InitCoreTypes): Update accordingly.
22465
22466         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
22467         so we can quickly store the state.
22468
22469         (ApplyAttributes): Set the correct implementation flags
22470         for InternalCall methods.
22471
22472 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
22473
22474         * expression.cs (EmitCall): if a method is not virtual, then do
22475         not use callvirt on it.
22476
22477         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
22478         user defined stuff) requires the use of stobj, which takes an
22479         address on the stack instead of an array and an index.  So emit
22480         the Ldelema operation for it.
22481
22482         (EmitStoreOpcode): Use stobj for valuetypes.
22483
22484         (UnaryMutator.EmitCode): Use the right 1 value depending on
22485         whether we are dealing with int64/uint64, float or doubles.
22486
22487         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
22488         constructors that I implemented last night.
22489
22490         (Constructor.IsDefault): Fix to work properly for static
22491         constructors.
22492
22493         * cs-parser.jay (CheckDef): report method signature errors.
22494         Update error number 103 to be 132.
22495
22496         * decl.cs: New AdditionResult enumeration value: MethodExists.
22497         Although we do this check for methods later on in the semantic
22498         analysis, catching repeated default constructors is so easy that
22499         we catch these here. 
22500
22501         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
22502         promotions code.
22503
22504         (ParameterReference.EmitAssign, Emit): handle
22505         bools as bytes.
22506
22507         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
22508         (ArrayAccess.EmitStoreOpcode): ditto.
22509
22510         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
22511
22512         * expression.cs (MakeByteBlob): Complete all the missing types
22513         (uint, short, ushort, byte, sbyte)
22514
22515         * class.cs: Only init instance field initializers on instance
22516         constructors. 
22517
22518         Rename `constructors' to instance_constructors. 
22519
22520         (TypeContainer.AddConstructor): Only add constructors to the list
22521         if it is not static.
22522
22523         Make sure that we handle default_static_constructor independently
22524         everywhere where we handle instance_constructors
22525
22526 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
22527
22528         * class.cs: Do not lookup or create a base initializer for a
22529         static constructor.
22530
22531         (ConstructorInitializer.Resolve): use the proper type to lookup
22532         for constructors.
22533
22534         * cs-parser.jay: Report error 1585 (modifiers between type and name).
22535
22536         * enum.cs, interface.cs: Remove CloseType, this is taken care by
22537         in DeclSpace. 
22538
22539         * decl.cs: CloseType is now an virtual method, the default
22540         implementation just closes this type.
22541
22542 2001-12-28  Ravi Pratap  <ravi@ximian.com>
22543
22544         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
22545         to PreserveSig by default. Also emit HideBySig on such methods.
22546
22547         Basically, set the defaults to standard values.
22548
22549         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
22550         argument, if candidate is better, it can't be worse than the best !
22551
22552         (Invocation): Re-write bits to differentiate between methods being
22553         applicable in their expanded form and their normal form - for params
22554         methods of course.
22555
22556         Get rid of use_standard everywhere as only standard conversions are allowed
22557         in overload resolution. 
22558
22559         More spec conformance.
22560
22561 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
22562
22563         * driver.cs: Add --timestamp, to see where the compiler spends
22564         most of its time.
22565
22566         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
22567         `this' in static code.
22568
22569         (SimpleName.DoResolve): Implement in terms of a helper function
22570         that allows static-references to be passed upstream to
22571         MemberAccess.
22572
22573         (Expression.ResolveWithSimpleName): Resolve specially simple
22574         names when called by MemberAccess to implement the special
22575         semantics. 
22576
22577         (Expression.ImplicitReferenceConversion): Handle conversions from
22578         Null to reference types before others, as Null's type is
22579         System.Object. 
22580
22581         * expression.cs (Invocation.EmitCall): Handle the special case of
22582         calling methods declared on a reference type from a ValueType
22583         (Base classes System.Object and System.Enum)
22584
22585         (MemberAccess.Resolve): Only perform lookups on Enumerations if
22586         the left hand side is a TypeExpr, not on every enumeration. 
22587
22588         (Binary.Resolve): If types are reference types, then do a cast to
22589         object on operators != and == of both arguments.
22590
22591         * typemanager.cs (FindMembers): Extract instance and static
22592         members if requested.
22593
22594         * interface.cs (PopulateProperty): Use void_type instead of null
22595         as the return type for the setter method.
22596
22597         (PopulateIndexer): ditto.
22598
22599 2001-12-27  Ravi Pratap  <ravi@ximian.com>
22600
22601         * support.cs (ReflectionParameters): Fix minor bug where we
22602         were examining the wrong parameter for the ParamArray attribute.
22603
22604         Cope with requests for the type of the parameter at position
22605         greater than the params parameter's. We now return the element
22606         type of the params array as that makes more sense.
22607
22608         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
22609         accordingly as we no longer have to extract the element type
22610         ourselves.
22611
22612         (Invocation.OverloadResolve): Update.
22613
22614 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
22615
22616         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
22617         against IEnumerator, test whether the return value is a descendant
22618         of the IEnumerator interface.
22619
22620         * class.cs (Indexer.Define): Use an auxiliary method to implement
22621         the other bits of the method definition.  Begin support for
22622         explicit interface implementation.
22623
22624         (Property.DefineMethod): Use TypeManager.void_type instead of null
22625         for an empty return value.
22626
22627 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
22628
22629         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
22630         dealing with a FieldExpr which is composed of a FieldBuilder, in
22631         the code path we did extract the constant, but we should have
22632         obtained the underlying value to be able to cast it (otherwise we
22633         end up in an infinite loop, this is what Ravi was running into).
22634
22635         (ArrayCreation.UpdateIndices): Arrays might be empty.
22636
22637         (MemberAccess.ResolveMemberAccess): Add support for section
22638         14.5.4.1 that deals with the special case of E.I when E is a type
22639         and something else, that I can be a reference to a static member.
22640
22641         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
22642         handle a particular array type to create byte blobs, it is just
22643         something we dont generate byteblobs for.
22644
22645         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
22646         arguments. 
22647
22648         * location.cs (Push): remove the key from the hashtable that we
22649         are about to add.   This happens for empty files.
22650
22651         * driver.cs: Dispose files after we have parsed them.
22652
22653         (tokenize): new function that only runs the tokenizer on its
22654         input, for speed testing.
22655
22656 2001-12-26  Ravi Pratap  <ravi@ximian.com>
22657
22658         * class.cs (Event.Define): Define the private field only if there
22659         are no accessors defined.
22660
22661         * expression.cs (ResolveMemberAccess): If there is no associated
22662         field with the event, that means we have an event defined with its
22663         own accessors and we should flag error cs0070 since transforming
22664         ourselves into a field is not valid in that case.
22665
22666         * ecore.cs (SimpleName.DoResolve): Same as above.
22667
22668         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
22669         and charset to sane values.
22670
22671 2001-12-25  Ravi Pratap  <ravi@ximian.com>
22672
22673         * assign.cs (DoResolve): Perform check on events only if they 
22674         are being accessed outside the declaring type.
22675
22676         * cs-parser.jay (event_declarations): Update rules to correctly
22677         set the type of the implicit parameter etc.
22678
22679         (add_accessor, remove_accessor): Set current local parameters.
22680
22681         * expression.cs (Binary): For delegate addition and subtraction,
22682         cast the return value from the method into the appropriate delegate
22683         type.
22684
22685 2001-12-24  Ravi Pratap  <ravi@ximian.com>
22686
22687         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
22688         of these as the workaround is unnecessary.
22689
22690         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
22691         delegate data - none of that is needed at all.
22692
22693         Re-write bits to extract the instance expression and the delegate method
22694         correctly.
22695
22696         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
22697         on delegates too.
22698
22699         * attribute.cs (ApplyAttributes): New method to take care of common tasks
22700         of attaching attributes instead of duplicating code everywhere.
22701
22702         * everywhere : Update code to do attribute emission using the above method.
22703
22704 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
22705
22706         * expression.cs (IsParamsMethodApplicable): if there are not
22707         parameters, return immediately.
22708
22709         * ecore.cs: The 0 literal can be implicity converted to an enum
22710         type. 
22711
22712         (SimpleName.DoResolve): First lookup the type, then lookup the
22713         members. 
22714
22715         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
22716         want to get its address.  If the InstanceExpression is not
22717         addressable, store the result in a temporary variable, then get
22718         the address of it.
22719
22720         * codegen.cs: Only display 219 errors on warning level or above. 
22721
22722         * expression.cs (ArrayAccess): Make it implement the
22723         IMemoryLocation interface.
22724
22725         (Binary.DoResolve): handle the operator == (object a, object b)
22726         and operator != (object a, object b) without incurring into a
22727         BoxedCast (because 5 != o should never be performed).
22728
22729         Handle binary enumerator operators.
22730
22731         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
22732         value type, otherwise use Ldelem_ref.
22733
22734         Use precomputed names;
22735
22736         (AddressOf): Implement address of
22737
22738         * cs-parser.jay (labeled_statement): Fix recursive block
22739         addition by reworking the production.
22740
22741         * expression.cs (New.DoEmit): New has a special case:
22742                 
22743                  If we are dealing with a ValueType, we have a few
22744                  situations to deal with:
22745                 
22746                     * The target of New is a ValueType variable, that is
22747                       easy, we just pass this as the variable reference
22748                 
22749                     * The target of New is being passed as an argument,
22750                       to a boxing operation or a function that takes a
22751                       ValueType.
22752                 
22753                       In this case, we need to create a temporary variable
22754                       that is the argument of New.
22755
22756
22757 2001-12-23  Ravi Pratap  <ravi@ximian.com>
22758
22759         * rootcontext.cs (LookupType): Check that current_type is not null before
22760         going about looking at nested types.
22761
22762         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
22763         not implement the IAssignMethod interface any more.
22764
22765         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
22766         where we tranform them into FieldExprs if they are being resolved from within
22767         the declaring type.
22768
22769         * ecore.cs (SimpleName.DoResolve): Do the same here.
22770
22771         * assign.cs (DoResolve, Emit): Clean up code considerably. 
22772
22773         * ../errors/bug10.cs : Add.
22774
22775         * ../errors/cs0070.cs : Add.
22776
22777         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
22778
22779         * assign.cs : Get rid of EventIsLocal everywhere.
22780
22781 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
22782
22783         * ecore.cs (ConvertIntLiteral): finished the implementation.
22784
22785         * statement.cs (SwitchLabel): Convert the value we are using as a
22786         key before looking up the table.
22787
22788 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
22789
22790         * codegen.cs (EmitTopBlock): Require a Location argument now.
22791
22792         * cs-parser.jay (constructor_declarator): We need to setup
22793         current_local_parameters before we parse the
22794         opt_constructor_initializer, to allow the variables to be bound
22795         to the constructor arguments.
22796
22797         * rootcontext.cs (LookupType): First lookup nested classes in our
22798         class and our parents before we go looking outside our class.
22799
22800         * expression.cs (ConstantFold): Extract/debox the values at the
22801         beginnning. 
22802
22803         * rootcontext.cs (EmitCode): Resolve the constants first before we
22804         resolve the types.  This is not really needed, but it helps debugging.
22805
22806         * statement.cs: report location.
22807
22808         * cs-parser.jay: pass location to throw statement.
22809
22810         * driver.cs: Small bug fix.
22811
22812         * report.cs: Updated format to be 4-zero filled digits.
22813
22814 2001-12-22  Ravi Pratap  <ravi@ximian.com>
22815
22816         * expression.cs (CheckIndices): Fix minor bug where the wrong
22817         variable was being referred to ;-)
22818
22819         (DoEmit): Do not call EmitStaticInitializers when the 
22820         underlying type is System.Object.
22821
22822 2001-12-21  Ravi Pratap  <ravi@ximian.com>
22823
22824         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
22825         and do the usual workaround for SRE.
22826
22827         * class.cs (MyEventBuilder.EventType): New member to get at the type
22828         of the event, quickly.
22829
22830         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
22831
22832         * assign.cs (Assign.DoResolve): Handle the case when the target
22833         is an EventExpr and perform the necessary checks.
22834
22835         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
22836         interface.
22837
22838         (SimpleName.MemberStaticCheck): Include check for EventExpr.
22839
22840         (EventExpr): Set the type in the constructor itself since we 
22841         are meant to be born fully resolved.
22842
22843         (EventExpr.Define): Revert code I wrote earlier.
22844                 
22845         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
22846         instance expression is null. The instance expression is a This in that case
22847         or a null, depending on whether it is a static method or not.
22848
22849         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
22850         refers to more than one method.
22851
22852         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
22853         and accordingly flag errors.
22854
22855 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
22856
22857         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
22858
22859 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
22860
22861         * location.cs (ToString): Provide useful rutine.
22862
22863 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
22864
22865         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
22866         objects, return the actual integral boxed.
22867
22868         * statement.cs (SwitchLabel): define an ILLabel for each
22869         SwitchLabel. 
22870
22871         (Switch.CheckSwitch): If the value is a Literal, extract
22872         the underlying literal.
22873
22874         Also in the unused hashtable we had, add the SwitchLabel so we can
22875         quickly look this value up.
22876
22877         * constant.cs: Implement a bunch of new constants.  Rewrite
22878         Literal based on this.  Made changes everywhere to adapt to this.
22879
22880         * expression.cs (Expression.MakeByteBlob): Optimize routine by
22881         dereferencing array only once, and also copes with enumrations.
22882
22883         bytes are two bytes wide, not one.
22884
22885         (Cast): Perform constant conversions.
22886
22887         * ecore.cs (TryImplicitIntConversion): Return literals instead of
22888         wrappers to the literals here.
22889
22890         * expression.cs (DoNumericPromotions): long literals can converted
22891         to ulong implicity (this is taken care of elsewhere, but I was
22892         missing this spot).
22893
22894         * ecore.cs (Expression.Literalize): Make the return type Literal,
22895         to improve type checking.
22896
22897         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
22898
22899 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
22900
22901         * literal.cs: Revert code from ravi that checked the bounds.  The
22902         bounds are sane by the definition of the type itself. 
22903
22904         * typemanager.cs: Fix implementation of ImplementsInterface.  We
22905         need to actually look up in our parent hierarchy for interfaces
22906         implemented. 
22907
22908         * const.cs: Use the underlying type for enumerations
22909
22910         * delegate.cs: Compute the basename for the delegate creation,
22911         that should fix the delegate test case, and restore the correct
22912         Type Lookup semantics in rootcontext
22913
22914         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
22915         referencing a nested type with the Reflection API is using the "+"
22916         sign. 
22917
22918         * cs-parser.jay: Do not require EOF token at the end.
22919
22920 2001-12-20  Ravi Pratap  <ravi@ximian.com>
22921
22922         * rootcontext.cs (LookupType): Concatenate type names with
22923         a '.' instead of a '+' The test suite passes again.
22924
22925         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
22926         field of the enumeration.
22927
22928         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
22929         the case when the member is an EventExpr.
22930
22931         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
22932         static has an associated instance expression.
22933
22934         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
22935
22936         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
22937
22938         * class.cs (Event.Define): Register event and perform appropriate checks
22939         for error #111.
22940
22941         We define the Add and Remove methods even if the use provides none because
22942         in that case, we provide default implementations ourselves.
22943
22944         Define a private field of the type of the event. This is done by the CSC compiler
22945         and we should be doing it too ;-)
22946
22947         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
22948         More methods we use in code we generate.
22949
22950         (multicast_delegate_type, delegate_type): Two separate types since the distinction
22951         is important.
22952
22953         (InitCoreTypes): Update accordingly for the above.
22954
22955         * class.cs (Event.Emit): Generate code for default accessors that we provide
22956
22957         (EmitDefaultMethod): Do the job in the above.
22958
22959         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
22960         appropriate place.
22961
22962 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
22963
22964         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
22965         builders even if we were missing one.
22966
22967         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
22968         pass the Basename as our class name instead of the Name.  The
22969         basename will be correctly composed for us.
22970
22971         * parameter.cs (Paramters): Now takes a Location argument.
22972
22973         * decl.cs (DeclSpace.LookupType): Removed convenience function and
22974         make all the code call directly LookupType in RootContext and take
22975         this chance to pass the Location information everywhere.
22976
22977         * Everywhere: pass Location information.
22978
22979 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
22980
22981         * class.cs (Constructor.Define): Updated way of detecting the
22982         length of the parameters.
22983
22984         (TypeContainer.DefineType): Use basename as the type name for
22985         nested types.
22986
22987         (TypeContainer.Define): Do not recursively define types here, as
22988         definition is taken care in order by the RootContext.
22989
22990         * tree.cs: Keep track of namespaces in a per-file basis.
22991
22992         * parameter.cs (Parameter.ComputeSignature): Update to use
22993         DeclSpace. 
22994
22995         (Parameters.GetSignature): ditto.
22996
22997         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
22998         instead of a TypeContainer.
22999
23000         (Interface.SemanticAnalysis): Use `this' instead of our parent to
23001         resolve names.  Because we need to be resolve in our context, not
23002         our parents.
23003
23004         * driver.cs: Implement response files.
23005
23006         * class.cs (TypeContainer.DefineType): If we are defined, do not
23007         redefine ourselves.
23008
23009         (Event.Emit): Emit the code for add/remove handlers.
23010         (Event.Define): Save the MethodBuilders for add/remove.
23011
23012         * typemanager.cs: Use pair here too.
23013
23014         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
23015         DictionaryEntry requires the first argument to be non-null.  
23016
23017         (enum_declaration): Compute full name for registering the
23018         enumeration.
23019
23020         (delegate_declaration): Instead of using
23021         formal_parameter_list, use opt_formal_parameter_list as the list
23022         can be empty.
23023
23024         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
23025         (EventParsing): New property that controls whether `add' and
23026         `remove' are returned as tokens or identifiers (for events);
23027
23028 2001-12-19  Ravi Pratap  <ravi@ximian.com>
23029
23030         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
23031         use MyEventBuilder only and let it wrap the real builder for us.
23032
23033         (MyEventBuilder): Revamp constructor etc.
23034
23035         Implement all operations that we perform on EventBuilder in precisely the same
23036         way here too.
23037
23038         (FindMembers): Update to use the EventBuilder member.
23039
23040         (Event.Emit): Update accordingly.
23041
23042 2001-12-18  Ravi Pratap  <ravi@ximian.com>
23043
23044         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
23045         by calling the appropriate methods.
23046
23047         (GetCustomAttributes): Make stubs as they cannot possibly do anything
23048         useful.
23049
23050         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
23051
23052 2001-12-17  Ravi Pratap  <ravi@ximian.com>
23053
23054         * delegate.cs (Delegate.Populate): Check that the return type
23055         and various parameters types are indeed accessible.
23056
23057         * class.cs (Constructor.Define): Same here.
23058
23059         (Field.Define): Ditto.
23060
23061         (Event.Define): Ditto.
23062
23063         (Operator.Define): Check that the underlying Method defined itself
23064         correctly - so it's MethodBuilder should not be null.
23065
23066         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
23067         expression happens to be null.
23068
23069         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
23070         members but as of now we don't seem to be able to do anything really useful with it.
23071
23072         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
23073         not the EventBuilder.
23074
23075 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
23076
23077         * cs-tokenizer.cs: Add support for defines.
23078         Add support for #if, #elif, #else, #endif
23079
23080         (eval_var): evaluates a variable.
23081         (eval): stubbed for evaluating functions.
23082
23083         * cs-parser.jay: Pass the defines information
23084
23085         * driver.cs: Add --define command line option.
23086
23087         * decl.cs: Move MemberCore here.
23088
23089         Make it the base class for DeclSpace.  This allows us to catch and
23090         report 108 and 109 for everything now.
23091
23092         * class.cs (TypeContainer.Define): Extract all the members
23093         before populating and emit the warning 108 (new keyword required
23094         to override) instead of having each member implement this.
23095
23096         (MemberCore.Define): New abstract method, we will be using this in
23097         the warning reporting engine in Populate.
23098
23099         (Operator.Define): Adjust to new MemberCore protocol. 
23100
23101         * const.cs (Const): This does not derive from Expression, it is a
23102         temporary object we use to create fields, it is a MemberCore. 
23103
23104         * class.cs (Method.Define): Allow the entry point to be in a
23105         specific class.
23106
23107         * driver.cs: Rewrite the argument handler to clean it up a bit.
23108
23109         * rootcontext.cs: Made it just an auxiliary namespace feature by
23110         making everything static.
23111
23112         * driver.cs: Adapt code to use RootContext type name instead of
23113         instance variable.
23114
23115         * delegate.cs: Remove RootContext argument.
23116
23117         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
23118         argument. 
23119
23120         * class.cs (Event.Define): The lookup can fail.
23121
23122         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
23123
23124         * expression.cs: Resolve the this instance before invoking the code.
23125
23126 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
23127
23128         * cs-parser.jay: Add a production in element_access that allows
23129         the thing to become a "type" reference.  This way we can parse
23130         things like "(string [])" as a type.
23131
23132         Note that this still does not handle the more complex rules of
23133         casts. 
23134
23135
23136         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
23137
23138         * ecore.cs: (CopyNewMethods): new utility function used to
23139         assemble the list of methods from running FindMembers.
23140
23141         (MemberLookup): Rework FindMembers so that 
23142
23143 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
23144
23145         * class.cs (TypeContainer): Remove Delegates who fail to be
23146         defined.
23147
23148         * delegate.cs (Populate): Verify that we dont get null return
23149         values.   TODO: Check for AsAccessible.
23150
23151         * cs-parser.jay: Use basename to emit error 574 (destructor should
23152         have the same name as container class), not the full name.
23153
23154         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
23155         possible representation.  
23156
23157         Also implements integer type suffixes U and L.
23158
23159 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
23160
23161         * expression.cs (ArrayCreation.DoResolve): We need to do the
23162         argument resolution *always*.
23163
23164         * decl.cs: Make this hold the namespace.  Hold the root context as
23165         well.
23166         (LookupType): Move here.
23167
23168         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
23169
23170         * location.cs (Row, Name): Fixed the code, it was always returning
23171         references to the first file.
23172
23173         * interface.cs: Register properties defined through interfaces.
23174
23175         * driver.cs: Add support for globbing on the command line
23176
23177         * class.cs (Field): Make it derive from MemberCore as well.
23178         (Event): ditto.
23179
23180 2001-12-15  Ravi Pratap  <ravi@ximian.com>
23181
23182         * class.cs (Event::Define): Check that the type of the event is a delegate
23183         type else flag error #66.
23184
23185         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
23186         same.
23187
23188         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
23189         values of EntryPoint, CharSet etc etc.
23190
23191         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
23192
23193         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
23194         be null and we should ignore this. I am not sure if this is really clean. Apparently,
23195         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
23196         which needs this to do its work.
23197
23198         * ../errors/cs0066.cs : Add.
23199
23200 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
23201
23202         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
23203         helper functions.
23204
23205         * class.cs: (MethodSignature.MethodSignature): Removed hack that
23206         clears out the parameters field.
23207         (MemberSignatureCompare): Cleanup
23208
23209         (MemberCore): New base class used to share code between MethodCore
23210         and Property.
23211
23212         (RegisterRequiredImplementations) BindingFlags.Public requires
23213         either BindingFlags.Instace or Static.  Use instance here.
23214
23215         (Property): Refactored code to cope better with the full spec.
23216
23217         * parameter.cs (GetParameterInfo): Return an empty array instead
23218         of null on error.
23219
23220         * class.cs (Property): Abstract or extern properties have no bodies.
23221
23222         * parameter.cs (GetParameterInfo): return a zero-sized array.
23223
23224         * class.cs (TypeContainer.MethodModifiersValid): Move all the
23225         method modifier validation to the typecontainer so we can reuse
23226         this on properties.
23227
23228         (MethodCore.ParameterTypes): return an empty sized array of types.
23229
23230         (Property.Define): Test property modifier validity.
23231
23232         Add tests for sealed/override too.
23233
23234         (Method.Emit): abstract or extern methods have no bodies.
23235
23236 2001-12-14  Ravi Pratap  <ravi@ximian.com>
23237
23238         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
23239         thing.
23240
23241         (Method::Define, ::Emit): Modify accordingly.
23242
23243         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
23244
23245         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
23246
23247         * makefile: Pass in /unsafe.
23248
23249 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
23250
23251         * class.cs (MakeKey): Kill routine.
23252
23253         * class.cs (TypeContainer.Define): Correctly define explicit
23254         method implementations (they require the full interface name plus
23255         the method name).
23256
23257         * typemanager.cs: Deply the PtrHashtable here and stop using the
23258         lame keys.  Things work so much better.
23259
23260         This of course broke everyone who depended on `RegisterMethod' to
23261         do the `test for existance' test.  This has to be done elsewhere.
23262
23263         * support.cs (PtrHashtable): A hashtable that avoid comparing with
23264         the object stupid Equals method (because, that like fails all over
23265         the place).  We still do not use it.
23266
23267         * class.cs (TypeContainer.SetRequiredInterface,
23268         TypeContainer.RequireMethods): Killed these two routines and moved
23269         all the functionality to RegisterRequiredImplementations.
23270
23271         (TypeContainer.RegisterRequiredImplementations): This routine now
23272         registers all the implementations required in an array for the
23273         interfaces and abstract methods.  We use an array of structures
23274         which can be computed ahead of time to reduce memory usage and we
23275         also assume that lookups are cheap as most classes will not
23276         implement too many interfaces.
23277
23278         We also avoid creating too many MethodSignatures.
23279
23280         (TypeContainer.IsInterfaceMethod): Update and optionally does not
23281         clear the "pending" bit if we find that there are problems with
23282         the declaration.
23283
23284         (TypeContainer.VerifyPendingMethods): Update to report errors of
23285         methods that look like implementations but are not.
23286
23287         (TypeContainer.Define): Add support for explicit interface method
23288         implementation. 
23289
23290 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
23291
23292         * typemanager.cs: Keep track of the parameters here instead of
23293         being a feature of the TypeContainer.
23294
23295         * class.cs: Drop the registration of parameters here, as
23296         InterfaceMethods are also interface declarations.
23297
23298         * delegate.cs: Register methods with the TypeManager not only with
23299         the TypeContainer.  This code was buggy.
23300
23301         * interface.cs: Full registation here.
23302
23303 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
23304
23305         * expression.cs: Remove reducer for binary expressions, it can not
23306         be done this way.
23307
23308         * const.cs: Put here the code that used to go into constant.cs
23309
23310         * constant.cs: Put here the code for constants, this is a new base
23311         class for Literals.
23312
23313         * literal.cs: Make Literal derive from Constant.
23314
23315 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
23316
23317         * statement.cs (Return.Emit): Report error 157 if the user
23318         attempts to return from a finally block.
23319
23320         (Return.Emit): Instead of emitting a return, jump to the end of
23321         the function.
23322
23323         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
23324         LocalBuilder to store the result of the function.  ReturnLabel is
23325         the target where we jump.
23326
23327
23328 2001-12-09  Radek Doulik  <rodo@ximian.com>
23329
23330         * cs-parser.jay: remember alias in current namespace
23331
23332         * ecore.cs (SimpleName::DoResolve): use aliases for types or
23333         namespaces
23334
23335         * class.cs (LookupAlias): lookup alias in my_namespace
23336
23337         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
23338         aliases hashtable
23339         (LookupAlias): lookup alias in this and if needed in parent
23340         namespaces
23341
23342 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
23343
23344         * support.cs: 
23345
23346         * rootcontext.cs: (ModuleBuilder) Made static, first step into
23347         making things static.  I need this to avoid passing the
23348         TypeContainer when calling ParameterType.
23349
23350         * support.cs (InternalParameters.ParameterType): Remove ugly hack
23351         that did string manipulation to compute the type and then call
23352         GetType.  Use Parameter.ParameterType instead.
23353
23354         * cs-tokenizer.cs: Consume the suffix for floating values.
23355
23356         * expression.cs (ParameterReference): figure out whether this is a
23357         reference parameter or not.  Kill an extra variable by computing
23358         the arg_idx during emission.
23359
23360         * parameter.cs (Parameters.GetParameterInfo): New overloaded
23361         function that returns whether a parameter is an out/ref value or not.
23362
23363         (Parameter.ParameterType): The type of the parameter (base,
23364         without ref/out applied).
23365
23366         (Parameter.Resolve): Perform resolution here.
23367         (Parameter.ExternalType): The full type (with ref/out applied).
23368
23369         * statement.cs (Using.Emit, Using.EmitExpression): Implement
23370         support for expressions on the using statement.
23371
23372 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
23373
23374         * statement.cs (Using.EmitLocalVariableDecls): Split the
23375         localvariable handling of the using statement.
23376
23377         (Block.EmitMeta): Keep track of variable count across blocks.  We
23378         were reusing slots on separate branches of blocks.
23379
23380         (Try.Emit): Emit the general code block, we were not emitting it. 
23381
23382         Check the type of the declaration to be an IDisposable or
23383         something that can be implicity converted to it. 
23384
23385         Emit conversions if required.
23386
23387         * ecore.cs (EmptyExpression): New utility class.
23388         (Expression.ImplicitConversionExists): New utility function.
23389
23390 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
23391
23392         * statement.cs (Using): Implement.
23393
23394         * expression.cs (LocalVariableReference): Support read only variables.
23395
23396         * statement.cs: Remove the explicit emit for the Leave opcode.
23397         (VariableInfo): Add a readonly field.
23398
23399 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
23400
23401         * ecore.cs (ConvCast): new class used to encapsulate the various
23402         explicit integer conversions that works in both checked and
23403         unchecked contexts.
23404
23405         (Expression.ConvertNumericExplicit): Use new ConvCast class to
23406         properly generate the overflow opcodes.
23407
23408 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
23409
23410         * statement.cs: The correct type for the EmptyExpression is the
23411         element_type, not the variable type.  Ravi pointed this out.
23412
23413 2001-12-04  Ravi Pratap  <ravi@ximian.com>
23414
23415         * class.cs (Method::Define): Handle PInvoke methods specially
23416         by using DefinePInvokeMethod instead of the usual one.
23417
23418         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
23419         above to do the task of extracting information and defining the method.
23420
23421 2001-12-04  Ravi Pratap  <ravi@ximian.com>
23422
23423         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
23424         of the condition for string type.
23425
23426         (Emit): Move that here. 
23427
23428         (ArrayCreation::CheckIndices): Keep string literals in their expression
23429         form.
23430
23431         (EmitDynamicInitializers): Handle strings appropriately.
23432
23433 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
23434
23435         * codegen.cs (EmitContext): Replace multiple variables with a
23436         single pointer to the current Switch statement.
23437
23438         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
23439         EmitContext.
23440
23441 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
23442
23443         * statement.cs 
23444
23445         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
23446         default'.
23447
23448         (Foreach.Emit): Foreach on arrays was not setting
23449         up the loop variables (for break/continue).
23450
23451         (GotoCase): Semi-implented.
23452
23453 2001-12-03  Ravi Pratap  <ravi@ximian.com>
23454
23455         * attribute.cs (CheckAttribute): Handle system attributes by using
23456         Attribute.GetAttributes to examine information we need.
23457
23458         (GetValidPlaces): Same here.
23459
23460         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
23461
23462         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
23463
23464         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
23465
23466         (Method::Define): Set appropriate flags if we have a DllImport attribute.
23467
23468         (Method::Emit): Handle the case when we are a PInvoke method.
23469
23470 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
23471
23472         * expression.cs: Use ResolveWithSimpleName on compound names.
23473
23474 2001-12-02  Ravi Pratap  <ravi@ximian.com>
23475
23476         * constant.cs (EmitConstant): Make sure we resolve the associated expression
23477         before trying to reduce it.
23478
23479         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
23480
23481         * constant.cs (LookupConstantValue): Implement.
23482
23483         (EmitConstant): Use the above in emitting the constant.
23484
23485         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
23486         that are user-defined by doing a LookupConstantValue on them.
23487
23488         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
23489         too, like above.
23490
23491 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
23492
23493         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
23494
23495         (BaseAccess.DoResolve): Implement.
23496
23497         (MemberAccess.DoResolve): Split this routine into a
23498         ResolveMemberAccess routine that can be used independently
23499
23500 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
23501
23502         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
23503         As that share bits of the implementation.  Is returns a boolean,
23504         while As returns the Type that is being probed.
23505
23506 2001-12-01  Ravi Pratap  <ravi@ximian.com>
23507
23508         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
23509         instead of a Literal - much easier.
23510
23511         (EnumInTransit): Remove - utterly useless :-)
23512
23513         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
23514
23515         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
23516
23517         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
23518         chain when we have no associated expression.
23519
23520 2001-11-30  Ravi Pratap  <ravi@ximian.com>
23521
23522         * constant.cs (Define): Use Location while reporting the errror.
23523
23524         Also emit a warning when 'new' is used and there is no inherited
23525         member to hide.
23526
23527         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
23528         populated.
23529
23530         (LookupEnumValue): Implement to lookup an enum member's value and define it
23531         if necessary.
23532
23533         (Populate): Re-write accordingly to use the above routine.
23534
23535 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
23536
23537         * expression.cs (This): Fix prototype for DoResolveLValue to
23538         override the base class DoResolveLValue.
23539
23540         * cs-parser.cs: Report errors cs574 and cs575 (destructor
23541         declarations) 
23542
23543         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
23544         (we need to load the address of the field here).  This fixes
23545         test-22. 
23546
23547         (FieldExpr.DoResolveLValue): Call the DoResolve
23548         function to initialize the Instance expression.
23549
23550         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
23551         correctly the GetEnumerator operation on a value type.
23552
23553         * cs-parser.jay: Add more simple parsing error catches.
23554
23555         * statement.cs (Switch): Add support for string switches.
23556         Handle null specially.
23557
23558         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
23559
23560 2001-11-28  Ravi Pratap  <ravi@ximian.com>
23561
23562         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
23563
23564         (declare_local_constant): New helper function.
23565
23566         * statement.cs (AddConstant): Keep a separate record of constants
23567
23568         (IsConstant): Implement to determine if a variable is a constant.
23569
23570         (GetConstantExpression): Implement.
23571
23572         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
23573
23574         * statement.cs (IsVariableDefined): Re-write.
23575
23576 2001-11-27  Ravi Pratap  <ravi@ximian.com>
23577
23578         * class.cs (TypeContainer::FindMembers): Look for constants
23579         in the case when we are looking for MemberTypes.Field
23580
23581         * expression.cs (MemberAccess::DoResolve): Check that in the
23582         case we are a FieldExpr and a Literal, we are not being accessed
23583         by an instance reference.
23584
23585         * cs-parser.jay (local_constant_declaration): Implement.
23586
23587         (declaration_statement): Implement for constant declarations.
23588
23589 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
23590
23591         * statement.cs (Switch): Catch double defaults.
23592
23593         (Switch): More work on the switch() statement
23594         implementation.  It works for integral values now, need to finish
23595         string support.
23596
23597
23598 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
23599
23600         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
23601         integer literals into other integer literals.  To be used by
23602         switch. 
23603
23604 2001-11-24  Ravi Pratap  <ravi@ximian.com>
23605
23606         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
23607         some memory.
23608
23609         (EmitDynamicInitializers): Cope with the above since we extract data
23610         directly from ArrayData now.
23611
23612         (ExpectInitializers): Keep track of whether initializers are mandatory
23613         or not.
23614
23615         (Bounds): Make it a hashtable to prevent the same dimension being 
23616         recorded for every element in that dimension.
23617
23618         (EmitDynamicInitializers): Fix bug which prevented the Set array method
23619         from being found.
23620
23621         Also fix bug which was causing the indices to be emitted in the reverse
23622         order.
23623
23624 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
23625
23626         * expression.cs (ArrayCreation): Implement the bits that Ravi left
23627         unfinished.  They do not work, because the underlying code is
23628         sloppy.
23629
23630 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23631
23632         * cs-parser.jay: Remove bogus fixme.
23633
23634         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
23635         on Switch statement.
23636
23637 2001-11-23  Ravi Pratap  <ravi@ximian.com>
23638
23639         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
23640         the same. 
23641
23642         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
23643         parameter. Apparently, any expression is allowed. 
23644
23645         (ValidateInitializers): Update accordingly.
23646
23647         (CheckIndices): Fix some tricky bugs thanks to recursion.
23648
23649         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
23650         I was being completely brain-dead.
23651
23652         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
23653         and re-write acordingly.
23654
23655         (DelegateInvocation): Re-write accordingly.
23656
23657         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
23658
23659         (MakeByteBlob): Handle types more correctly.
23660
23661         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
23662         initialization from expressions but it is incomplete because I am a complete
23663         Dodo :-|
23664
23665 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23666
23667         * statement.cs (If.Emit): Fix a bug that generated incorrect code
23668         on If.  Basically, we have to return `true' (ie, we do return to
23669         our caller) only if both branches of the if return.
23670
23671         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
23672         short-circuit operators, handle them as short circuit operators. 
23673
23674         (Cast.DoResolve): Resolve type.
23675         (Cast.Cast): Take an expression as the target type.
23676
23677         * cs-parser.jay (cast_expression): Remove old hack that only
23678         allowed a limited set of types to be handled.  Now we take a
23679         unary_expression and we resolve to a type during semantic
23680         analysis.
23681
23682         Use the grammar productions from Rhys to handle casts (this is
23683         not complete like Rhys syntax yet, we fail to handle that corner
23684         case that C# has regarding (-x), but we will get there.
23685
23686 2001-11-22  Ravi Pratap  <ravi@ximian.com>
23687
23688         * class.cs (EmitFieldInitializer): Take care of the case when we have a
23689         field which is an array type.
23690
23691         * cs-parser.jay (declare_local_variables): Support array initialization too.
23692
23693         * typemanager.cs (MakeKey): Implement.
23694
23695         (everywhere): Use the above appropriately.
23696
23697         * cs-parser.jay (for_statement): Update for array initialization while
23698         declaring variables.
23699
23700         * ecore.cs : The error message was correct, it's the variable's names that
23701         were misleading ;-) Make the code more readable.
23702
23703         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
23704         the correct type etc.
23705
23706         (ConvertExplicit): Handle Enum types by examining the underlying type.
23707
23708 2001-11-21  Ravi Pratap  <ravi@ximian.com>
23709
23710         * parameter.cs (GetCallingConvention): Always return
23711         CallingConventions.Standard for now.
23712
23713 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23714
23715         * expression.cs (Binary.ResolveOperator): Update the values of `l'
23716         and `r' after calling DoNumericPromotions.
23717
23718         * ecore.cs: Fix error message (the types were in the wrong order).
23719
23720         * statement.cs (Foreach.ProbeCollectionType): Need to pass
23721         BindingFlags.Instance as well 
23722
23723         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
23724         implicit int literal conversion in an empty cast so that we
23725         propagate the right type upstream.
23726
23727         (UnboxCast): new class used to unbox value types.
23728         (Expression.ConvertExplicit): Add explicit type conversions done
23729         by unboxing.
23730
23731         (Expression.ImplicitNumericConversion): Oops, forgot to test for
23732         the target type before applying the implicit LongLiterals to ULong
23733         literal cast.
23734
23735 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
23736
23737         * cs-parser.jay (for_statement): Reworked the way For works: now
23738         we declare manually any variables that are introduced in
23739         for_initializer to solve the problem of having out-of-band code
23740         emition (that is what got for broken).
23741
23742         (declaration_statement): Perform the actual variable declaration
23743         that used to be done in local_variable_declaration here.
23744
23745         (local_variable_declaration): Do not declare anything, just pass
23746         the information on a DictionaryEntry
23747
23748 2001-11-20  Ravi Pratap  <ravi@ximian.com>
23749
23750         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
23751         re-write of the logic to now make it recursive.
23752
23753         (UpdateIndices): Re-write accordingly.
23754
23755         Store element data in a separate ArrayData list in the above methods.
23756
23757         (MakeByteBlob): Implement to dump the array data into a byte array.
23758
23759 2001-11-19  Ravi Pratap  <ravi@ximian.com>
23760
23761         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
23762         into CheckIndices.
23763
23764         * constant.cs (Define): Implement.
23765
23766         (EmitConstant): Re-write fully.
23767
23768         Pass in location info.
23769
23770         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
23771         respectively.
23772
23773         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
23774         DictionaryEntry since we need location info too.
23775
23776         (constant_declaration): Update accordingly.
23777
23778         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
23779         code into another method : UpdateIndices.
23780
23781 2001-11-18  Ravi Pratap  <ravi@ximian.com>
23782
23783         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
23784         some type checking etc.
23785
23786 2001-11-17  Ravi Pratap  <ravi@ximian.com>
23787
23788         * expression.cs (ArrayCreation::ValidateInitializers): Implement
23789         bits to provide dimension info if the user skips doing that.
23790
23791         Update second constructor to store the rank correctly.
23792
23793 2001-11-16  Ravi Pratap  <ravi@ximian.com>
23794
23795         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
23796         and try to implement.
23797
23798         * ../errors/cs0150.cs : Add.
23799
23800         * ../errors/cs0178.cs : Add.
23801
23802 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
23803
23804         * statement.cs: Implement foreach on multi-dimensional arrays. 
23805
23806         * parameter.cs (Parameters.GetParameterByName): Also lookup the
23807         name of the params argument.
23808
23809         * expression.cs: Use EmitStoreOpcode to get the right opcode while
23810         initializing the array.
23811
23812         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
23813         we can use this elsewhere.
23814
23815         * statement.cs: Finish implementation of foreach for single
23816         dimension arrays.
23817
23818         * cs-parser.jay: Use an out-of-band stack to pass information
23819         around, I wonder why I need this.
23820
23821         foreach_block: Make the new foreach_block the current_block.
23822
23823         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
23824         function used to return a static Parameters structure.  Used for
23825         empty parameters, as those are created very frequently.
23826
23827         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
23828
23829 2001-11-15  Ravi Pratap  <ravi@ximian.com>
23830
23831         * interface.cs : Default modifier is private, not public. The
23832         make verify test passes again.
23833
23834 2001-11-15  Ravi Pratap  <ravi@ximian.com>
23835
23836         * support.cs (ReflectionParameters): Fix logic to determine
23837         whether the last parameter is a params one. Test 9 passes again.
23838
23839         * delegate.cs (Populate): Register the builders we define with
23840         RegisterParameterForBuilder. Test 19 passes again.
23841
23842         * cs-parser.jay (property_declaration): Reference $6 instead
23843         of $$ to get at the location.
23844
23845         (indexer_declaration): Similar stuff.
23846
23847         (attribute): Ditto.
23848
23849         * class.cs (Property): Register parameters for the Get and Set methods
23850         if they exist. Test 23 passes again.
23851
23852         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
23853         call to EmitArguments as we are sure there aren't any params arguments. 
23854         Test 32 passes again.
23855
23856         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
23857         IndexOutOfRangeException. 
23858
23859         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
23860         Test 33 now passes again.
23861
23862 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
23863
23864         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
23865         broke a bunch of things.  Will have to come up with a better way
23866         of tracking locations.
23867
23868         * statement.cs: Implemented foreach for single dimension arrays.
23869
23870 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
23871
23872         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
23873         an error.  This removes the lookup from the critical path.
23874
23875         * cs-parser.jay: Removed use of temporary_loc, which is completely
23876         broken. 
23877
23878 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
23879
23880         * support.cs (ReflectionParameters.ParameterModifier): Report
23881         whether the argument is a PARAMS argument or not.
23882
23883         * class.cs: Set the attribute `ParamArrayAttribute' on the
23884         parameter argument.
23885
23886         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
23887         and cons_param_array_attribute (ConstructorInfo for
23888         ParamArrayAttribute)., 
23889
23890         * codegen.cs: Emit the return using the `Return' statement, that
23891         way we can report the error correctly for missing return values. 
23892
23893         * class.cs (Method.Emit): Clean up.
23894
23895         * expression.cs (Argument.Resolve): Take another argument: the
23896         location where this argument is used.  Notice that this is not
23897         part of the "Argument" class as to reduce the size of the
23898         structure (we know the approximate location anyways).
23899
23900         Test if the argument is a variable-reference, if not, then
23901         complain with a 206.
23902
23903         (Argument.Emit): Emit addresses of variables.
23904
23905         (Argument.FullDesc): Simplify.
23906
23907         (Invocation.DoResolve): Update for Argument.Resolve.
23908
23909         (ElementAccess.DoResolve): ditto.
23910
23911         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
23912         method should be virtual, as this method is always virtual.
23913
23914         (NewDelegate.DoResolve): Update for Argument.Resolve.
23915
23916         * class.cs (ConstructorInitializer.DoResolve): ditto.
23917
23918         * attribute.cs (Attribute.Resolve): ditto.
23919
23920 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
23921
23922         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
23923
23924         * expression.cs (ParameterReference): Drop IStackStorage and implement
23925         IAssignMethod instead. 
23926
23927         (LocalVariableReference): ditto.
23928
23929         * ecore.cs (FieldExpr): Drop IStackStorage and implement
23930         IAssignMethod instead. 
23931
23932 2001-11-13  Miguel de Icaza <miguel@ximian.com>
23933
23934         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
23935         enumerations that are used in heavily used structures derive from
23936         byte in a laughable and pathetic attempt to reduce memory usage.
23937         This is the kind of pre-optimzations that you should not do at
23938         home without adult supervision.
23939
23940         * expression.cs (UnaryMutator): New class, used to handle ++ and
23941         -- separatedly from the other unary operators.  Cleans up the
23942         code, and kills the ExpressionStatement dependency in Unary.
23943
23944         (Unary): Removed `method' and `Arguments' from this class, making
23945         it smaller, and moving it all to SimpleCall, so I can reuse this
23946         code in other locations and avoid creating a lot of transient data
23947         strucutres when not required.
23948
23949         * cs-parser.jay: Adjust for new changes.
23950
23951 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
23952
23953         * enum.cs (Enum.Populate): If there is a failure during
23954         definition, return
23955
23956         * cs-parser.jay (opt_enum_base): we used to catch type errors
23957         here, but this is really incorrect.  The type error should be
23958         catched during semantic analysis.
23959
23960 2001-12-11  Ravi Pratap  <ravi@ximian.com>
23961
23962         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
23963         current_local_parameters as expected since I, in my stupidity, had forgotten
23964         to do this :-)
23965
23966         * attribute.cs (GetValidPlaces): Fix stupid bug.
23967
23968         * class.cs (Method::Emit): Perform check on applicability of attributes.
23969
23970         (Constructor::Emit): Ditto.
23971
23972         (Field::Emit): Ditto.
23973
23974         (Field.Location): Store location information.
23975
23976         (Property, Event, Indexer, Operator): Ditto.
23977
23978         * cs-parser.jay (field_declaration): Pass in location for each field.
23979
23980         * ../errors/cs0592.cs : Add.
23981
23982 2001-11-12  Ravi Pratap  <ravi@ximian.com>
23983
23984         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
23985
23986         (InitCoreTypes): Update accordingly.
23987
23988         (RegisterAttrType, LookupAttr): Implement.
23989
23990         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
23991         info about the same.
23992
23993         (Resolve): Update to populate the above as necessary.
23994
23995         (Error592): Helper.
23996
23997         (GetValidPlaces): Helper to the above.
23998
23999         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
24000
24001         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
24002
24003 2001-11-12  Ravi Pratap  <ravi@ximian.com>
24004
24005         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
24006
24007         * ../errors/cs0617.cs : Add.
24008
24009 2001-11-11  Ravi Pratap  <ravi@ximian.com>
24010
24011         * enum.cs (Emit): Rename to Populate to be more consistent with what
24012         we expect it to do and when exactly it is called.
24013
24014         * class.cs, rootcontext.cs : Update accordingly.
24015
24016         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
24017         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
24018
24019         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
24020
24021         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
24022         of a fieldinfo using the above, when dealing with a FieldBuilder.
24023
24024 2001-11-10  Ravi Pratap  <ravi@ximian.com>
24025
24026         * ../errors/cs0031.cs : Add.
24027
24028         * ../errors/cs1008.cs : Add.
24029
24030         * ../errrors/cs0543.cs : Add.
24031
24032         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
24033         enum type.
24034
24035         (FindMembers): Implement.
24036
24037         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
24038         enums and delegates too.
24039
24040         (enum_types): Rename to builder_to_enum.
24041
24042         (delegate_types): Rename to builder_to_delegate.
24043
24044         * delegate.cs (FindMembers): Implement.
24045
24046 2001-11-09  Ravi Pratap  <ravi@ximian.com>
24047
24048         * typemanager.cs (IsEnumType): Implement.
24049
24050         * enum.cs (Emit): Re-write parts to account for the underlying type
24051         better and perform checking etc.
24052
24053         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
24054         of the underlying type.
24055
24056         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
24057         value
24058
24059         * enum.cs (error31): Helper to report error #31.
24060
24061         * cs-parser.jay (enum_declaration): Store location of each member too.
24062
24063         * enum.cs (member_to_location): New hashtable. 
24064
24065         (AddEnumMember): Update location hashtable.
24066
24067         (Emit): Use the location of each member while reporting errors.
24068
24069 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
24070
24071         * cs-parser.jay: A for_initializer if is a
24072         local_variable_declaration really ammount to have an implicit
24073         block with the variable declaration and no initializer for for.
24074
24075         * statement.cs (For.Emit): Cope with null initializers.
24076
24077         This fixes the infinite loop on for initializers.
24078
24079 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
24080
24081         * enum.cs: More cleanup.
24082
24083         * ecore.cs: Remove dead code.
24084
24085         * class.cs (Property.Emit): More simplification.
24086         (Event.Emit): ditto.
24087
24088         Reworked to have less levels of indentation.
24089
24090 2001-11-08  Ravi Pratap  <ravi@ximian.com>
24091
24092         * class.cs (Property): Emit attributes.
24093
24094         (Field): Ditto.
24095
24096         (Event): Ditto.
24097
24098         (Indexer): Ditto.
24099
24100         (Operator): Ditto.
24101
24102         * enum.cs (Emit): Ditto.
24103
24104         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
24105         Enums too.
24106
24107         * class.cs (Field, Event, etc.): Move attribute generation into the
24108         Emit method everywhere.
24109
24110         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
24111         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
24112         as we had no way of defining nested enums !
24113
24114         * rootcontext.cs : Adjust code accordingly.
24115
24116         * typemanager.cs (AddEnumType): To keep track of enum types separately.
24117
24118 2001-11-07  Ravi Pratap  <ravi@ximian.com>
24119
24120         * expression.cs (EvalConstantExpression): Move into ecore.cs
24121
24122         * enum.cs (Enum): Rename some members and make them public and readonly
24123         according to our convention.
24124
24125         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
24126         nothing else.
24127
24128         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
24129
24130         (Enum::Emit): Write a simple version for now which doesn't try to compute
24131         expressions. I shall modify this to be more robust in just a while.
24132
24133         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
24134
24135         (TypeContainer::CloseType): Create the Enum types too.
24136
24137         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
24138
24139         * expression.cs (EvalConstantExpression): Get rid of completely.
24140
24141         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
24142         user-defined values and other cases.
24143
24144         (IsValidEnumLiteral): Helper function.
24145
24146         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
24147         out there in the case we had a literal FieldExpr.
24148
24149         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
24150
24151         (Literalize): Revamp a bit to take two arguments.
24152
24153         (EnumLiteral): New class which derives from Literal to wrap enum literals.
24154
24155 2001-11-06  Ravi Pratap  <ravi@ximian.com>
24156
24157         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
24158
24159         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
24160
24161         (Resolve): Use the above to ensure we have proper initializers.
24162
24163 2001-11-05  Ravi Pratap  <ravi@ximian.com>
24164
24165         * expression.cs (Expression::EvalConstantExpression): New method to 
24166         evaluate constant expressions.
24167
24168         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
24169
24170 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
24171
24172         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
24173         in an array.
24174
24175         (Binary.ResolveOperator): Handle operator != (object a, object b)
24176         and operator == (object a, object b);
24177
24178         (Binary.DoNumericPromotions): Indicate whether the numeric
24179         promotion was possible.
24180
24181         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
24182         Implement.  
24183
24184         Made the ArrayAccess implement interface IAssignMethod instead of
24185         IStackStore as the order in which arguments are passed reflects
24186         this.
24187
24188         * assign.cs: Instead of using expr.ExprClass to select the way of
24189         assinging, probe for the IStackStore/IAssignMethod interfaces.
24190
24191         * typemanager.cs: Load InitializeArray definition.
24192
24193         * rootcontext.cs (RootContext.MakeStaticData): Used to define
24194         static data that can be used to initialize arrays. 
24195
24196 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
24197
24198         * expression.cs: Handle operator== and operator!= for booleans.
24199
24200         (Conditioal.Reduce): Implement reducer for the ?: operator.
24201
24202         (Conditional.Resolve): Implement dead code elimination.
24203
24204         (Binary.Resolve): Catch string literals and return a new
24205         concatenated string.
24206
24207         (Unary.Reduce): Implement reduction of unary expressions.
24208
24209         * ecore.cs: Split out the expression core handling here.
24210
24211         (Expression.Reduce): New method used to perform constant folding
24212         and CSE.  This is needed to support constant-expressions. 
24213
24214         * statement.cs (Statement.EmitBoolExpression): Pass true and false
24215         targets, and optimize for !x.
24216
24217 2001-11-04  Ravi Pratap  <ravi@ximian.com>
24218
24219         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
24220         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
24221         set custom atttributes.
24222
24223         * literal.cs (Literal::GetValue): New abstract method to return the actual
24224         value of the literal, cast as an object.
24225
24226         (*Literal): Implement GetValue method.
24227
24228         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
24229         expressions to the arraylist but objects of type Argument.
24230
24231         * class.cs (TypeContainer::Emit): Emit our attributes too.
24232
24233         (Method::Emit, Constructor::Emit): Ditto.
24234
24235         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
24236         to be ignoring earlier.
24237
24238 2001-11-03  Ravi Pratap  <ravi@ximian.com>
24239
24240         * attribute.cs (AttributeSection::Define): Implement to do the business
24241         of constructing a CustomAttributeBuilder.
24242
24243         (Attribute): New trivial class. Increases readability of code.  
24244
24245         * cs-parser.jay : Update accordingly.
24246
24247         (positional_argument_list, named_argument_list, named_argument): New rules
24248
24249         (attribute_arguments): Use the above so that we are more correct.
24250
24251 2001-11-02  Ravi Pratap  <ravi@ximian.com>
24252
24253         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
24254         to perform all checks for a method with a params parameter.
24255
24256         (Invocation::OverloadResolve): Update to use the above method and therefore
24257         cope correctly with params method invocations.
24258
24259         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
24260         params too.
24261
24262         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
24263         constructors in our parent too because we can't afford to miss out on 
24264         protected ones ;-)
24265
24266         * attribute.cs (AttributeSection): New name for the class Attribute
24267
24268         Other trivial changes to improve readability.
24269
24270         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
24271         use the new class names.
24272
24273 2001-11-01  Ravi Pratap  <ravi@ximian.com>
24274
24275         * class.cs (Method::Define): Complete definition for params types too
24276
24277         (Indexer::Define): Ditto.
24278
24279         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
24280         Cope everywhere with a request for info about the array parameter.
24281
24282 2001-11-01  Ravi Pratap  <ravi@ximian.com>
24283
24284         * tree.cs (RecordNamespace): Fix up to check for the correct key.
24285
24286         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
24287         local_variable_type to extract the string corresponding to the type.
24288
24289         (local_variable_type): Fixup the action to use the new helper method.
24290
24291         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
24292         go.
24293
24294         * expression.cs : Clean out code which uses the above.
24295
24296 2001-10-31  Ravi Pratap  <ravi@ximian.com>
24297
24298         * typemanager.cs (RegisterMethod): Check if we already have an existing key
24299         and bale out if necessary by returning a false.
24300
24301         (RegisterProperty): Ditto.
24302
24303         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
24304         and print out appropriate error messages.
24305
24306         * interface.cs (everywhere): Ditto.
24307
24308         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
24309         location to constructor.
24310
24311         * class.cs (Property, Event, Indexer): Update accordingly.
24312
24313         * ../errors/cs111.cs : Added.
24314
24315         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
24316         of a method, as laid down by the spec.
24317
24318         (Invocation::OverloadResolve): Use the above method.
24319
24320 2001-10-31  Ravi Pratap  <ravi@ximian.com>
24321
24322         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
24323         now take a TypeContainer and a Parameters object.
24324
24325         (ParameterData): Modify return type of ParameterModifier method to be 
24326         Parameter.Modifier and not a string.
24327
24328         (ReflectionParameters, InternalParameters): Update accordingly.
24329
24330         * expression.cs (Argument::GetParameterModifier): Same here.
24331
24332         * support.cs (InternalParameters::ParameterType): Find a better way of determining
24333         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
24334         symbol in it at all so maybe this is only for now.
24335
24336 2001-10-30  Ravi Pratap  <ravi@ximian.com>
24337
24338         * support.cs (InternalParameters): Constructor now takes an extra argument 
24339         which is the actual Parameters class.
24340
24341         (ParameterDesc): Update to provide info on ref/out modifiers.
24342
24343         * class.cs (everywhere): Update call to InternalParameters to pass in
24344         the second argument too.
24345
24346         * support.cs (ParameterData): Add ParameterModifier, which is a method 
24347         to return the modifier info [ref/out etc]
24348
24349         (InternalParameters, ReflectionParameters): Implement the above.
24350
24351         * expression.cs (Argument::ParameterModifier): Similar function to return
24352         info about the argument's modifiers.
24353
24354         (Invocation::OverloadResolve): Update to take into account matching modifiers 
24355         too.
24356
24357         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
24358         a new SetFormalParameters object which we pass to InternalParameters.
24359
24360 2001-10-30  Ravi Pratap  <ravi@ximian.com>
24361
24362         * expression.cs (NewArray): Merge into the ArrayCreation class.
24363
24364 2001-10-29  Ravi Pratap  <ravi@ximian.com>
24365
24366         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
24367         NewUserdefinedArray into one as there wasn't much of a use in having
24368         two separate ones.
24369
24370         * expression.cs (Argument): Change field's name to ArgType from Type.
24371
24372         (Type): New readonly property which returns the proper type, taking into 
24373         account ref/out modifiers.
24374
24375         (everywhere): Adjust code accordingly for the above.
24376
24377         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
24378         whether we are emitting for a ref or out parameter.
24379
24380         * expression.cs (Argument::Emit): Use the above field to set the state.
24381
24382         (LocalVariableReference::Emit): Update to honour the flag and emit the
24383         right stuff.
24384
24385         * parameter.cs (Attributes): Set the correct flags for ref parameters.
24386
24387         * expression.cs (Argument::FullDesc): New function to provide a full desc.
24388
24389         * support.cs (ParameterData): Add method ParameterDesc to the interface.
24390
24391         (ReflectionParameters, InternalParameters): Implement the above method.
24392
24393         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
24394         reporting errors.
24395
24396         (Invocation::FullMethodDesc): Ditto. 
24397
24398 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
24399
24400         * cs-parser.jay: Add extra production for the second form of array
24401         creation. 
24402
24403         * expression.cs (ArrayCreation): Update to reflect the above
24404         change. 
24405
24406         * Small changes to prepare for Array initialization.
24407
24408 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
24409
24410         * typemanager.cs (ImplementsInterface): interface might be null;
24411         Deal with this problem;
24412
24413         Also, we do store negative hits on the cache (null values), so use
24414         this instead of calling t.GetInterfaces on the type everytime.
24415
24416 2001-10-28  Ravi Pratap  <ravi@ximian.com>
24417
24418         * typemanager.cs (IsBuiltinType): New method to help determine the same.
24419
24420         * expression.cs (New::DoResolve): Get rid of array creation code and instead
24421         split functionality out into different classes.
24422
24423         (New::FormArrayType): Move into NewBuiltinArray.
24424
24425         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
24426         quite useless.
24427
24428         (NewBuiltinArray): New class to handle creation of built-in arrays.
24429
24430         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
24431         account creation of one-dimensional arrays.
24432
24433         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
24434
24435         (NewUserdefinedArray::DoResolve): Implement.
24436
24437         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
24438
24439         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
24440         we maintain inside the TypeManager. This is necessary to perform lookups on the
24441         module builder.
24442
24443         (LookupType): Update to perform GetType on the module builders too.     
24444
24445         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
24446
24447         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
24448
24449 2001-10-23  Ravi Pratap  <ravi@ximian.com>
24450
24451         * expression.cs (New::DoResolve): Implement guts of array creation.
24452
24453         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
24454
24455 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
24456
24457         * expression.cs: Fix bug I introduced lsat night that broke
24458         Delegates. 
24459
24460         (Expression.Resolve): Report a 246 error (can not resolve name)
24461         if we find a SimpleName in the stream.
24462
24463         (Expression.ResolveLValue): Ditto.
24464
24465         (Expression.ResolveWithSimpleName): This function is a variant of
24466         ResolveName, this one allows SimpleNames to be returned without a
24467         warning.  The only consumer of SimpleNames is MemberAccess
24468
24469 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
24470
24471         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
24472         might arrive here.  I have my doubts that this is correct.
24473
24474         * statement.cs (Lock): Implement lock statement.
24475
24476         * cs-parser.jay: Small fixes to support `lock' and `using'
24477
24478         * cs-tokenizer.cs: Remove extra space
24479
24480         * driver.cs: New flag --checked, allows to turn on integer math
24481         checking. 
24482
24483         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
24484         Threading.Monitor.Exit 
24485
24486 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
24487
24488         * expression.cs (IndexerAccess::DoResolveLValue): Set the
24489         Expression Class to be IndexerAccess.
24490
24491         Notice that Indexer::DoResolve sets the eclass to Value.
24492
24493 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
24494
24495         * class.cs (TypeContainer::Emit): Emit code for indexers.
24496
24497         * assign.cs (IAssignMethod): New interface implemented by Indexers
24498         and Properties for handling assignment.
24499
24500         (Assign::Emit): Simplify and reuse code. 
24501
24502         * expression.cs (IndexerAccess, PropertyExpr): Implement
24503         IAssignMethod, clean up old code. 
24504
24505 2001-10-22  Ravi Pratap  <ravi@ximian.com>
24506
24507         * typemanager.cs (ImplementsInterface): New method to determine if a type
24508         implements a given interface. Provides a nice cache too.
24509
24510         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
24511         method.
24512
24513         (ConvertReferenceExplicit): Ditto.
24514
24515         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
24516         various methods, with correct names etc.
24517
24518         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
24519         Operator.UnaryNegation.
24520
24521         * cs-parser.jay (operator_declarator): Be a little clever in the case where
24522         we have a unary plus or minus operator.
24523
24524         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
24525         UnaryMinus.
24526
24527         * everywhere : update accordingly.
24528
24529         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
24530         respectively.
24531
24532         * class.cs (Method::Define): For the case where we are implementing a method
24533         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
24534         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
24535
24536 2001-10-21  Ravi Pratap  <ravi@ximian.com>
24537
24538         * interface.cs (FindMembers): Implement to work around S.R.E
24539         lameness.
24540
24541         * typemanager.cs (IsInterfaceType): Implement.
24542
24543         (FindMembers): Update to handle interface types too.
24544
24545         * expression.cs (ImplicitReferenceConversion): Re-write bits which
24546         use IsAssignableFrom as that is not correct - it doesn't work.
24547
24548         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
24549         and accordingly override EmitStatement.
24550
24551         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
24552         using the correct logic :-)
24553
24554 2001-10-19  Ravi Pratap  <ravi@ximian.com>
24555
24556         * ../errors/cs-11.cs : Add to demonstrate error -11 
24557
24558 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
24559
24560         * assign.cs (Assign::Resolve): Resolve right hand side first, and
24561         then pass this as a hint to ResolveLValue.
24562
24563         * expression.cs (FieldExpr): Add Location information
24564
24565         (FieldExpr::LValueResolve): Report assignment to readonly
24566         variable. 
24567
24568         (Expression::ExprClassFromMemberInfo): Pass location information.
24569
24570         (Expression::ResolveLValue): Add new method that resolves an
24571         LValue. 
24572
24573         (Expression::DoResolveLValue): Default invocation calls
24574         DoResolve. 
24575
24576         (Indexers): New class used to keep track of indexers in a given
24577         Type. 
24578
24579         (IStackStore): Renamed from LValue, as it did not really describe
24580         what this did.  Also ResolveLValue is gone from this interface and
24581         now is part of Expression.
24582
24583         (ElementAccess): Depending on the element access type
24584
24585         * typemanager.cs: Add `indexer_name_type' as a Core type
24586         (System.Runtime.CompilerServices.IndexerNameAttribute)
24587
24588         * statement.cs (Goto): Take a location.
24589
24590 2001-10-18  Ravi Pratap  <ravi@ximian.com>
24591
24592         * delegate.cs (Delegate::VerifyDelegate): New method to verify
24593         if two delegates are compatible.
24594
24595         (NewDelegate::DoResolve): Update to take care of the case when
24596         we instantiate a delegate from another delegate.
24597
24598         * typemanager.cs (FindMembers): Don't even try to look up members
24599         of Delegate types for now.
24600
24601 2001-10-18  Ravi Pratap  <ravi@ximian.com>
24602
24603         * delegate.cs (NewDelegate): New class to take care of delegate
24604         instantiation.
24605
24606         * expression.cs (New): Split the delegate related code out into 
24607         the NewDelegate class.
24608
24609         * delegate.cs (DelegateInvocation): New class to handle delegate 
24610         invocation.
24611
24612         * expression.cs (Invocation): Split out delegate related code into
24613         the DelegateInvocation class.
24614
24615 2001-10-17  Ravi Pratap  <ravi@ximian.com>
24616
24617         * expression.cs (New::DoResolve): Implement delegate creation fully
24618         and according to the spec.
24619
24620         (New::DoEmit): Update to handle delegates differently.
24621
24622         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
24623         because of which we were printing out arguments in reverse order !
24624
24625         * delegate.cs (VerifyMethod): Implement to check if the given method
24626         matches the delegate.
24627
24628         (FullDelegateDesc): Implement.
24629
24630         (VerifyApplicability): Implement.
24631
24632         * expression.cs (Invocation::DoResolve): Update to accordingly handle
24633         delegate invocations too.
24634
24635         (Invocation::Emit): Ditto.
24636
24637         * ../errors/cs1593.cs : Added.
24638
24639         * ../errors/cs1594.cs : Added.
24640
24641         * delegate.cs (InstanceExpression, TargetMethod): New properties.
24642
24643 2001-10-16  Ravi Pratap  <ravi@ximian.com>
24644
24645         * typemanager.cs (intptr_type): Core type for System.IntPtr
24646
24647         (InitCoreTypes): Update for the same.
24648
24649         (iasyncresult_type, asynccallback_type): Ditto.
24650
24651         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
24652         correct.
24653
24654         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
24655         too.
24656
24657         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
24658         the builders for the 4 members of a delegate type :-)
24659
24660         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
24661         type.
24662
24663         * expression.cs (New::DoResolve): Implement guts for delegate creation.
24664
24665         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
24666
24667 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
24668
24669         * statement.cs (Break::Emit): Implement.   
24670         (Continue::Emit): Implement.
24671
24672         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24673         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24674         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24675         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
24676         end loop
24677
24678         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
24679         properties that track the label for the current loop (begin of the
24680         loop and end of the loop).
24681
24682 2001-10-15  Ravi Pratap  <ravi@ximian.com>
24683
24684         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
24685         use of emitting anything at all.
24686
24687         * class.cs, rootcontext.cs : Get rid of calls to the same.
24688
24689         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
24690
24691         (Populate): Define the constructor correctly and set the implementation
24692         attributes.
24693
24694         * typemanager.cs (delegate_types): New hashtable to hold delegates that
24695         have been defined.
24696
24697         (AddDelegateType): Implement.
24698
24699         (IsDelegateType): Implement helper method.
24700
24701         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
24702
24703         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
24704         and accordingly handle it.
24705
24706         * delegate.cs (Populate): Take TypeContainer argument.
24707         Implement bits to define the Invoke method. However, I still haven't figured out
24708         how to take care of the native int bit :-(
24709
24710         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
24711         Qualify the name of the delegate, not its return type !
24712
24713         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
24714         conversion.
24715
24716         (StandardConversionExists): Checking for array types turns out to be recursive.
24717
24718         (ConvertReferenceExplicit): Implement array conversion.
24719
24720         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
24721
24722 2001-10-12  Ravi Pratap  <ravi@ximian.com>
24723
24724         * cs-parser.jay (delegate_declaration): Store the fully qualified
24725         name as it is a type declaration.
24726
24727         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
24728         readonly.
24729
24730         (DefineDelegate): Renamed from Define. Does the same thing essentially,
24731         as TypeContainer::DefineType.
24732
24733         (Populate): Method in which all the definition of the various methods (Invoke)
24734         etc is done.
24735
24736         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
24737         see.
24738
24739         (CloseDelegate): Finally creates the delegate.
24740
24741         * class.cs (TypeContainer::DefineType): Update to define delegates.
24742         (Populate, Emit and CloseType): Do the same thing here too.
24743
24744         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
24745         delegates in all these operations.
24746
24747 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
24748
24749         * expression.cs: LocalTemporary: a new expression used to
24750         reference a temporary that has been created.
24751
24752         * assign.cs: Handle PropertyAccess back here, so that we can
24753         provide the proper semantic access to properties.
24754
24755         * expression.cs (Expression::ConvertReferenceExplicit): Implement
24756         a few more explicit conversions. 
24757
24758         * modifiers.cs: `NEW' modifier maps to HideBySig.
24759
24760         * expression.cs (PropertyExpr): Make this into an
24761         ExpressionStatement, and support the EmitStatement code path. 
24762
24763         Perform get/set error checking, clean up the interface.
24764
24765         * assign.cs: recognize PropertyExprs as targets, and if so, turn
24766         them into toplevel access objects.
24767
24768 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
24769
24770         * expression.cs: PropertyExpr::PropertyExpr: use work around the
24771         SRE.
24772
24773         * typemanager.cs: Keep track here of our PropertyBuilders again to
24774         work around lameness in SRE.
24775
24776 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
24777
24778         * expression.cs (LValue::LValueResolve): New method in the
24779         interface, used to perform a second resolution pass for LValues. 
24780
24781         (This::DoResolve): Catch the use of this in static methods.
24782
24783         (This::LValueResolve): Implement.
24784
24785         (This::Store): Remove warning, assigning to `this' in structures
24786         is 
24787
24788         (Invocation::Emit): Deal with invocation of
24789         methods on value types.  We need to pass the address to structure
24790         methods rather than the object itself.  (The equivalent code to
24791         emit "this" for structures leaves the entire structure on the
24792         stack instead of a pointer to it). 
24793
24794         (ParameterReference::DoResolve): Compute the real index for the
24795         argument based on whether the method takes or not a `this' pointer
24796         (ie, the method is static).
24797
24798         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
24799         value types returned from functions when we need to invoke a
24800         method on the sturcture.
24801
24802
24803 2001-10-11  Ravi Pratap  <ravi@ximian.com>
24804
24805         * class.cs (TypeContainer::DefineType): Method to actually do the business of
24806         defining the type in the Modulebuilder or Typebuilder. This is to take
24807         care of nested types which need to be defined on the TypeBuilder using
24808         DefineNestedMethod.
24809
24810         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
24811         methods in RootContext, only ported to be part of TypeContainer.
24812
24813         (TypeContainer::GetInterfaceOrClass): Ditto.
24814
24815         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
24816
24817         * interface.cs (Interface::DefineInterface): New method. Does exactly
24818         what RootContext.CreateInterface did earlier, only it takes care of nested types 
24819         too.
24820
24821         (Interface::GetInterfaces): Move from RootContext here and port.
24822
24823         (Interface::GetInterfaceByName): Same here.
24824
24825         * rootcontext.cs (ResolveTree): Re-write.
24826
24827         (PopulateTypes): Re-write.
24828
24829         * class.cs (TypeContainer::Populate): Populate nested types too.
24830         (TypeContainer::Emit): Emit nested members too.
24831
24832         * typemanager.cs (AddUserType): Do not make use of the FullName property,
24833         instead just use the name argument passed in as it is already fully
24834         qualified.
24835
24836         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
24837         to TypeContainer mapping to see if a type is user-defined.
24838
24839         * class.cs (TypeContainer::CloseType): Implement. 
24840
24841         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
24842         the default constructor.
24843
24844         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
24845         twice.
24846
24847         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
24848
24849         * interface.cs (CloseType): Create the type here.
24850
24851         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
24852         the hierarchy.
24853
24854         Remove all the methods which are now in TypeContainer.
24855
24856 2001-10-10  Ravi Pratap  <ravi@ximian.com>
24857
24858         * delegate.cs (Define): Re-write bits to define the delegate
24859         correctly.
24860
24861 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
24862
24863         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
24864
24865         * expression.cs (ImplicitReferenceConversion): handle null as well
24866         as a source to convert to any reference type.
24867
24868         * statement.cs (Return): Perform any implicit conversions to
24869         expected return type.  
24870
24871         Validate use of return statement.  
24872
24873         * codegen.cs (EmitContext): Pass the expected return type here.
24874
24875         * class.cs (Method, Constructor, Property): Pass expected return
24876         type to EmitContext.
24877
24878 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
24879
24880         * expression.cs: Make DoResolve take an EmitContext instead of a
24881         TypeContainer.
24882
24883         Replaced `l' and `location' for `loc', for consistency.
24884
24885         (Error, Warning): Remove unneeded Tc argument.
24886
24887         * assign.cs, literal.cs, constant.cs: Update to new calling
24888         convention. 
24889
24890         * codegen.cs: EmitContext now contains a flag indicating whether
24891         code is being generated in a static method or not.
24892
24893         * cs-parser.jay: DecomposeQI, new function that replaces the old
24894         QualifiedIdentifier.  Now we always decompose the assembled
24895         strings from qualified_identifier productions into a group of
24896         memberaccesses.
24897
24898 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
24899
24900         * rootcontext.cs: Deal with field-less struct types correctly now
24901         by passing the size option to Define Type.
24902
24903         * class.cs: Removed hack that created one static field. 
24904
24905 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
24906
24907         * statement.cs: Moved most of the code generation here. 
24908
24909 2001-10-09  Ravi Pratap  <ravi@ximian.com>
24910
24911         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
24912         seem very right.
24913
24914         (ElementAccess): Remove useless bits for now - keep checks as the spec
24915         says.
24916
24917 2001-10-08  Ravi Pratap  <ravi@ximian.com>
24918
24919         * expression.cs (ElementAccess::DoResolve): Remove my crap code
24920         and start performing checks according to the spec.
24921
24922 2001-10-07  Ravi Pratap  <ravi@ximian.com>
24923
24924         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
24925         rank_specifiers instead.
24926
24927         (rank_specifiers): Change the order in which the rank specifiers are stored
24928
24929         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
24930
24931         * expression.cs (ElementAccess): Implement the LValue interface too.
24932
24933 2001-10-06  Ravi Pratap  <ravi@ximian.com>
24934
24935         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
24936         except that user defined conversions are not included.
24937
24938         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
24939         perform the conversion of the return type, if necessary.
24940
24941         (New::DoResolve): Check whether we are creating an array or an object
24942         and accordingly do the needful.
24943
24944         (New::Emit): Same here.
24945
24946         (New::DoResolve): Implement guts of array creation.
24947
24948         (New::FormLookupType): Helper function.
24949
24950 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
24951
24952         * codegen.cs: Removed most of the code generation here, and move the
24953         corresponding code generation bits to the statement classes. 
24954
24955         Added support for try/catch/finalize and throw.
24956
24957         * cs-parser.jay: Added support for try/catch/finalize.
24958
24959         * class.cs: Catch static methods having the flags override,
24960         virtual or abstract.
24961
24962         * expression.cs (UserCast): This user cast was not really doing
24963         what it was supposed to do.  Which is to be born in fully resolved
24964         state.  Parts of the resolution were being performed at Emit time! 
24965
24966         Fixed this code.
24967
24968 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
24969
24970         * expression.cs: Implicity convert the result from UserCast.
24971
24972 2001-10-05  Ravi Pratap  <ravi@ximian.com>
24973
24974         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
24975         prevented it from working correctly. 
24976
24977         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
24978         merely ConvertImplicit.
24979
24980 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
24981
24982         * typemanager.cs: Make the LookupTypeContainer function static,
24983         and not per-instance.  
24984
24985         * class.cs: Make static FindMembers (the one that takes a Type
24986         argument). 
24987
24988         * codegen.cs: Add EmitForeach here.
24989
24990         * cs-parser.jay: Make foreach a toplevel object instead of the
24991         inline expansion, as we need to perform semantic analysis on it. 
24992
24993 2001-10-05  Ravi Pratap  <ravi@ximian.com>
24994
24995         * expression.cs (Expression::ImplicitUserConversion): Rename to
24996         UserDefinedConversion.
24997
24998         (Expression::UserDefinedConversion): Take an extra argument specifying 
24999         whether we look for explicit user conversions too.
25000
25001         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
25002
25003         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
25004
25005         (ExplicitUserConversion): Make it a call to UserDefinedConversion
25006         with the appropriate arguments.
25007
25008         * cs-parser.jay (cast_expression): Record location too.
25009
25010         * expression.cs (Cast): Record location info.
25011
25012         (Expression::ConvertExplicit): Take location argument.
25013
25014         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
25015         to determine if we are doing explicit conversions.
25016
25017         (UserCast::Emit): Update accordingly.
25018
25019         (Expression::ConvertExplicit): Report an error if everything fails.
25020
25021         * ../errors/cs0030.cs : Add.
25022
25023 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
25024
25025         * modifiers.cs: If the ABSTRACT keyword is present, also set the
25026         virtual and newslot bits. 
25027
25028         * class.cs (TypeContainer::RegisterRequiredImplementations):
25029         Record methods we need.
25030
25031         (TypeContainer::MakeKey): Helper function to make keys for
25032         MethodBases, since the Methodbase key is useless.
25033
25034         (TypeContainer::Populate): Call RegisterRequiredImplementations
25035         before defining the methods.   
25036
25037         Create a mapping for method_builders_to_methods ahead of time
25038         instead of inside a tight loop.
25039
25040         (::RequireMethods):  Accept an object as the data to set into the
25041         hashtable so we can report interface vs abstract method mismatch.
25042
25043 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
25044
25045         * report.cs: Make all of it static.
25046
25047         * rootcontext.cs: Drop object_type and value_type computations, as
25048         we have those in the TypeManager anyways.
25049
25050         Drop report instance variable too, now it is a global.
25051
25052         * driver.cs: Use try/catch on command line handling.
25053
25054         Add --probe option to debug the error reporting system with a test
25055         suite. 
25056
25057         * report.cs: Add support for exiting program when a probe
25058         condition is reached.
25059
25060 2001-10-03  Ravi Pratap  <ravi@ximian.com>
25061
25062         * expression.cs (Binary::DoNumericPromotions): Fix the case when
25063         we do a forcible conversion regardless of type, to check if 
25064         ForceConversion returns a null.
25065
25066         (Binary::error19): Use location to report error.
25067
25068         (Unary::error23): Use location here too.
25069
25070         * ../errors/cs0019.cs : Check in.
25071
25072         * ../errors/cs0023.cs : Check in.
25073
25074         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
25075         case of a non-null MethodInfo object with a length of 0 !
25076
25077         (Binary::ResolveOperator): Flag error if overload resolution fails to find
25078         an applicable member - according to the spec :-)
25079         Also fix logic to find members in base types.
25080
25081         (Unary::ResolveOperator): Same here.
25082
25083         (Unary::report23): Change name to error23 and make first argument a TypeContainer
25084         as I was getting thoroughly confused between this and error19 :-)
25085
25086         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
25087         (::FindMostEncompassedType): Implement.
25088         (::FindMostEncompassingType): Implement.
25089         (::StandardConversionExists): Implement.
25090
25091         (UserImplicitCast): Re-vamp. We now need info about most specific
25092         source and target types so that we can do the necessary conversions.
25093
25094         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
25095         mathematical union with no duplicates.
25096
25097 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
25098
25099         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
25100         in order from base classes to child classes, so that we can in
25101         child classes look up in our parent for method names and
25102         attributes (required for handling abstract, virtual, new, override
25103         constructs: we need to instrospect our base class, and if we dont
25104         populate the classes in order, the introspection might be
25105         incorrect.  For example, a method could query its parent before
25106         the parent has any methods and would determine that the parent has
25107         no abstract methods (while it could have had them)).
25108
25109         (RootContext::CreateType): Record the order in which we define the
25110         classes.
25111
25112 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
25113
25114         * class.cs (TypeContainer::Populate): Also method definitions can
25115         fail now, keep track of this.
25116
25117         (TypeContainer::FindMembers): Implement support for
25118         DeclaredOnly/noDeclaredOnly flag.
25119
25120         (Constructor::Emit) Return the ConstructorBuilder.
25121
25122         (Method::Emit) Return the MethodBuilder. 
25123         Check for abstract or virtual methods to be public.
25124
25125         * rootcontext.cs (RootContext::CreateType): Register all the
25126         abstract methods required for the class to be complete and the
25127         interface methods that must be implemented. 
25128
25129         * cs-parser.jay: Report error 501 (method requires body if it is
25130         not marked abstract or extern).
25131
25132         * expression.cs (TypeOf::Emit): Implement.
25133
25134         * typemanager.cs: runtime_handle_type, new global type.
25135
25136         * class.cs (Property::Emit): Generate code for properties.
25137
25138 2001-10-02  Ravi Pratap  <ravi@ximian.com>
25139
25140         * expression.cs (Unary::ResolveOperator): Find operators on base type
25141         too - we now conform exactly to the spec.
25142
25143         (Binary::ResolveOperator): Same here.
25144
25145         * class.cs (Operator::Define): Fix minor quirk in the tests.
25146
25147         * ../errors/cs0215.cs : Added.
25148
25149         * ../errors/cs0556.cs : Added.
25150
25151         * ../errors/cs0555.cs : Added.
25152
25153 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
25154
25155         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
25156         single integer which is really efficient
25157
25158 2001-10-01  Ravi Pratap  <ravi@ximian.com>
25159
25160         *  expression.cs (Expression::ImplicitUserConversion): Use location
25161         even in the case when we are examining True operators.
25162  
25163         * class.cs (Operator::Define): Perform extensive checks to conform
25164         with the rules for operator overloading in the spec.
25165
25166         * expression.cs (Expression::ImplicitReferenceConversion): Implement
25167         some of the other conversions mentioned in the spec.
25168
25169         * typemanager.cs (array_type): New static member for the System.Array built-in
25170         type.
25171
25172         (cloneable_interface): For System.ICloneable interface.
25173
25174         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
25175         we start resolving the tree and populating types.
25176
25177         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
25178  
25179 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
25180
25181         * expression.cs (Expression::ExprClassFromMemberInfo,
25182         Expression::Literalize): Create literal expressions from
25183         FieldInfos which are literals.
25184
25185         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
25186         type casts, because they were wrong.  The test suite in tests
25187         caught these ones.
25188
25189         (ImplicitNumericConversion): ushort to ulong requires a widening
25190         cast. 
25191
25192         Int32 constant to long requires widening cast as well.
25193
25194         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
25195         for integers because the type on the stack is not i4.
25196
25197 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
25198
25199         * expression.cs (report118): require location argument. 
25200
25201         * parameter.cs: Do not dereference potential null value.
25202
25203         * class.cs: Catch methods that lack the `new' keyword when
25204         overriding a name.  Report warnings when `new' is used without
25205         anything being there to override.
25206
25207         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
25208
25209         * class.cs: Only add constructor to hashtable if it is non-null
25210         (as now constructors can fail on define).
25211
25212         (TypeManager, Class, Struct): Take location arguments.
25213
25214         Catch field instance initialization in structs as errors.
25215
25216         accepting_filter: a new filter for FindMembers that is static so
25217         that we dont create an instance per invocation.
25218
25219         (Constructor::Define): Catch errors where a struct constructor is
25220         parameterless 
25221
25222         * cs-parser.jay: Pass location information for various new
25223         constructs. 
25224
25225         * delegate.cs (Delegate): take a location argument.
25226
25227         * driver.cs: Do not call EmitCode if there were problesm in the
25228         Definition of the types, as many Builders wont be there. 
25229
25230         * decl.cs (Decl::Decl): Require a location argument.
25231
25232         * cs-tokenizer.cs: Handle properly hex constants that can not fit
25233         into integers, and find the most appropiate integer for it.
25234
25235         * literal.cs: Implement ULongLiteral.
25236
25237         * rootcontext.cs: Provide better information about the location of
25238         failure when CreateType fails.
25239
25240 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
25241
25242         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
25243         as well.
25244
25245         * expression.cs (Binary::CheckShiftArguments): Add missing type
25246         computation.
25247         (Binary::ResolveOperator): Add type to the logical and and logical
25248         or, Bitwise And/Or and Exclusive Or code paths, it was missing
25249         before.
25250
25251         (Binary::DoNumericPromotions): In the case where either argument
25252         is ulong (and most signed types combined with ulong cause an
25253         error) perform implicit integer constant conversions as well.
25254
25255 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
25256
25257         * expression.cs (UserImplicitCast): Method should always be
25258         non-null. 
25259         (Invocation::BetterConversion): Simplified test for IntLiteral.
25260
25261         (Expression::ImplicitNumericConversion): Split this routine out.
25262         Put the code that performs implicit constant integer conversions
25263         here. 
25264
25265         (Expression::Resolve): Become a wrapper around DoResolve so we can
25266         check eclass and type being set after resolve.
25267
25268         (Invocation::Badness): Remove this dead function
25269
25270         (Binary::ResolveOperator): Do not compute the expensive argumnets
25271         unless we have a union for it.
25272
25273         (Probe::Emit): Is needs to do an isinst and then
25274         compare against null.
25275
25276         (::CanConvert): Added Location argument.  If the Location argument
25277         is null (Location.Null), then we do not report errors.  This is
25278         used by the `probe' mechanism of the Explicit conversion.  We do
25279         not want to generate an error for something that the user
25280         explicitly requested to be casted.  But the pipeline for an
25281         explicit cast first tests for potential implicit casts.
25282
25283         So for now, if the Location is null, it means `Probe only' to
25284         avoid adding another argument.   Might have to revise this
25285         strategy later.
25286
25287         (ClassCast): New class used to type cast objects into arbitrary
25288         classes (used in Explicit Reference Conversions).
25289
25290         Implement `as' as well.
25291
25292         Reverted all the patches from Ravi below: they were broken:
25293
25294                 * The use of `level' as a mechanism to stop recursive
25295                   invocations is wrong.  That was there just to catch the
25296                   bug with a strack trace but not as a way of addressing
25297                   the problem.
25298
25299                   To fix the problem we have to *understand* what is going
25300                   on and the interactions and come up with a plan, not
25301                   just get things going.
25302
25303                 * The use of the type conversion cache that I proposed
25304                   last night had an open topic: How does this work across
25305                   protection domains.  A user defined conversion might not
25306                   be public in the location where we are applying the
25307                   conversion, a different conversion might be selected
25308                   (ie, private A->B (better) but public B->A (worse),
25309                   inside A, A->B applies, but outside it, B->A will
25310                   apply).
25311
25312                 * On top of that (ie, even if the above is solved),
25313                   conversions in a cache need to be abstract.  Ie, `To
25314                   convert from an Int to a Short use an OpcodeCast', not
25315                   `To convert from an Int to a Short use the OpcodeCast on
25316                   the variable 5' (which is what this patch was doing).
25317
25318 2001-09-28  Ravi Pratap  <ravi@ximian.com>
25319
25320         * expression.cs (Invocation::ConversionExists): Re-write to use
25321         the conversion cache
25322
25323         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
25324         cache all conversions done, not just user-defined ones.
25325
25326         (Invocation::BetterConversion): The real culprit. Use ConversionExists
25327         to determine if a conversion exists instead of acutually trying to 
25328         perform the conversion. It's faster too.
25329
25330         (Expression::ConvertExplicit): Modify to use ConversionExists to check
25331         and only then attempt the implicit conversion.
25332
25333 2001-09-28  Ravi Pratap  <ravi@ximian.com>
25334
25335         * expression.cs (ConvertImplicit): Use a cache for conversions
25336         already found. Check level of recursion and bail out if necessary.
25337
25338 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
25339
25340         * typemanager.cs (string_concat_string_string, string_concat_object_object):
25341         Export standard methods that we expect for string operations.
25342
25343         * statement.cs (Block::UsageWarning): Track usage of variables and
25344         report the errors for not used variables.
25345
25346         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
25347         operator. 
25348
25349 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
25350
25351         * codegen.cs: remove unnneded code 
25352
25353         * expression.cs: Removed BuiltinTypeAccess class
25354
25355         Fix the order in which implicit conversions are
25356         done.  
25357
25358         The previous fixed dropped support for boxed conversions (adding a
25359         test to the test suite now)
25360
25361         (UserImplicitCast::CanConvert): Remove test for source being null,
25362         that code is broken.  We should not feed a null to begin with, if
25363         we do, then we should track the bug where the problem originates
25364         and not try to cover it up here.
25365
25366         Return a resolved expression of type UserImplicitCast on success
25367         rather than true/false.  Ravi: this is what I was talking about,
25368         the pattern is to use a static method as a "constructor" for
25369         objects. 
25370
25371         Also, do not create arguments until the very last minute,
25372         otherwise we always create the arguments even for lookups that
25373         will never be performed. 
25374
25375         (UserImplicitCast::Resolve): Eliminate, objects of type
25376         UserImplicitCast are born in a fully resolved state. 
25377
25378         * typemanager.cs (InitCoreTypes): Init also value_type
25379         (System.ValueType). 
25380
25381         * expression.cs (Cast::Resolve): First resolve the child expression.
25382
25383         (LValue): Add new method AddressOf to be used by
25384         the `&' operator.  
25385
25386         Change the argument of Store to take an EmitContext instead of an
25387         ILGenerator, because things like FieldExpr need to be able to call
25388         their children expression to generate the instance code. 
25389
25390         (Expression::Error, Expression::Warning): Sugar functions for
25391         reporting errors.
25392
25393         (Expression::MemberLookup): Accept a TypeContainer instead of a
25394         Report as the first argument.
25395
25396         (Expression::ResolvePrimary): Killed.  I still want to improve
25397         this as currently the code is just not right.
25398
25399         (Expression::ResolveMemberAccess): Simplify, but it is still
25400         wrong. 
25401
25402         (Unary::Resolve): Catch errors in AddressOf operators.
25403
25404         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
25405         index to a byte for the short-version, or the compiler will choose
25406         the wrong Emit call, which generates the wrong data.
25407
25408         (ParameterReference::Emit, ::Store): same.
25409
25410         (FieldExpr::AddressOf): Implement.
25411
25412         * typemanager.cs: TypeManager: made public variable instead of
25413         property.
25414
25415         * driver.cs: document --fatal.
25416
25417         * report.cs (ErrorMessage, WarningMessage): new names for the old
25418         Error and Warning classes.
25419
25420         * cs-parser.jay (member_access): Turn built-in access to types
25421         into a normal simplename
25422
25423 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25424
25425         * expression.cs (Invocation::BetterConversion): Fix to cope
25426         with q being null, since this was introducing a bug.
25427
25428         * expression.cs (ConvertImplicit): Do built-in conversions first.
25429
25430 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25431
25432         * expression.cs (UserImplicitCast::Resolve): Fix bug.
25433
25434 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25435
25436         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
25437         I had introduced long ago (what's new ?).
25438
25439         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
25440         the work of all the checking. 
25441         (ConvertImplicit): Call CanConvert and only then create object if necessary.
25442         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
25443
25444         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
25445         that is the right way. 
25446
25447         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
25448         overloading resolution. Use everywhere instead of cutting and pasting code.
25449
25450         (Binary::ResolveOperator): Use MakeUnionSet.
25451
25452         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
25453         we have to convert to bool types. Not complete yet.
25454
25455 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
25456
25457         * typemanager.cs (TypeManager::CSharpName): support ushort.
25458
25459         * expression.cs (Expression::TryImplicitIntConversion): Attempts
25460         to provide an expression that performsn an implicit constant int
25461         conversion (section 6.1.6).
25462         (Expression::ConvertImplicitRequired): Reworked to include
25463         implicit constant expression conversions.
25464
25465         (Expression::ConvertNumericExplicit): Finished.
25466
25467         (Invocation::Emit): If InstanceExpression is null, then it means
25468         that we perform a call on this.
25469
25470 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
25471
25472         * expression.cs (Unary::Emit): Remove some dead code.
25473         (Probe): Implement Resolve and Emit for `is'.
25474         (Expression::ConvertImplicitRequired): Attempt to do constant
25475         expression conversions here.  Maybe should be moved to
25476         ConvertImplicit, but I am not sure.
25477         (Expression::ImplicitLongConstantConversionPossible,
25478         Expression::ImplicitIntConstantConversionPossible): New functions
25479         that tell whether is it possible to apply an implicit constant
25480         expression conversion.
25481
25482         (ConvertNumericExplicit): Started work on explicit numeric
25483         conversions.
25484
25485         * cs-parser.jay: Update operator constants.
25486
25487         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
25488         (Parameters::GetSignature): Hook up VerifyArgs here.
25489         (Parameters::VerifyArgs): Verifies that no two arguments have the
25490         same name. 
25491
25492         * class.cs (Operator): Update the operator names to reflect the
25493         ones that the spec expects (as we are just stringizing the
25494         operator names).
25495
25496         * expression.cs (Unary::ResolveOperator): Fix bug: Use
25497         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
25498         previous usage did only work for our methods.
25499         (Expression::ConvertImplicit): Handle decimal implicit numeric
25500         conversions as well.
25501         (Expression::InternalTypeConstructor): Used to invoke constructors
25502         on internal types for default promotions.
25503
25504         (Unary::Emit): Implement special handling for the pre/post
25505         increment/decrement for overloaded operators, as they need to have
25506         the same semantics as the other operators.
25507
25508         (Binary::ResolveOperator): ditto.
25509         (Invocation::ConversionExists): ditto.
25510         (UserImplicitCast::Resolve): ditto.
25511
25512 2001-09-26  Ravi Pratap  <ravi@ximian.com>
25513
25514         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
25515         operator, return after emitting body. Regression tests pass again !
25516
25517         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
25518         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
25519         (Invocation::OverloadResolve): Ditto.
25520         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
25521
25522         * everywhere : update calls to the above methods accordingly.
25523
25524 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
25525
25526         * assign.cs (Assign): Make it inherit from ExpressionStatement.
25527
25528         * expression.cs (ExpressionStatement): New base class used for
25529         expressions that can appear in statements, so that we can provide
25530         an alternate path to generate expression that do not leave a value
25531         on the stack.
25532
25533         (Expression::Emit, and all the derivatives): We no longer return
25534         whether a value is left on the stack or not.  Every expression
25535         after being emitted leaves a single value on the stack.
25536
25537         * codegen.cs (EmitContext::EmitStatementExpression): Use the
25538         facilties of ExpressionStatement if possible.
25539
25540         * cs-parser.jay: Update statement_expression.
25541
25542 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
25543
25544         * driver.cs: Change the wording of message
25545
25546 2001-09-25  Ravi Pratap  <ravi@ximian.com>
25547
25548         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
25549         the type of the expression to the return type of the method if
25550         we have an overloaded operator match ! The regression tests pass again !
25551         (Unary::ResolveOperator): Ditto.
25552
25553         * expression.cs (Invocation::ConversionExists): Correct the member lookup
25554         to find "op_Implicit", not "implicit" ;-)
25555         (UserImplicitCast): New class to take care of user-defined implicit conversions.
25556         (ConvertImplicit, ForceConversion): Take TypeContainer argument
25557
25558         * everywhere : Correct calls to the above accordingly.
25559
25560         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
25561         (ConvertImplicit): Do user-defined conversion if it exists.
25562
25563 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
25564
25565         * assign.cs: track location.
25566         (Resolve): Use implicit conversions on assignment.
25567
25568         * literal.cs: Oops.  Not good, Emit of short access values should
25569         pass (Bytes) or the wrong argument will be selected.
25570
25571         * expression.cs (Unary::Emit): Emit code for -expr.
25572
25573         (Unary::ResolveOperator): Handle `Substract' for non-constants
25574         (substract from zero from the non-constants).
25575         Deal with Doubles as well. 
25576
25577         (Expression::ConvertImplicitRequired): New routine that reports an
25578         error if no implicit conversion exists. 
25579
25580         (Invocation::OverloadResolve): Store the converted implicit
25581         expressions if we make them
25582
25583 2001-09-24  Ravi Pratap  <ravi@ximian.com>
25584
25585         * class.cs (ConstructorInitializer): Take a Location argument.
25586         (ConstructorBaseInitializer): Same here.
25587         (ConstructorThisInitializer): Same here.
25588
25589         * cs-parser.jay : Update all calls accordingly.
25590
25591         * expression.cs (Unary, Binary, New): Take location argument.
25592         Update accordingly everywhere.
25593
25594         * cs-parser.jay : Update all calls to the above to take a location
25595         argument.
25596
25597         * class.cs : Ditto.
25598
25599 2001-09-24  Ravi Pratap  <ravi@ximian.com>
25600
25601         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
25602         (Invocation::BetterConversion): Same here
25603         (Invocation::ConversionExists): Ditto.
25604
25605         (Invocation::ConversionExists): Implement.
25606
25607 2001-09-22  Ravi Pratap  <ravi@ximian.com>
25608
25609         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
25610         Also take an additional TypeContainer argument.
25611
25612         * All over : Pass in TypeContainer as argument to OverloadResolve.
25613
25614         * typemanager.cs (CSharpName): Update to check for the string type and return
25615         that too.
25616
25617         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
25618         a given method.
25619
25620 2001-09-21  Ravi Pratap  <ravi@ximian.com>
25621
25622         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
25623         (Invocation::BetterFunction): Implement.
25624         (Invocation::BetterConversion): Implement.
25625         (Invocation::ConversionExists): Skeleton, no implementation yet.
25626
25627         Okay, things work fine !
25628
25629 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
25630
25631         * typemanager.cs: declare and load enum_type, delegate_type and
25632         void_type. 
25633
25634         * expression.cs (Expression::Emit): Now emit returns a value that
25635         tells whether a value is left on the stack or not.  This strategy
25636         might be reveted tomorrow with a mechanism that would address
25637         multiple assignments.
25638         (Expression::report118): Utility routine to report mismatches on
25639         the ExprClass.
25640
25641         (Unary::Report23): Report impossible type/operator combination
25642         utility function.
25643
25644         (Unary::IsIncrementableNumber): Whether the type can be
25645         incremented or decremented with add.
25646         (Unary::ResolveOperator): Also allow enumerations to be bitwise
25647         complemented. 
25648         (Unary::ResolveOperator): Implement ++, !, ~,
25649
25650         (Invocation::Emit): Deal with new Emit convetion.
25651
25652         * All Expression derivatives: Updated their Emit method to return
25653         whether they leave values on the stack or not.
25654
25655         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
25656         stack for expressions that are statements. 
25657
25658 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
25659
25660         * expression.cs (LValue): New interface.  Must be implemented by
25661         LValue objects.
25662         (LocalVariableReference, ParameterReference, FieldExpr): Implement
25663         LValue interface.
25664
25665         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
25666         interface for generating code, simplifies the code.
25667
25668 2001-09-20  Ravi Pratap  <ravi@ximian.com>
25669
25670         * expression.cs (everywhere): Comment out return statements in ::Resolve
25671         methods to avoid the warnings.
25672
25673 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
25674
25675         * driver.cs (parse): Report error 2001 if we can not open the
25676         source file.
25677
25678         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
25679         not resolve it.
25680
25681         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
25682         object. 
25683
25684         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
25685         otherwise nested blocks end up with the same index.
25686
25687         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
25688
25689         * expression.cs:  Instead of having FIXMEs in the Resolve
25690         functions, throw exceptions so it is obvious that we are facing a
25691         bug. 
25692
25693         * cs-parser.jay (invocation_expression): Pass Location information.
25694
25695         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
25696         Use a basename for those routines because .NET does not like paths
25697         on them. 
25698
25699         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
25700         already defined.
25701
25702 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
25703
25704         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
25705         are loading the correct data types (throws an exception if not).
25706         (TypeManager::InitCoreTypes): Use CoreLookupType
25707
25708         * expression.cs (Unary::ResolveOperator): return the child
25709         expression for expressions which are just +expr.
25710         (Unary::ResolveOperator): Return negative literals for -LITERAL
25711         expressions (otherwise they are Unary {Literal}).
25712         (Invocation::Badness): Take into account `Implicit constant
25713         expression conversions'.
25714
25715         * literal.cs (LongLiteral): Implement long literal class.
25716         (IntLiteral): export the `Value' of the intliteral. 
25717
25718 2001-09-19  Ravi Pratap  <ravi@ximian.com>
25719
25720         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
25721
25722         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
25723         instead of 'Operator'
25724
25725         * expression.cs (Binary::ResolveOperator): Update accordingly.
25726         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
25727         and 'Minus'
25728
25729         * cs-parser.jay (unary_expression): Update to use the new names.
25730
25731         * gen-treedump.cs (GetUnary): Same here.
25732
25733         * expression.cs (Unary::Resolve): Implement.
25734         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
25735         operators are found instead of making noise ;-)
25736         (Unary::ResolveOperator): New method to do precisely the same thing which
25737         Binary::ResolveOperator does for Binary expressions.
25738         (Unary.method, .Arguments): Add.
25739         (Unary::OperName): Implement.   
25740         (Unary::ForceConversion): Copy and Paste !
25741
25742         * class.cs (Operator::Define): Fix a small bug for the case when we have 
25743         a unary operator.
25744
25745         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
25746         for the inbuilt operators. Only overloading works for now ;-)
25747
25748 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
25749
25750         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
25751         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
25752
25753         * expression.cs (This::Emit): Implement. 
25754         (This::Resolve): Implement.
25755         (TypeOf:Resolve): Implement.
25756         (Expression::ResolveSimpleName): Add an implicit this to instance
25757         field references. 
25758         (MemberAccess::Resolve): Deal with Parameters and Fields. 
25759         Bind instance variable to Field expressions.
25760         (FieldExpr::Instance): New field used to track the expression that
25761         represents the object instance.
25762         (FieldExpr::Resolve): Track potential errors from MemberLookup not
25763         binding 
25764         (FieldExpr::Emit): Implement.
25765
25766         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
25767         the last instruction contains a return opcode to avoid generating
25768         the last `ret' instruction (this generates correct code, and it is
25769         nice to pass the peverify output).
25770
25771         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
25772         initializer for static and instance variables.
25773         (Constructor::Emit): Allow initializer to be null in the case of
25774         static constructors.  Only emit initializer for instance
25775         constructors. 
25776
25777         (TypeContainer::FindMembers): Return a null array if there are no
25778         matches.
25779
25780         Also fix the code for the MemberTypes.Method branch, as it was not
25781         scanning that for operators (or tried to access null variables before).
25782
25783         * assign.cs (Assign::Emit): Handle instance and static fields. 
25784
25785         * TODO: Updated.
25786
25787         * driver.cs: Stop compilation if there are parse errors.
25788
25789         * cs-parser.jay (constructor_declaration): Provide default base
25790         initializer for non-static constructors.
25791         (constructor_declarator): Do not provide a default base
25792         initializers if none was specified.
25793         Catch the fact that constructors should not have parameters.
25794
25795         * class.cs: Do not emit parent class initializers for static
25796         constructors, that should be flagged as an error.
25797
25798 2001-09-18  Ravi Pratap  <ravi@ximian.com>
25799
25800         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
25801         Move back code into TypeContainer::Populate.
25802
25803 2001-09-18  Ravi Pratap  <ravi@ximian.com>
25804
25805         * class.cs (TypeContainer::AddConstructor): Fix the check to
25806         compare against Name, not Basename. 
25807         (Operator::OpType): Change Plus and Minus to Add and Subtract.
25808
25809         * cs-parser.jay : Update accordingly.
25810
25811         * class.cs (TypeContainer::FindMembers): For the case where we are searching
25812         for methods, don't forget to look into the operators too.
25813         (RegisterMethodBuilder): Helper method to take care of this for
25814         methods, constructors and operators.
25815         (Operator::Define): Completely revamp.
25816         (Operator.OperatorMethod, MethodName): New fields.
25817         (TypeContainer::Populate): Move the registering of builders into
25818         RegisterMethodBuilder.
25819         (Operator::Emit): Re-write.
25820
25821         * expression.cs (Binary::Emit): Comment out code path to emit method
25822         invocation stuff for the case when we have a user defined operator. I am
25823         just not able to get it right !
25824
25825 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
25826
25827         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
25828         argument. 
25829
25830         (Expression::MemberLookup): Provide a version that allows to
25831         specify the MemberTypes and BindingFlags. 
25832
25833         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
25834         so it was not fetching variable information from outer blocks.
25835
25836         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
25837         Beforefieldinit as it was buggy.
25838
25839         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
25840         that Ravi put here.  
25841
25842         * class.cs (Constructor::Emit): Only emit if block is not null.
25843         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
25844         deal with this by semantically definining it as if the user had
25845         done it.
25846
25847         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
25848         constructors as we now "emit" them at a higher level.
25849
25850         (TypeContainer::DefineDefaultConstructor): Used to define the
25851         default constructors if none was provided.
25852
25853         (ConstructorInitializer): Add methods Resolve and Emit. 
25854
25855         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
25856
25857 2001-09-17  Ravi Pratap  <ravi@ximian.com>
25858
25859         * class.cs (TypeContainer::EmitDefaultConstructor): Register
25860         the default constructor builder with our hashtable for methodbuilders
25861         to methodcores.
25862
25863         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
25864         and argument_count is 0 in which case we have a match.
25865         (Binary::ResolveOperator): More null checking and miscellaneous coding
25866         style cleanup.
25867
25868 2001-09-17  Ravi Pratap  <ravi@ximian.com>
25869
25870         * rootcontext.cs (IsNameSpace): Compare against null.
25871
25872         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
25873
25874         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
25875         and Unary::Operator.
25876
25877         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
25878         accordingly.
25879
25880         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
25881         we have overloaded operators.
25882         (Binary::ResolveOperator): Implement the part which does the operator overload
25883         resolution.
25884
25885         * class.cs (Operator::Emit): Implement.
25886         (TypeContainer::Emit): Emit the operators we have too.
25887
25888         * expression.cs (Binary::Emit): Update to emit the appropriate code for
25889         the case when we have a user-defined operator.
25890
25891 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
25892
25893         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
25894
25895 2001-09-16  Ravi Pratap  <ravi@ximian.com>
25896
25897         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
25898         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
25899         (Constructor::Emit): Implement.
25900         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
25901         if we have no work to do. 
25902         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
25903         Emit method.
25904
25905         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
25906         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
25907
25908         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
25909         of parent.parent.
25910
25911 2001-09-15  Ravi Pratap  <ravi@ximian.com>
25912
25913         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
25914         in the source.
25915         (Tree::RecordNamespace): Method to do what the name says ;-)
25916         (Tree::Namespaces): Property to get at the namespaces hashtable.
25917
25918         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
25919         keep track.
25920
25921         * rootcontext.cs (IsNamespace): Fixed it :-)
25922
25923 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
25924
25925         * class.cs (TypeContainer::FindMembers): Add support for
25926         constructors. 
25927         (MethodCore): New class that encapsulates both the shared aspects
25928         of a Constructor and a Method.  
25929         (Method, Constructor): Factored pieces into MethodCore.
25930
25931         * driver.cs: Added --fatal which makes errors throw exceptions.
25932         Load System assembly as well as part of the standard library.
25933
25934         * report.cs: Allow throwing exceptions on errors for debugging.
25935
25936         * modifiers.cs: Do not use `parent', instead use the real type
25937         container to evaluate permission settings.
25938
25939         * class.cs: Put Ravi's patch back in.  He is right, and we will
25940         have to cope with the
25941
25942 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25943
25944         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
25945         FamORAssem, not FamANDAssem.
25946
25947 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
25948
25949         * driver.cs: Added --parse option that only parses its input files
25950         and terminates.
25951
25952         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
25953         incorrect.  IsTopLevel is not used to tell whether an object is
25954         root_types or not (that can be achieved by testing this ==
25955         root_types).  But to see if this is a top-level *class* (not
25956         necessarly our "toplevel" container). 
25957
25958 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25959
25960         * enum.cs (Enum::Define): Modify to call the Lookup method on the
25961         parent instead of a direct call to GetType.
25962
25963 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25964
25965         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
25966         Modifiers.TypeAttr. This should just be a call to that method.
25967
25968         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
25969         object so that we can determine if we are top-level or not.
25970
25971         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
25972         TypeContainer too.
25973
25974         * enum.cs (Enum::Define): Ditto.
25975
25976         * modifiers.cs (FieldAttr): Re-write.
25977
25978         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
25979         (TypeContainer::HaveStaticConstructor): New property to provide access
25980         to precisely that info.
25981
25982         * modifiers.cs (MethodAttr): Re-write.
25983         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
25984
25985         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
25986         of top-level types as claimed.
25987
25988 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
25989
25990         * expression.cs (MemberLookup): Fruitless attempt to lookup
25991         constructors.  Maybe I need to emit default constructors?  That
25992         might be it (currently .NET emits this for me automatically).
25993         (Invocation::OverloadResolve): Cope with Arguments == null.
25994         (Invocation::EmitArguments): new function, shared by the new
25995         constructor and us.
25996         (Invocation::Emit): Handle static and instance methods.  Emit
25997         proper call instruction for virtual or non-virtual invocations.
25998         (New::Emit): Implement.
25999         (New::Resolve): Implement.
26000         (MemberAccess:Resolve): Implement.
26001         (MethodGroupExpr::InstanceExpression): used conforming to the spec
26002         to track instances.
26003         (FieldExpr::Resolve): Set type.
26004
26005         * support.cs: Handle empty arguments.
26006                 
26007         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
26008         SimpleLookup): Auxiliary routines to help parse a qualifier
26009         identifier.  
26010
26011         Update qualifier_identifier rule.
26012
26013         * codegen.cs: Removed debugging messages.
26014
26015         * class.cs: Make this a global thing, this acts just as a "key" to
26016         objects that we might have around.
26017
26018         (Populate): Only initialize method_builders_to_methods once.
26019
26020         * expression.cs (PropertyExpr): Initialize type from the
26021         PropertyType. 
26022
26023         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
26024         Resolve pattern.  Attempt to implicitly convert value to boolean.
26025         Emit code.
26026
26027         * expression.cs: Set the type for the int32/int32 argument case.
26028         (Binary::ResolveOperator): Set the return type to boolean for
26029         comparission operators
26030
26031         * typemanager.cs: Remove debugging print code.
26032
26033         (Invocation::Resolve): resolve type.
26034
26035         * class.cs: Allocate a MemberInfo of the correct size, as the code
26036         elsewhere depends on the test to reflect the correct contents.
26037
26038         (Method::) Keep track of parameters, due to System.Reflection holes
26039
26040         (TypeContainer::Populate): Keep track of MethodBuilders to Method
26041         mapping here.
26042
26043         (TypeContainer::FindMembers): Use ArrayList and then copy an array
26044         of the exact size and return that.
26045
26046         (Class::LookupMethodByBuilder): New function that maps
26047         MethodBuilders to its methods.  Required to locate the information
26048         on methods because System.Reflection bit us again.
26049
26050         * support.cs: New file, contains an interface ParameterData and
26051         two implementations: ReflectionParameters and InternalParameters
26052         used to access Parameter information.  We will need to grow this
26053         as required.
26054
26055         * expression.cs (Invocation::GetParameterData): implement a cache
26056         and a wrapper around the ParameterData creation for methods. 
26057         (Invocation::OverloadResolve): Use new code.
26058
26059 2001-09-13  Ravi Pratap  <ravi@ximian.com>
26060
26061         * class.cs (TypeContainer::EmitField): Remove and move into 
26062         (Field::Define): here and modify accordingly.
26063         (Field.FieldBuilder): New member.
26064         (TypeContainer::Populate): Update accordingly.
26065         (TypeContainer::FindMembers): Implement.
26066
26067 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
26068
26069         * statement.cs: (VariableInfo::VariableType): New field to be
26070         initialized with the full type once it is resolved. 
26071
26072 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
26073
26074         * parameter.cs (GetParameterInfo): Use a type cache to compute
26075         things only once, and to reuse this information
26076
26077         * expression.cs (LocalVariableReference::Emit): Implement.
26078         (OpcodeCast::Emit): fix.
26079
26080         (ParameterReference::Resolve): Implement.
26081         (ParameterReference::Emit): Implement.
26082
26083         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
26084         that are expressions need to stay as Expressions.
26085
26086         * typemanager.cs (CSharpName): Returns the C# name of a type if
26087         possible. 
26088
26089         * expression.cs (Expression::ConvertImplicit): New function that
26090         implements implicit type conversions.
26091
26092         (Expression::ImplicitReferenceConversion): Implements implicit
26093         reference conversions.
26094
26095         (EmptyCast): New type for transparent casts.
26096
26097         (OpcodeCast): New type for casts of types that are performed with
26098         a sequence of bytecodes.
26099
26100         (BoxedCast): New type used for casting value types into reference
26101         types.  Emits a box opcode.
26102
26103         (Binary::DoNumericPromotions): Implements numeric promotions of
26104         and computation of the Binary::Type.
26105
26106         (Binary::EmitBranchable): Optimization.
26107
26108         (Binary::Emit): Implement code emission for expressions.
26109
26110         * typemanager.cs (TypeManager): Added two new core types: sbyte
26111         and byte.
26112
26113 2001-09-12  Ravi Pratap  <ravi@ximian.com>
26114
26115         * class.cs (TypeContainer::FindMembers): Method which does exactly
26116         what Type.FindMembers does, only we don't have to use reflection. No
26117         implementation yet.
26118
26119         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
26120         typecontainer objects as we need to get at them.
26121         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
26122
26123         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
26124         typecontainer object.
26125
26126         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
26127         of just a Report object.
26128
26129 2001-09-11  Ravi Pratap  <ravi@ximian.com>
26130
26131         * class.cs (Event::Define): Go back to using the prefixes "add_" and
26132         "remove_"
26133         (TypeContainer::Populate): Now define the delegates of the type too.
26134         (TypeContainer.Delegates): Property to access the list of delegates defined
26135         in the type.
26136
26137         * delegates.cs (Delegate::Define): Implement partially.
26138
26139         * modifiers.cs (TypeAttr): Handle more flags.
26140
26141 2001-09-11  Ravi Pratap  <ravi@ximian.com>
26142
26143         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
26144         and not <=
26145         (Operator::Define): Re-write logic to get types by using the LookupType method
26146         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
26147         (Indexer::Define): Ditto.
26148         (Event::Define): Ditto.
26149         (Property::Define): Ditto.
26150
26151 2001-09-10  Ravi Pratap  <ravi@ximian.com>
26152
26153         * class.cs (TypeContainer::Populate): Now define operators too. 
26154         (TypeContainer.Operators): New property to access the list of operators
26155         in a type.
26156         (Operator.OperatorMethodBuilder): New member to hold the method builder
26157         for the operator we are defining.
26158         (Operator::Define): Implement.
26159
26160 2001-09-10  Ravi Pratap  <ravi@ximian.com>
26161
26162         * class.cs (Event::Define): Make the prefixes of the accessor methods
26163         addOn_ and removeOn_ 
26164
26165         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
26166         of the location being passed in too. Ideally, this should go later since all
26167         error reporting should be done through the Report object.
26168
26169         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
26170         (Populate): Iterate thru the indexers we have and define them too.
26171         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
26172         for the get and set accessors.
26173         (Indexer::Define): Implement.
26174
26175 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
26176
26177         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
26178         my previous implementation, did not work.
26179
26180         * typemanager.cs: Add a couple of missing types (the longs).
26181
26182         * literal.cs: Use TypeManager.bool_type instead of getting it.
26183
26184         * expression.cs (EventExpr): New kind of expressions.
26185         (Expressio::ExprClassFromMemberInfo): finish
26186
26187 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
26188
26189         * assign.cs: Emit stores to static fields differently.
26190
26191 2001-09-08  Ravi Pratap  <ravi@ximian.com>
26192
26193         * Merge in changes and adjust code to tackle conflicts. Backed out my
26194         code in Assign::Resolve ;-) 
26195
26196 2001-09-08  Ravi Pratap  <ravi@ximian.com>
26197
26198         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
26199         instead Report.Error and also pass in the location.
26200         (CSharpParser::Lexer): New readonly property to return the reference
26201         to the Tokenizer object.
26202         (declare_local_variables): Use Report.Error with location instead of plain 
26203         old error.
26204         (CheckDef): Ditto.
26205
26206         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
26207         (Operator.CheckBinaryOperator): Ditto.
26208
26209         * cs-parser.jay (operator_declarator): Update accordingly.
26210
26211         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
26212         (CheckBinaryOperator): Same here.
26213
26214         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
26215         on the name without any prefixes of namespace names etc. This is because we
26216         already might have something already fully qualified like 
26217         'System.Console.WriteLine'
26218
26219         * assign.cs (Resolve): Begin implementation. Stuck ;-)
26220
26221 2001-09-07  Ravi Pratap  <ravi@ximian.com>
26222
26223         * cs-tokenizer.cs (location): Return a string which also contains
26224         the file name.
26225
26226         * expression.cs (ElementAccess): New class for expressions of the
26227         type 'element access.'
26228         (BaseAccess): New class for expressions of the type 'base access.'
26229         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
26230         respectively.
26231
26232         * cs-parser.jay (element_access): Implement action.
26233         (base_access): Implement actions.
26234         (checked_expression, unchecked_expression): Implement.
26235
26236         * cs-parser.jay (local_variable_type): Correct and implement.
26237         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
26238
26239         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
26240
26241         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
26242         name and the specifiers.
26243
26244         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
26245
26246         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
26247         making them all public ;-)
26248
26249         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
26250         class anyways.
26251
26252 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
26253
26254         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
26255         PropertyExprs.
26256         (FieldExpr, PropertyExprs): New resolved expressions.
26257         (SimpleName::MemberStaticCheck): Perform static checks for access
26258         to non-static fields on static methods. Maybe this should be
26259         generalized for MemberAccesses. 
26260         (SimpleName::ResolveSimpleName): More work on simple name
26261         resolution. 
26262
26263         * cs-parser.jay (primary_expression/qualified_identifier): track
26264         the parameter index.
26265
26266         * codegen.cs (CodeGen::Save): Catch save exception, report error.
26267         (EmitContext::EmitBoolExpression): Chain to expression generation
26268         instead of temporary hack.
26269         (::EmitStatementExpression): Put generic expression code generation.
26270
26271         * assign.cs (Assign::Emit): Implement variable assignments to
26272         local variables, parameters and fields.
26273
26274 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
26275
26276         * statement.cs (Block::GetVariableInfo): New method, returns the
26277         VariableInfo for a variable name in a block.
26278         (Block::GetVariableType): Implement in terms of GetVariableInfo
26279
26280         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
26281         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
26282
26283 2001-09-06  Ravi Pratap  <ravi@ximian.com>
26284
26285         * cs-parser.jay (operator_declaration): Continue on my quest : update
26286         to take attributes argument.
26287         (event_declaration): Ditto.
26288         (enum_declaration): Ditto.
26289         (indexer_declaration): Ditto.
26290
26291         * class.cs (Operator::Operator): Update constructor accordingly.
26292         (Event::Event): Ditto.
26293
26294         * delegate.cs (Delegate::Delegate): Same here.
26295
26296         * enum.cs (Enum::Enum): Same here.
26297
26298 2001-09-05  Ravi Pratap  <ravi@ximian.com>
26299
26300         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
26301
26302         * ../tests/cs0658.cs : New file to demonstrate error 0658.
26303
26304         * attribute.cs (Attributes): New class to encapsulate all attributes which were
26305         being passed around as an arraylist.
26306         (Attributes::AddAttribute): Method to add attribute sections.
26307
26308         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
26309         (struct_declaration): Update accordingly.
26310         (constant_declaration): Update.
26311         (field_declaration): Update.
26312         (method_header): Update.
26313         (fixed_parameter): Update.
26314         (parameter_array): Ditto.
26315         (property_declaration): Ditto.
26316         (destructor_declaration): Ditto.
26317
26318         * class.cs (Struct::Struct): Update constructors accordingly.
26319         (Class::Class): Ditto.
26320         (Field::Field): Ditto.
26321         (Method::Method): Ditto.
26322         (Property::Property): Ditto.
26323         (TypeContainer::OptAttribute): update property's return type.
26324
26325         * interface.cs (Interface.opt_attributes): New member.
26326         (Interface::Interface): Update to take the extra Attributes argument.
26327
26328         * parameter.cs (Parameter::Parameter): Ditto.
26329
26330         * constant.cs (Constant::Constant): Ditto.
26331
26332         * interface.cs (InterfaceMemberBase): New OptAttributes field.
26333         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
26334         the attributes as a parameter.
26335         (InterfaceProperty): Update constructor call.
26336         (InterfaceEvent): Ditto.
26337         (InterfaceMethod): Ditto.
26338         (InterfaceIndexer): Ditto.
26339
26340         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
26341         pass the attributes too.
26342         (interface_event_declaration): Ditto.
26343         (interface_property_declaration): Ditto.
26344         (interface_method_declaration): Ditto.
26345         (interface_declaration): Ditto.
26346
26347 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
26348
26349         * class.cs (Method::Define): Track the "static Main" definition to
26350         create an entry point. 
26351
26352         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
26353         EntryPoint if we find it. 
26354
26355         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
26356         (EmitContext::ig): Make this variable public.
26357
26358         * driver.cs: Make the default output file be the first file name
26359         with the .exe extension.  
26360
26361         Detect empty compilations
26362
26363         Handle various kinds of output targets.  Handle --target and
26364         rename -t to --dumper.
26365
26366         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
26367         methods inherited from Expression return now an Expression.  This
26368         will is used during the tree rewriting as we resolve them during
26369         semantic analysis.
26370
26371         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
26372         the spec.  Missing entirely is the information about
26373         accessability of elements of it.
26374
26375         (Expression::ExprClassFromMemberInfo): New constructor for
26376         Expressions that creates a fully initialized Expression based on
26377         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
26378         a Type.
26379
26380         (Invocation::Resolve): Begin implementing resolution of invocations.
26381
26382         * literal.cs (StringLiteral):  Implement Emit.
26383
26384 2001-09-05  Ravi Pratap  <ravi@ximian.com>
26385
26386         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
26387         member.
26388
26389 2001-09-04  Ravi Pratap  <ravi@ximian.com>
26390
26391         * cs-parser.jay (attribute_arguments): Implement actions.
26392         (attribute): Fix bug in production. Implement action.
26393         (attribute_list): Implement.
26394         (attribute_target): Implement.
26395         (attribute_target_specifier, opt_target_specifier): Implement
26396         (CheckAttributeTarget): New method to check if the attribute target
26397         is valid.
26398         (attribute_section): Implement.
26399         (opt_attributes): Implement.
26400
26401         * attribute.cs : New file to handle attributes.
26402         (Attribute): Class to hold attribute info.
26403
26404         * cs-parser.jay (opt_attribute_target_specifier): Remove production
26405         (attribute_section): Modify production to use 2 different rules to 
26406         achieve the same thing. 1 s/r conflict down !
26407         Clean out commented, useless, non-reducing dimension_separator rules.
26408
26409         * class.cs (TypeContainer.attributes): New member to hold list
26410         of attributes for a type.
26411         (Struct::Struct): Modify to take one more argument, the attribute list.
26412         (Class::Class): Ditto.
26413         (Field::Field): Ditto.
26414         (Method::Method): Ditto.
26415         (Property::Property): Ditto.
26416
26417         * cs-parser.jay (struct_declaration): Update constructor call to
26418         pass in the attributes too.
26419         (class_declaration): Ditto.
26420         (constant_declaration): Ditto.
26421         (field_declaration): Ditto.
26422         (method_header): Ditto.
26423         (fixed_parameter): Ditto.
26424         (parameter_array): Ditto.
26425         (property_declaration): Ditto.
26426
26427         * constant.cs (Constant::Constant): Update constructor similarly.
26428         Use System.Collections.
26429
26430         * parameter.cs (Parameter::Parameter): Update as above.
26431
26432 2001-09-02  Ravi Pratap  <ravi@ximian.com>
26433
26434         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
26435         (TypeContainer.delegates): New member to hold list of delegates.
26436
26437         * cs-parser.jay (delegate_declaration): Implement the action correctly 
26438         this time as I seem to be on crack ;-)
26439
26440 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
26441
26442         * rootcontext.cs (RootContext::IsNamespace): new function, used to
26443         tell whether an identifier represents a namespace.
26444
26445         * expression.cs (NamespaceExpr): A namespace expression, used only
26446         temporarly during expression resolution.
26447         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
26448         utility functions to resolve names on expressions.
26449
26450 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
26451
26452         * codegen.cs: Add hook for StatementExpressions. 
26453
26454         * class.cs: Fix inverted test for static flag in methods.
26455
26456 2001-09-02  Ravi Pratap  <ravi@ximian.com>
26457
26458         * class.cs (Operator::CheckUnaryOperator): Correct error number used
26459         to make it coincide with MS' number.
26460         (Operator::CheckBinaryOperator): Ditto.
26461
26462         * ../errors/errors.txt : Remove error numbers added earlier.
26463
26464         * ../errors/cs1019.cs : Test case for error # 1019
26465
26466         * ../errros/cs1020.cs : Test case for error # 1020
26467
26468         * cs-parser.jay : Clean out commented cruft.
26469         (dimension_separators, dimension_separator): Comment out. Ostensibly not
26470         used anywhere - non-reducing rule.
26471         (namespace_declarations): Non-reducing rule - comment out.
26472
26473         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
26474         with TypeContainer::AddEnum.
26475
26476         * delegate.cs : New file for delegate handling classes.
26477         (Delegate): Class for declaring delegates.
26478
26479         * makefile : Update.
26480
26481         * cs-parser.jay (delegate_declaration): Implement.
26482
26483 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
26484
26485         * class.cs (Event::Define): Implement.
26486         (Event.EventBuilder): New member.
26487
26488         * class.cs (TypeContainer::Populate): Update to define all enums and events
26489         we have.
26490         (Events): New property for the events arraylist we hold. Shouldn't we move to using
26491         readonly fields for all these cases ?
26492
26493 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
26494
26495         * class.cs (Property): Revamp to use the convention of making fields readonly.
26496         Accordingly modify code elsewhere.
26497
26498         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
26499         the Define method of the Property class.
26500
26501         * class.cs : Clean up applied patch and update references to variables etc. Fix 
26502         trivial bug.
26503         (TypeContainer::Populate): Update to define all the properties we have. Also
26504         define all enumerations.
26505
26506         * enum.cs (Define): Implement.
26507
26508 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
26509
26510         * cs-parser.jay (overloadable_operator): The semantic value is an
26511         enum of the Operator class.
26512         (operator_declarator): Implement actions.
26513         (operator_declaration): Implement.
26514
26515         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
26516         validity of definitions.
26517         (Operator::CheckBinaryOperator): Static method to check for binary operators
26518         (TypeContainer::AddOperator): New method to add an operator to a type.
26519
26520         * cs-parser.jay (indexer_declaration): Added line to actually call the
26521         AddIndexer method so it gets added ;-)
26522
26523         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
26524         already taken care of by the MS compiler ?  
26525
26526 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
26527
26528         * class.cs (Operator): New class for operator declarations.
26529         (Operator::OpType): Enum for the various operators.
26530
26531 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
26532
26533         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
26534         ostensibly handle this in semantic analysis.
26535
26536         * cs-parser.jay (general_catch_clause): Comment out
26537         (specific_catch_clauses, specific_catch_clause): Ditto.
26538         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
26539         (catch_args, opt_catch_args): New productions.
26540         (catch_clause): Rewrite to use the new productions above
26541         (catch_clauses): Modify accordingly.
26542         (opt_catch_clauses): New production to use in try_statement
26543         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
26544         and re-write the code in the actions to extract the specific and
26545         general catch clauses by being a little smart ;-)
26546
26547         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
26548         Hooray, try and catch statements parse fine !
26549
26550 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26551
26552         * statement.cs (Block::GetVariableType): Fix logic to extract the type
26553         string from the hashtable of variables.
26554
26555         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
26556         I end up making that mistake ;-)
26557         (catch_clauses): Fixed gross error which made Key and Value of the 
26558         DictionaryEntry the same : $1 !!
26559
26560 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26561
26562         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
26563
26564         * cs-parser.jay (event_declaration): Correct to remove the semicolon
26565         when the add and remove accessors are specified. 
26566
26567 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26568
26569         * cs-parser.jay (IndexerDeclaration): New helper class to hold
26570         information about indexer_declarator.
26571         (indexer_declarator): Implement actions.
26572         (parsing_indexer): New local boolean used to keep track of whether
26573         we are parsing indexers or properties. This is necessary because 
26574         implicit_parameters come into picture even for the get accessor in the 
26575         case of an indexer.
26576         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
26577
26578         * class.cs (Indexer): New class for indexer declarations.
26579         (TypeContainer::AddIndexer): New method to add an indexer to a type.
26580         (TypeContainer::indexers): New member to hold list of indexers for the
26581         type.
26582
26583 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
26584
26585         * cs-parser.jay (add_accessor_declaration): Implement action.
26586         (remove_accessor_declaration): Implement action.
26587         (event_accessors_declaration): Implement
26588         (variable_declarators): swap statements for first rule - trivial.
26589
26590         * class.cs (Event): New class to hold information about event
26591         declarations.
26592         (TypeContainer::AddEvent): New method to add an event to a type
26593         (TypeContainer::events): New member to hold list of events.
26594
26595         * cs-parser.jay (event_declaration): Implement actions.
26596
26597 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
26598
26599         * cs-parser.jay (dim_separators): Implement. Make it a string
26600         concatenating all the commas together, just as they appear.
26601         (opt_dim_separators): Modify accordingly
26602         (rank_specifiers): Update accordingly. Basically do the same
26603         thing - instead, collect the brackets here.
26604         (opt_rank_sepcifiers): Modify accordingly.
26605         (array_type): Modify to actually return the complete type string
26606         instead of ignoring the rank_specifiers.
26607         (expression_list): Implement to collect the expressions
26608         (variable_initializer): Implement. We make it a list of expressions
26609         essentially so that we can handle the array_initializer case neatly too.
26610         (variable_initializer_list): Implement.
26611         (array_initializer): Make it a list of variable_initializers
26612         (opt_array_initializer): Modify accordingly.
26613
26614         * expression.cs (New::NType): Add enumeration to help us
26615         keep track of whether we have an object/delegate creation
26616         or an array creation.
26617         (New:NewType, New::Rank, New::Indices, New::Initializers): New
26618         members to hold data about array creation.
26619         (New:New): Modify to update NewType
26620         (New:New): New Overloaded contructor for the array creation
26621         case.
26622
26623         * cs-parser.jay (array_creation_expression): Implement to call
26624         the overloaded New constructor.
26625
26626 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
26627
26628         * class.cs (TypeContainer::Constructors): Return member
26629         constructors instead of returning null.
26630
26631 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
26632
26633         * typemanager.cs (InitCoreTypes): Initialize the various core
26634         types after we have populated the type manager with the user
26635         defined types (this distinction will be important later while
26636         compiling corlib.dll)
26637
26638         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
26639         on Expression Classification.  Now all expressions have a method
26640         `Resolve' and a method `Emit'.
26641
26642         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
26643         generation from working.     Also add some temporary debugging
26644         code. 
26645
26646 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
26647
26648         * codegen.cs: Lots of code generation pieces.  This is only the
26649         beginning, will continue tomorrow with more touches of polish.  We
26650         handle the fundamentals of if, while, do, for, return.  Others are
26651         trickier and I need to start working on invocations soon.
26652
26653         * gen-treedump.cs: Bug fix, use s.Increment here instead of
26654         s.InitStatement. 
26655
26656         * codegen.cs (EmitContext): New struct, used during code
26657         emission to keep a context.   Most of the code generation will be
26658         here. 
26659
26660         * cs-parser.jay: Add embedded blocks to the list of statements of
26661         this block.  So code generation proceeds in a top down fashion.
26662
26663 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
26664
26665         * statement.cs: Add support for multiple child blocks.
26666
26667 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
26668
26669         * codegen.cs (EmitCode): New function, will emit the code for a
26670         Block of code given a TypeContainer and its ILGenerator. 
26671
26672         * statement.cs (Block): Standard public readonly optimization.
26673         (Block::Block constructors): Link children. 
26674         (Block::Child): Child Linker.
26675         (Block::EmitVariables): Emits IL variable declarations.
26676
26677         * class.cs: Drop support for MethodGroups here, delay until
26678         Semantic Analysis.
26679         (Method::): Applied the same simplification that I did before, and
26680         move from Properties to public readonly fields.
26681         (Method::ParameterTypes): Returns the parameter types for the
26682         function, and implements a cache that will be useful later when I
26683         do error checking and the semantic analysis on the methods is
26684         performed.
26685         (Constructor::GetCallingConvention): Renamed from CallingConvetion
26686         and made a method, optional argument tells whether this is a class
26687         or a structure to apply the `has-this' bit.
26688         (Method::GetCallingConvention): Implement, returns the calling
26689         convention. 
26690         (Method::Define): Defines the type, a second pass is performed
26691         later to populate the methods.
26692
26693         (Constructor::ParameterTypes): implement a cache similar to the
26694         one on Method::ParameterTypes, useful later when we do semantic
26695         analysis. 
26696
26697         (TypeContainer::EmitMethod):  New method.  Emits methods.
26698
26699         * expression.cs: Removed MethodGroup class from here.
26700
26701         * parameter.cs (Parameters::GetCallingConvention): new method.
26702
26703 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
26704
26705         * class.cs (TypeContainer::Populate): Drop RootContext from the
26706         argument. 
26707
26708         (Constructor::CallingConvention): Returns the calling convention.
26709         (Constructor::ParameterTypes): Returns the constructor parameter
26710         types. 
26711
26712         (TypeContainer::AddConstructor): Keep track of default constructor
26713         and the default static constructor.
26714
26715         (Constructor::) Another class that starts using `public readonly'
26716         instead of properties. 
26717
26718         (Constructor::IsDefault): Whether this is a default constructor. 
26719
26720         (Field::) use readonly public fields instead of properties also.
26721
26722         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
26723         track of static constructors;  If none is used, turn on
26724         BeforeFieldInit in the TypeAttributes. 
26725
26726         * cs-parser.jay (opt_argument_list): now the return can be null
26727         for the cases where there are no arguments. 
26728
26729         (constructor_declarator): If there is no implicit `base' or
26730         `this', then invoke the default parent constructor. 
26731
26732         * modifiers.cs (MethodAttr): New static function maps a set of
26733         modifiers flags into a MethodAttributes enum
26734         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
26735         MethodAttr, TypeAttr to represent the various mappings where the
26736         modifiers are used.
26737         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
26738
26739 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
26740
26741         * parameter.cs (GetParameterInfo): Fix bug where there would be no
26742         method arguments.
26743
26744         * interface.cs (PopulateIndexer): Implemented the code generator
26745         for interface indexers.
26746
26747 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
26748
26749         * interface.cs (InterfaceMemberBase): Now we track the new status
26750         here.  
26751
26752         (PopulateProperty): Implement property population.  Woohoo!  Got
26753         Methods and Properties going today. 
26754
26755         Removed all the properties for interfaces, and replaced them with
26756         `public readonly' fields. 
26757
26758 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
26759
26760         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
26761         initialize their hashtables/arraylists only when they are needed
26762         instead of doing this always.
26763
26764         * parameter.cs: Handle refs and out parameters.
26765
26766         * cs-parser.jay: Use an ArrayList to construct the arguments
26767         instead of the ParameterCollection, and then cast that to a
26768         Parameter[] array.
26769
26770         * parameter.cs: Drop the use of ParameterCollection and use
26771         instead arrays of Parameters.
26772
26773         (GetParameterInfo): Use the Type, not the Name when resolving
26774         types. 
26775
26776 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
26777
26778         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
26779         and instead use public readonly fields.
26780
26781         * class.cs: Put back walking code for type containers.
26782
26783 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
26784
26785         * class.cs (MakeConstant): Code to define constants.
26786
26787         * rootcontext.cs (LookupType): New function.  Used to locate types 
26788
26789
26790 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
26791
26792         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
26793         this System.Reflection code is.  Kudos to Microsoft
26794
26795         * typemanager.cs: Implement a type cache and avoid loading all
26796         types at boot time.  Wrap in LookupType the internals.  This made
26797         the compiler so much faster.  Wow.  I rule!
26798
26799         * driver.cs: Make sure we always load mscorlib first (for
26800         debugging purposes, nothing really important).
26801
26802         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
26803         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
26804
26805         * rootcontext.cs: Lookup types on their namespace;  Lookup types
26806         on namespaces that have been imported using the `using' keyword.
26807
26808         * class.cs (TypeContainer::TypeAttr): Virtualize.
26809         (Class::TypeAttr): Return attributes suitable for this bad boy.
26810         (Struct::TypeAttr): ditto.
26811         Handle nested classes.
26812         (TypeContainer::) Remove all the type visiting code, it is now
26813         replaced with the rootcontext.cs code
26814
26815         * rootcontext.cs (GetClassBases): Added support for structs. 
26816
26817 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
26818
26819         * interface.cs, statement.cs, class.cs, parameter.cs,
26820         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
26821         Drop use of TypeRefs, and use strings instead.
26822
26823 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
26824
26825         * rootcontext.cs: 
26826
26827         * class.cs (Struct::Struct): set the SEALED flags after
26828         checking the modifiers.
26829         (TypeContainer::TypeAttr): new property, returns the
26830         TypeAttributes for a class.  
26831
26832         * cs-parser.jay (type_list): Oops, list production was creating a
26833         new list of base types.
26834
26835         * rootcontext.cs (StdLib): New property.
26836         (GetInterfaceTypeByName): returns an interface by type name, and
26837         encapsulates error handling here.
26838         (GetInterfaces): simplified.
26839         (ResolveTree): Encapsulated all the tree resolution here.
26840         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
26841         types. 
26842
26843         * driver.cs: Add support for --nostdlib, to avoid loading the
26844         default assemblies.
26845         (Main): Do not put tree resolution here. 
26846
26847         * rootcontext.cs: Beginning of the class resolution.
26848
26849 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
26850
26851         * rootcontext.cs: Provide better error reporting. 
26852
26853         * cs-parser.jay (interface_base): set our $$ to be interfaces.
26854
26855         * rootcontext.cs (CreateInterface): Handle the case where there
26856         are no parent interfaces.
26857
26858         (CloseTypes): Routine to flush types at the end.
26859         (CreateInterface): Track types.
26860         (GetInterfaces): Returns an array of Types from the list of
26861         defined interfaces.
26862
26863         * typemanager.c (AddUserType): Mechanism to track user types (puts
26864         the type on the global type hash, and allows us to close it at the
26865         end). 
26866
26867 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
26868
26869         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
26870         RecordInterface instead.
26871
26872         * cs-parser.jay: Updated to reflect changes above.
26873
26874         * decl.cs (Definition): Keep track of the TypeBuilder type that
26875         represents this type here.  Not sure we will use it in the long
26876         run, but wont hurt for now.
26877
26878         * driver.cs: Smaller changes to accomodate the new code.
26879
26880         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
26881         when done. 
26882
26883         * rootcontext.cs (CreateInterface):  New method, used to create
26884         the System.TypeBuilder type for interfaces.
26885         (ResolveInterfaces): new entry point to resolve the interface
26886         hierarchy. 
26887         (CodeGen): Property, used to keep track of the code generator.
26888
26889 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
26890
26891         * cs-parser.jay: Add a second production for delegate_declaration
26892         with `VOID'.
26893
26894         (enum_body): Put an opt_comma here instead of putting it on
26895         enum_body or enum_member_declarations so we can handle trailing
26896         commas on enumeration members.  Gets rid of a shift/reduce.
26897
26898         (type_list): Need a COMMA in the middle.
26899
26900         (indexer_declaration): Tell tokenizer to recognize get/set
26901
26902         * Remove old targets.
26903
26904         * Re-add the parser target.
26905
26906 2001-07-13  Simon Cozens <simon@simon-cozens.org>
26907
26908         * cs-parser.jay: Add precendence rules for a number of operators
26909         ot reduce the number of shift/reduce conflicts in the grammar.
26910
26911 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
26912
26913         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
26914         and put it here.
26915
26916         Get rid of old crufty code.
26917
26918         * rootcontext.cs: Use this to keep track of the parsed
26919         representation and the defined types available to the program. 
26920
26921         * gen-treedump.cs: adjust for new convention.
26922
26923         * type.cs: Split out the type manager, and the assembly builder
26924         from here. 
26925
26926         * typemanager.cs: the type manager will live here now.
26927
26928         * cil-codegen.cs: And the code generator here. 
26929
26930 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
26931
26932         * makefile: Fixed up for easy making.
26933
26934 2001-07-13  Simon Cozens <simon@simon-cozens.org>
26935
26936         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
26937         the 
26938
26939         (unary_expression): Expand pre_increment_expression and
26940         post_decrement_expression to reduce a shift/reduce.
26941
26942 2001-07-11  Simon Cozens
26943
26944         * cs-tokenizer.cs: Hex numbers should begin with a 0.
26945
26946         Improve allow_keyword_as_indent name.
26947
26948 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
26949
26950         * Adjustments for Beta2. 
26951
26952 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
26953
26954         * decl.cs: Added `Define' abstract method.
26955         (InTransit): new property, used to catch recursive definitions. 
26956
26957         * interface.cs: Implement `Define'. 
26958
26959         * modifiers.cs: Map Modifiers.constants to
26960         System.Reflection.TypeAttribute flags.
26961
26962         * class.cs: Keep track of types and user-defined types.
26963         (BuilderInit): New method for creating an assembly
26964         (ResolveType): New function to launch the resolution process, only
26965         used by interfaces for now.
26966
26967         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
26968         that are inserted into the name space. 
26969
26970 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
26971
26972         * ARGH.  I have screwed up my tree so many times due to the use of
26973         rsync rather than using CVS.  Going to fix this at once. 
26974
26975         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
26976         load types.
26977
26978 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
26979
26980         * Experiment successful: Use System.Type rather that our own
26981         version of Type.  
26982
26983 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
26984
26985         * cs-parser.jay: Removed nsAliases from here.
26986
26987         Use new namespaces, handle `using XXX;' 
26988
26989         * namespace.cs: Reimplemented namespace handling, use a recursive
26990         definition of the class.  Now we can keep track of using clauses
26991         and catch invalid using clauses.
26992
26993 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
26994
26995         * gen-treedump.cs: Adapted for all the renaming.
26996
26997         * expression.cs (Expression): this class now has a Type property
26998         which returns an expression Type.
26999
27000         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
27001         `Type', as this has a different meaning now in the base
27002
27003 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
27004
27005         * interface.cs, class.cs: Removed from all the sources the
27006         references to signature computation, as we can not do method
27007         signature computation during the parsing time, as we are not
27008         trying to solve at that point distinguishing:
27009
27010         class X {
27011                 void a (Blah x) {}
27012                 void a (NS.Blah x) {}
27013         }
27014
27015         Which depending on the context might be valid or not, as we do not
27016         know if Blah is the same thing as NS.Blah at that point.
27017
27018         * Redid everything so the code uses TypeRefs now instead of
27019         Types.  TypeRefs are just temporary type placeholders, that need
27020         to be resolved.  They initially have a pointer to a string and the
27021         current scope in which they are used.  This is used later by the
27022         compiler to resolve the reference to an actual Type. 
27023
27024         * DeclSpace is no longer a CIR.Type, and neither are
27025         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
27026         are all DeclSpaces, but no Types. 
27027
27028         * type.cs (TypeRefManager): This implements the TypeRef manager,
27029         which keeps track of all the types that need to be resolved after
27030         the parsing has finished. 
27031
27032 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
27033
27034         * ARGH.  We are going to have to store `foreach' as a class rather
27035         than resolving it, as we need to verify error 1579 after name
27036         resolution.   *OR* we could keep a flag that says `This request to
27037         IEnumerator comes from a foreach statement' which we can then use
27038         to generate the error.
27039
27040 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
27041
27042         * class.cs (TypeContainer.AddMethod): we now add methods to the
27043         MethodGroup instead of the method hashtable.  
27044
27045         * expression.cs: Add MethodGroup abstraction, which gets us one
27046         step closer to the specification in the way we handle method
27047         declarations.  
27048
27049         * cs-parser.jay (primary_expression): qualified_identifier now
27050         tried to match up an identifier to a local variable reference or
27051         to a parameter reference.
27052
27053         current_local_parameters is now a parser global variable that
27054         points to the current parameters for the block, used during name
27055         lookup.
27056
27057         (property_declaration): Now creates an implicit `value' argument to
27058         the set accessor.
27059
27060 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
27061
27062         * parameter.cs: Do not use `param' arguments as part of the
27063         signature, per the spec.
27064
27065 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
27066
27067         * decl.cs: Base class for classes, structs and interfaces.  This
27068         is the "Declaration Space" 
27069
27070         * cs-parser.jay: Use CheckDef for checking declaration errors
27071         instead of having one on each function.
27072
27073         * class.cs: Factor out some code for handling error handling in
27074         accordance to the "Declarations" section in the "Basic Concepts"
27075         chapter in the ECMA C# spec.
27076
27077         * interface.cs: Make all interface member classes derive from
27078         InterfaceMemberBase.
27079
27080 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
27081
27082         * Many things: all interfaces are parsed and generated in
27083         gen-treedump.  Support for member variables, constructors,
27084         destructors, properties, constants is there.
27085
27086         Beginning of the IL backend, but very little done, just there for
27087         testing purposes. 
27088
27089 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
27090
27091         * cs-parser.jay: Fix labeled statement.
27092
27093         * cs-tokenizer.cs (escape): Escape " and ' always.
27094         ref_line, ref_name: keep track of the line/filename as instructed
27095         by #line by the compiler.
27096         Parse #line.
27097
27098 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
27099
27100         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
27101         to match the values in System.CodeDOM.
27102
27103         Divid renamed to Divide.
27104
27105         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
27106         statements. 
27107         (Statements.set): remove.
27108
27109         * System.CodeDOM/CodeCatchClause.cs: always have a valid
27110         statements. 
27111
27112         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
27113         falseStatements always have valid values. 
27114
27115         * cs-parser.jay: Use System.CodeDOM now.
27116