2010-04-15 Jb Evain <jbevain@novell.com>
[mcs.git] / mcs / ChangeLog
blob64d8c1e0118c6fca08aad5d0a1f7076125c01a71
1 2010-04-12  Marek Safar  <marek.safar@gmail.com>
3         * expression.cs, attribute.cs, parameter.cs: More attribute type
4         checks.
6 2010-04-12  Marek Safar  <marek.safar@gmail.com>
8         A fix for bug #593342
10         * generic.cs, parameter.cs, argument.cs, field.cs, property.cs,
11         decl.cs, roottypes.cs, constant.cs, nullable.cs, expression.cs,
12         method.cs, ecore.cs, class.cs, delegate.cs, attribute.cs,
13         codegen.cs: Add custom attribute encoder to deal with unfinished
14         types and easier corlib bootstrap from its own types.
16 2010-03-26  Marek Safar  <marek.safar@gmail.com>
18         * cs-parser.jay: Report invalid constraint types.
20 2010-03-16  Jb Evain  <jbevain@novell.com>
22         * Makefile: rename the net_2_1 profile to moonlight.
24 2010-03-11  Marek Safar  <marek.safar@gmail.com>
26         * statement.cs, cs-parser.jay: Use correct location for empty
27         statements.
29 2010-03-11  Marek Safar  <marek.safar@gmail.com>
31         * cs-parser.jay: Disable Location from expression.
32         
33         * generic.cs: Check constraints for overrides in the parser.
35 2010-03-09  Marek Safar  <marek.safar@gmail.com>
37         * cs-parser.jay (GetLocation): Use an expression when available.
39 2010-03-04  Marek Safar  <marek.safar@gmail.com>
41         A fix for bug #582579
42         * ecore.cs (FieldExpr): Don't optimize cross reference loads.
44 2010-03-04  Marek Safar  <marek.safar@gmail.com>
46         A patch by kornelpal@gmail.com
47         
48         * dynamic.cs, anonymous.cs, rootcontext.cs, class.cs: Don't make
49         compiler generated classes sealed by default. Emit and close top
50         level compiler generated classes as well. 
51         
52         * support.cs: Use RuntimeHelpers.GetHashCode.
54 2010-03-03  Rolf Bjarne Kvinge  <RKvinge@novell.com>
56         * Makefile: We need to use the internal bootstrapping gmcs for
57         net_2_1_bootstrap too now.
59 2010-03-02  Raja R Harinath  <harinath@hurrynot.org>
61         * expression.cs (IndexerAccess.ResolveAccessor): Add CS1540 check.
63 2010-03-02  Marek Safar  <marek.safar@gmail.com>
65         * cs-tokenizer.cs: Missed few locations in previous fix.
67 2010-03-02  Marek Safar  <marek.safar@gmail.com>
69         * cs-tokenizer.cs, argument.cs, dynamic.cs, assign.cs, anonymous.cs,
70         nullable.cs, expression.cs, statement.cs, cs-parser.jay, cfold.cs:
71         Report correct location for operator errors.
73 2010-03-02  Marek Safar  <marek.safar@gmail.com>
75         * typemanager.cs (IsDynamicType): Don't check external types when
76         the attribute is not external.
78 2010-02-24  Marek Safar  <marek.safar@gmail.com>
80         A fix for bug #582579
81         * decl.cs (IsExposedFromAssembly): Use PartialContainer for parent
82         modifiers.
84 2010-02-24  Marek Safar  <marek.safar@gmail.com>
86         A fix for bug #581804
87         * ecore.cs: Fixed type comparison.
89 2010-02-08  Miguel de Icaza  <miguel@novell.com>
91         * namespace.cs (CompletionGetTypesStartingWith): Do not include
92         private types in the completion results.
94         * cs-parser.jay: Bubble completions after "from x in ?" and "from x
95         ... let ?"
97 2010-02-17  Marek Safar  <marek.safar@gmail.com>
99         * generic.cs, field.cs, decl.cs, cs-parser.jay: Simplify special
100         constraint parsing.
102 2010-02-14  Miguel de Icaza  <miguel@novell.com>
104         * eval.cs: Do not do the report printer dance unless the user has
105         set the DescribeTypes feature.
107 2010-02-10  Marek Safar  <marek.safar@gmail.com>
109         * argument.cs, dynamic.cs, expression.cs: Track RC API changes.
111 2010-02-08  Marek Safar  <marek.safar@gmail.com>
113         A fix for bug #577029
114         * anonymous.cs: Fixed TypeBuilder* check.
116 2010-02-06  Miguel de Icaza  <miguel@novell.com>
118         * eval.cs (CompileBlock): Also undo if there are problems during
119         semantic analysis, fixes various cases where invalid C# code would
120         be reported, but the internal changes would not be undone.
122 2010-02-03  Miguel de Icaza  <miguel@novell.com>
124         * driver.cs: Change the --fatal flag to allow a number to be
125         passed, this ignores the first N fatal errors.   Useful to debug
126         errors that do not happen on the first hit.
128         * cs-parser.jay (invocation_expression): accept both the
129         CLOSE_PARENS and COMPLETE_COMPLETION, this allows completions
130         inside an invocation.
132         * driver.cs: Expose FatalErrors.
134         * eval.cs: Initialize the printer's Fatal property from the
135         Driver's FatalError flag, this allows csharp --fatal to work
136         again. 
138         Add support for calling Describe (typeof (TYPE)) if the expression
139         entered is a TYPE.
140         
141 2010-02-02  Marek Safar  <marek.safar@gmail.com>
143         A fix for bug #574991
144         * rootcontext.cs, class.cs, driver.cs: Hide enhanced warnings behind
145         --lint.
147 2010-02-02  Marek Safar  <marek.safar@gmail.com>
149         A fix for bug #575986
150         * expression.cs: Don't mutate typeof type definitions.
152 2010-01-28  Marek Safar  <marek.safar@gmail.com>
154         * decl.cs: Use only one set of modifiers.
156 2010-01-26  Marek Safar  <marek.safar@gmail.com>
158         A fix for bug #573329
159         * eval.cs: Don't disable error reporting completely on silent mode.
160         
161 2010-01-25  Marek Safar  <marek.safar@gmail.com>
163         A fix for bug #573312
164         * constant.cs, expression.cs, ecore.cs: Emit correct offset for
165         pointer index of unknown size types greater than 2.
167 2010-01-15  Marek Safar  <marek.safar@gmail.com>
169         * *.cs: Use only 1 member kind enum.
171 2010-01-15  Marek Safar  <marek.safar@gmail.com>
173         * *.cs: Add event specification.
175 2010-01-14  Marek Safar  <marek.safar@gmail.com>
177         * membercache.cs: Extracted from decl.cs.
178         
179         * *.cs: Put more infrastructure in place.
181 2010-01-13  Marek Safar  <marek.safar@gmail.com>
183         * *.cs: Add property specification, unused yet.
185 2010-01-13  Marek Safar  <marek.safar@gmail.com>
187         * property.cs: Move all property based declarations into a new file.
189 2010-01-13  Marek Safar  <marek.safar at gmail.com>
191         * expression.cs (Conditional): Resolve reduced expression.
193 2010-01-13  Marek Safar  <marek.safar at gmail.com>
195         * *.cs: Introduced non-generic method specification.
197 2010-01-07  Marek Safar  <marek.safar@gmail.com>
199         * method.cs: Move all method based declarations into a new file.
201 2010-01-07  Marek Safar  <marek.safar@gmail.com>
203         * *.cs: Extract field specification.
205 2009-12-17  Marek Safar  <marek.safar@gmail.com>
207         * field.cs: Extracted from class.cs
209 2009-12-15  Marek Safar  <marek.safar@gmail.com>
211         * attribute.cs (GetFixedBuffer): Work on field definition only.
213 2009-12-15  Marek Safar  <marek.safar@gmail.com>
215         * *.cs: Clean up NET_4_0 conditional where possible.
217 2009-12-14 Rodrigo Kumpera  <rkumpera@novell.com>
219         support.cs (DynamicType): Assembly property returns the assembly builder.
220         This is required due to how compiler context works in corlib.
222 2009-12-14  Marek Safar  <marek.safar@gmail.com>
224         A fix for bug #564376
225         * assign.cs (LocalTemporary): Removed no longer needed special
226         by-ref handling.
228 2009-12-11  Marek Safar  <marek.safar@gmail.com>
230         * modifiers.cs, decl.cs, iterators.cs, const.cs, anonymous.cs,
231         class.cs, delegate.cs, cs-parser.jay, enum.cs: Turn modifiers into
232         enum for easier debugging.
234 2009-12-10  Marek Safar  <marek.safar@gmail.com>
236         * decl.cs, anonymous.cs, class.cs: Sealed Define it's now main entry
237         point.
238         
239         * parameter.cs, delegate.cs, dynamic.cs: Don't use builder methods
240         directly.
242 2009-12-10  Marek Safar  <marek.safar@gmail.com>
244         * cs-parser.jay, statement.cs: Handle parser error in code
245         completition.
247 2009-12-10  Marek Safar  <marek.safar@gmail.com>
249         * ecore.cs: Ignore base imported methods when they are already
250         in method bag.
251         
252         * eval.cs: Handle non-existent keys.
253         
254         * report.cs, driver.cs: Make fatal work with console printer only.
256 2009-12-08 Rodrigo Kumpera  <rkumpera@novell.com>
258         * typemanager.cs (MakeGenericMethod): Fix stupid mistake.
260 2009-12-08 Rodrigo Kumpera  <rkumpera@novell.com>
262         * typemanager.cs: Add MakeGenericMethod that checks if the method
263         is really the generic method definition.
265         ecore.cs (MethodGroupExpr:IsApplicable): Use new TypeManager function
266         to inflate generic methods.
268 2009-12-08  Marek Safar  <marek.safar@gmail.com>
270         A fix for bug #561149
271         * anonymous.cs: Use actual type parameters when checking for generic
272         method host.
274 2009-12-08  Marek Safar  <marek.safar@gmail.com>
276         A fix for bug #561369
277         * expression.cs (DoNumericPromotion): Fixed typo.
279 2009-12-08  Marek Safar  <marek.safar@gmail.com>
281         *.cs: Moving to generics world.
283         cs-parser.jay: Removed current_array_type.
285 2009-12-07  Marek Safar  <marek.safar@gmail.com>
287         *.cs: Moving to generics world.
289 2009-12-04  Marek Safar  <marek.safar@gmail.com>
291         *.cs: Moving to generics world (day 2).
293 2009-12-03  Marek Safar  <marek.safar@gmail.com>
295         *.cs: Moving to generics world.
297 2009-12-02  Marek Safar  <marek.safar@gmail.com>
299         * typemanager.cs, parameter.cs, class.cs, delegate.cs, attribute.cs:
300         Encode dynamic type attribute for elements where attributes cannot
301         be used.
303 2009-12-01  Marek Safar  <marek.safar@gmail.com>
305          argument.cs, assign.cs, expression.cs, cs-parser.jay: Named
306          arguments by ref.
308 2009-12-01  Marek Safar  <marek.safar@gmail.com>
310         A fix for bug #360455
311         * class.cs: Never report a unused warning for generic events to
312         workaround wrong expression type.
314 2009-11-30  Marek Safar  <marek.safar@gmail.com>
316         A fix for bug #558305
317         * decl.cs, class.cs: Check partial method definitions using correct
318         flag.
320 2009-11-30  Marek Safar  <marek.safar@gmail.com>
322         * argument.cs: Don't cache rarely used dynamic flag.
324 2009-11-27  Marek Safar  <marek.safar@gmail.com>
326         * cs-parser.jay: Use jay global stacks (saves over 3MB for corlib).
328 2009-11-27  Marek Safar  <marek.safar@gmail.com>
330         * ecore.cs (SimpleName): Removed no longer needed in_transit as
331         Resolve is now non-reentrant (saves ~0.6MB for corlib).
333 2009-11-26  Marek Safar  <marek.safar@gmail.com>
335         A fix for bug #545081
336         * decl.cs: Check private nested types of nested types recursively.
338 2009-11-26  Marek Safar  <marek.safar@gmail.com>
340         A fix for bug #558305
341         * location.cs: Ignore self referencing #line directive
343 2009-11-26  Marek Safar  <marek.safar@gmail.com>
345         A fix for bug #558292
346         * class.cs: Allow single unsafe fixed buffer fields.
348 2009-11-26  Marek Safar  <marek.safar@gmail.com>
350         * expression: Optimize few more zero-based operations.
352 2009-11-26  Marek Safar  <marek.safar@gmail.com>
354         * cs-tokenizer.cs, cs-parser.jay: Simplify literal parsing, also
355         avoids boxing of literal values.
357 2009-11-26  Marek Safar  <marek.safar@gmail.com>
359         * cs-tokenizer.cs, argument.cs, eval.cs, linq.cs, decl.cs,
360         expression.cs, ecore.cs, location.cs, cs-parser.jay, attribute.cs,
361         codegen.cs: LocatedToken redesing to avoid excessive allocation and
362         boxing (saves ~7MB for corlib). Also fixes presise token location.
364 2009-11-25  Marek Safar  <marek.safar@gmail.com>
366         * ecore.cs, cs-parser.jay: Keep parser structures local. Share
367         common data buckers.
369 2009-11-24  Marek Safar  <marek.safar@gmail.com>
371         * expression.cs: Lower static array initializer barrier.
372         
373         * support.cs, driver.cs: Share reader buffer.
375 2009-11-23  Marek Safar  <marek.safar@gmail.com>
377         * cs-tokenizer.cs, support.cs: Some tokenizer optimizations.
379 2009-11-23  Marek Safar  <marek.safar@gmail.com>
381         * cs-tokenizer.cs, support.cs: Use Dictionary instead of Hashtable,
382         cleanup some obsolete code.
384 2009-11-20  Marek Safar  <marek.safar@gmail.com>
386         * context.cs, expression.cs, ecore.cs, complete.cs: Cleaned up
387         Expression.Resolve.
389 2009-11-20  Marek Safar  <marek.safar@gmail.com>
391         * *.cs: Resolved expressions are never resolved again, this helps to
392         uncover some not easy to find bugs and improve the performance.
394 2009-11-19  Marek Safar  <marek.safar@gmail.com>
396         * *.cs: Made constant expressions fully compatible with any other
397         expression.
399 2009-11-19  Marek Safar  <marek.safar@gmail.com>
401         * *.cs: DoResolve is a worker method and has to be protected.
403 2009-11-18  Marek Safar  <marek.safar@gmail.com>
405         * *.cs: More context specific handling.
407 2009-11-17  Marek Safar  <marek.safar@gmail.com>
409         * *.cs: More context specific handling.
411 2009-11-16  Marek Safar  <marek.safar@gmail.com>
413         * dynamic.cs, class.cs: Removed few fixed user types conversions.
414         
415         * symbolwriter.cs: Uses public ILOffset.
417 2009-11-13  Marek Safar  <marek.safar@gmail.com>
419         A fix for bug #553650
420         * generic.cs: Another missing TypeToCoreType, still too many to fix.
422 2009-11-13  Marek Safar  <marek.safar@gmail.com>
424         A fix for bug #555170
426         * class.cs, delegate.cs, enum.cs: Constants have to be available
427         for parameters resolve.
429 2009-11-12  Marek Safar  <marek.safar@gmail.com>
431         * typemanager.cs, argument.cs, support.cs, delegate.cs: Dynamic
432         arrays.
434 2009-11-12  Marek Safar  <marek.safar@gmail.com>
436         * argument.cs, context.cs, expression.cs, ecore.cs: Dynamic binding
437         with a statically known candidate set.
439 2009-11-11  Scott Peterson  <lunchtimemama@gmail.com>
441         * generic.cs: Made type inflation for generic constraint checks
442         recursive. This fixes BGO #553655.
444 2009-11-11  Marek Safar  <marek.safar@gmail.com>
446         * dynamic.cs, decl.cs, expression.cs, ecore.cs: More dynamic type
447         checks.
449 2009-11-10  Marek Safar  <marek.safar@gmail.com>
451         * typemanager.cs, generic.cs, parameter.cs, argument.cs, dynamic.cs,
452         linq.cs, rootcontext.cs, ecore.cs, class.cs, delegate.cs,
453         attribute.cs: Add some dynamic error checking.
455 2009-11-07  Marek Safar  <marek.safar@gmail.com>
457         A fix for bug #553465
459         * expression.cs: Fixed mixed version of expression tree anonymous
460         type.
462 2009-11-06  Marek Safar  <marek.safar@gmail.com>
464         A fix for bug #553031
466         * linq.cs, expression.cs, class.cs, cs-parser.jay: Initialize
467         expression tree version of anonymous type with members declaration.
469 2009-11-05  Marek Safar  <marek.safar@gmail.com>
471         * parameter.cs: Handle nullable parameter default expression.
472         
473         * argument.cs, dynamic.cs, expression.cs, support.cs, ecore.cs,
474         class.cs, attribute.cs: Check for wrong dynamic arguments.
476 2009-11-05  Marek Safar  <marek.safar@gmail.com>
478         * statement.cs: Dynamic statements.
480 2009-11-04  Marek Safar  <marek.safar@gmail.com>
482         * dynamic.cs, assign.cs, context.cs, expression.cs, ecore.cs:
483         Compound assignments over dynamic type.
485 2009-11-03  Marek Safar  <marek.safar@gmail.com>
487         * argument.cs, dynamic.cs, expression.cs, delegate.cs: Dynamic
488         constructor arguments.
490 2009-10-30  Marek Safar  <marek.safar@gmail.com>
492         * dynamic.cs, convert.cs, assign.cs, constant.cs, expression.cs,
493         codegen.cs: Unary mutator on dynamic member access expression.
495 2009-10-29  Marek Safar  <marek.safar@gmail.com>
497         A fix for bug #550580   
498         * convert.cs: Don't eliminate explicit precission casts.
500 2009-10-28  Marek Safar  <marek.safar@gmail.com>
502         A fix for bug #550404
503         
504         * parameter.cs, iterators.cs, context.cs, anonymous.cs,
505         expression.cs, statement.cs, ecore.cs: Quote any nested expression
506         tree.
508 2009-10-27  Marek Safar  <marek.safar@gmail.com>
510         * constant.cs, nullable.cs: Create nullable-null as LiftedNull
511         constant.
512         
513         * class.cs: Allow nullable binary user operators.
515 2009-10-26  Marek Safar  <marek.safar@gmail.com>
517         * expression.cs: Move binary expression optimization at the end of
518         resolve.
520 2009-10-23  Marek Safar  <marek.safar@gmail.com>
522         * constant.cs, nullable.cs, expression.cs, literal.cs, cfold.cs:
523         Separate NullConstant from NullLiteral.
525 2009-10-23  Marek Safar  <marek.safar@gmail.com>
527         * typemanager.cs, eval.cs, decl.cs, roottypes.cs, context.cs,
528         anonymous.cs, expression.cs, rootcontext.cs, ecore.cs, class.cs,
529         flowanalysis.cs, cs-parser.jay, driver.cs, codegen.cs: Split
530         ModuleContainer. Add common unclosed member check routine.
532 2009-10-22  Marek Safar  <marek.safar@gmail.com>
534         * argument.cs: Use literal flag for real literals only.
536         * dynamic.cs: Use correct return type for custom delegates.
538 2009-10-22  Marek Safar  <marek.safar@gmail.com>
540         * dynamic.cs, expression.cs: Pass logical binary flag to dynamic
541         resolver.
543 2009-10-22  Marek Safar  <marek.safar@gmail.com>
545         * dynamic.cs, ecore.cs: Dynamic invocation with void return type.
547 2009-10-21  Marek Safar  <marek.safar@gmail.com>
549         * dynamic.cs, convert.cs, expression.cs, ecore.cs: Wrap array index
550         conversion.
552 2009-10-21  Marek Safar  <marek.safar@gmail.com>
554         * typemanager.cs, dynamic.cs, expression.cs: Don't resolve runtime
555         binder flags.
557 2009-10-20  Marek Safar  <marek.safar@gmail.com>
559         * argument.cs, dynamic.cs, expression.cs: Latest API update.
561 2009-10-19  Marek Safar  <marek.safar@gmail.com>
563         * typemanager.cs, expression.cs: Dynamic array initializer.
565 2009-10-16  Marek Safar  <marek.safar@gmail.com>
567         * typemanager.cs, rootcontext.cs: Clear -nostdlib flag when object
568         is imported.
570 2009-10-16  Marek Safar  <marek.safar@gmail.com>
572         A fix for bug #493523, #507067
573         * convert.cs, nullable.cs, expression.cs: Do implicit and explicit
574         standard nullable conversion using underlying standard conversion
575         and not full conversion.
577 2009-10-15  Marek Safar  <marek.safar@gmail.com>
579         * dynamic.cs, expression.cs, ecore.cs, delegate.cs: Check return
580         type in VerifyArgumentsCompat.
582 2009-10-15  Marek Safar  <marek.safar@gmail.com>
584         * nullable.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
585         Reject variable used with type arguments.
587 2009-10-14  Marek Safar  <marek.safar@gmail.com>
589         * argument.cs, dynamic.cs, assign.cs, expression.cs, ecore.cs:
590         Implement dynamic expressions assignment.
592 2009-10-14  Marek Safar  <marek.safar@gmail.com>
594         * expression.cs: Build underlying expression when resolving unary
595         mutators.
597 2009-10-14  Marek Safar  <marek.safar@gmail.com>
599         * expression.cs: Emit enum array initializer using binary blob.
601 2009-10-08  Marek Safar  <marek.safar@gmail.com>
603         * typemanager.cs, constant.cs: Optimize decimal constants which fit
604         to long range.
606 2009-10-07  Marek Safar  <marek.safar@gmail.com>
608         * typemanager.cs: Reset object_type.
609         
610         * assign: Made SimpleAssign public.
612 2009-10-06  Marek Safar  <marek.safar@gmail.com>
614         * typemanager.cs, decl.cs, namespace.cs, ecore.cs, class.cs: Pass
615         invocation assembly to IsThisOrFriendAssembly.
617 2009-10-05  Marek Safar  <marek.safar@gmail.com>
619         * expression.cs: Equality comparison of generic parameter with
620         class constraint.
622 2009-10-05  Marek Safar  <marek.safar@gmail.com>
624         A fix for bug #543570
625         * generic.cs: Import predefined constraints correctly.
627 2009-10-02  Marek Safar  <marek.safar@gmail.com>
629         * ecore.cs: Don't crash on overloads with optional paremeters where
630         arguments count overflows.
631         
632         * parameter.cs: Import optional parameter constants using optional
633         value type.
635 2009-10-01  Marek Safar  <marek.safar@gmail.com>
637         * Makefile: Default is gmcs compiler.
639 2009-10-01  Marek Safar  <marek.safar@gmail.com>
641         * cs-parser.jay: Fixed few NRE.
643 2009-10-01  Marek Safar  <marek.safar@gmail.com>
645         * cs-parser.jay, driver.cs: Expose parser exception in verbose mode.
647 2009-09-30  Marek Safar  <marek.safar@gmail.com>
649         * linq.cs, convert.cs, assign.cs, expression.cs, ecore.cs: Add
650         ShimExpression, ImplicitCast.
652 2009-09-30  Marek Safar  <marek.safar@gmail.com>
654         A fix for bug #542959
655         * delegate.cs: Emit correct delegate instance variable when there
656         are static and non-static overloads.
658 2009-09-29  Marek Safar  <marek.safar@gmail.com>
660         * dynamic.cs, linq.cs, anonymous.cs, expression.cs, statement.cs,
661         ecore.cs, cs-parser.jay: Unary expression dynamic compiler.
663 2009-09-28  Marek Safar  <marek.safar@gmail.com>
665         A fix for bug #542487
666         * ecore.cs: Resolve extension methods hidden by properties.
668 2009-09-25  Marek Safar  <marek.safar@gmail.com>
670         * expression.cs, ecore.cs: More dynamic binary expressions.
672 2009-09-22  Marek Safar  <marek.safar@gmail.com>
674         * nullable.cs, expression.cs: Fixed null lifted conversion for
675         bitwise enum operations.
677 2009-09-22  Marek Safar  <marek.safar@gmail.com>
679         * convert.cs, ecore.cs: Fixed explicit unsafe coversion of long
680         values in checked context.
682 2009-09-22  Marek Safar  <marek.safar@gmail.com>
684         * expression.cs, ecore.cs: Fixed array index constant conversion.
686 2009-09-20  Miguel de Icaza  <miguel@novell.com>
688         * expression.cs: Do not crash when MemberLookup returns something
689         that is not a MemberExpr here.   Report error 582 instead. 
691         Fixes #499988.
693 2009-09-18  Marek Safar  <marek.safar@gmail.com>
695         * decl.cs, class.cs: Check protected property accessors.
697 2009-09-18  Marek Safar  <marek.safar@gmail.com>
699         * dynamic.cs, assign.cs: Dynamic compound assignment.
701 2009-09-17  Marek Safar  <marek.safar@gmail.com>
703         * expression.cs: Fixed compound assignment explicit conversion.
705 2009-09-17  Marek Safar  <marek.safar@gmail.com>
707         * expression.cs, ecore.cs: Cannot infer variables from method group.
709 2009-09-16  Marek Safar  <marek.safar@gmail.com>
711         * argument.cs, dynamic.cs, convert.cs, context.cs, anonymous.cs,
712         constant.cs, nullable.cs, expression.cs, literal.cs, ecore.cs,
713         codegen.cs: Dynamic binary operations scaffolding.
715 2009-09-15  Marek Safar  <marek.safar@gmail.com>
717         * expression.cs: Fixes nullable promotion for enum type variables.
719 2009-09-11  Marek Safar  <marek.safar@gmail.com>
721         * driver.cs, dynamic.cs: Reset more static variables.
723 2009-09-11  Marek Safar  <marek.safar@gmail.com>
725         * dynamic.cs, expression.cs, rootcontext.cs, namespace.cs, ecore.cs,
726         driver.cs: Introduced Expression::MakeExpression.
728 2009-09-11  Marek Safar  <marek.safar@gmail.com>
730         * eval.cs: Exposed MessageOutput instead of cleaning up eval API.
732 2009-09-09  Marek Safar  <marek.safar@gmail.com>
734         * eval.cs, report.cs: Use Console.Out for all eval error or warning
735         output.
737 2009-09-09  Marek Safar  <marek.safar@gmail.com>
739         A fix for bug #518707
740         * expression.cs (Is): Optimize only generic parameter type
741         expression probing value type generic parameter.
743 2009-09-09  Marek Safar  <marek.safar@gmail.com>
745         A fix for bug #532571
746         * ecore.cs: Check for simple name type arguments used with
747         non-generic type.
749 2009-09-08  Marek Safar  <marek.safar@gmail.com>
751         A fix for bug #497421
752         * generic.cs (CheckConstraint): Don't use buildin types to check for
753         parameterless constructor.
755 2009-09-08  Marek Safar  <marek.safar@gmail.com>
757         A fix for bug #537402
758         * generic.cs (CheckConstraint): Correctly inflate generic type
759         arguments when checking generic method. 
761 2009-09-08  Marek Safar  <marek.safar@gmail.com>
763         A fix for bug #536463
764         * decl.cs (AddToContainer): Don't report collision between explicit
765         and parameterless non-explicit members.
767 2009-09-08  Marek Safar  <marek.safar@gmail.com>
769         * eval.cs: Reset more static stuff.
771 2009-09-07  Marek Safar  <marek.safar@gmail.com>
773         A fix for bug #324625
774         * expression.cs, ecore.cs: Create nested generic type expression
775         using declaring and not current type.
777 2009-09-07  Marek Safar  <marek.safar@gmail.com>
779         * *.cs: Changed Report class to accept various output printers and
780         be an instance class. An expression resolver can now use different
781         message reporter for each call and Report.Error can safely throw
782         an exception. Part of ongoing work to turn mcs into proper library.
784 2009-09-04  Marek Safar  <marek.safar@gmail.com>
786         * statement.cs, ecore.cs: Removed error reporting from emit code.
788 2009-09-04  Marek Safar  <marek.safar@gmail.com>
790         * cs-parser.jay, parameter.cs: Moved parser check out of constructor
792 2009-09-03  Marek Safar  <marek.safar@gmail.com>
794         * anonymous.cs, expression.cs, statement.cs, cs-parser.jay: Moved
795         parser checks out of constructors.
797 2009-09-02  Marek Safar  <marek.safar@gmail.com>
799         * expression.cs, statement.cs, ecore.cs: Use common Report.Error.
801 2009-09-02  Marek Safar  <marek.safar@gmail.com>
803         A fix for bug #535448
804         * anonymous.cs, class.cs: Copy return label between all contexts.
806 2009-09-02  Marek Safar  <marek.safar@gmail.com>
808         A fix for bug #535395
809         * namespace.cs: Resolve context can be null.
811 2009-08-25  Marek Safar  <marek.safar@gmail.com>
813         A fix for bug #533912
814         * generic.cs: Use correct context for constraints resolving.
816 2009-08-25  Marek Safar  <marek.safar@gmail.com>
818         A fix for bug #532630
819         * driver.cs: Trim conditional symbols.
821 2009-08-25  Marek Safar  <marek.safar@gmail.com>
823         * context.cs: New file.
824         
825         * *.exe.sources, *.csproj: Updated.
827 2009-08-25  Marek Safar  <marek.safar@gmail.com>
829         * generic.cs, parameter.cs, decl.cs, statement.cs, namespace.cs,
830         class.cs, generic-mcs.cs, codegen.cs: Add GetSignatureForError to
831         IMembercontext, some small cleanups.
833 2009-08-24  Marek Safar  <marek.safar@gmail.com>
835         * *.cs: Split ResolveContext and EmitContext.
837 2009-08-24  Marek Safar  <marek.safar@gmail.com>
839         * *.cs: Only ResolveContext implements IMemberContext.
841 2009-08-21  Marek Safar  <marek.safar@gmail.com>
843         * *.cs: Renamed IResolveContext to IMemberContext.
845 2009-08-21  Marek Safar  <marek.safar@gmail.com>
847         * *.cs: Detached ResolveContext from EmitContext.
849 2009-08-21  Marek Safar  <marek.safar@gmail.com>
851         * codegen.cs: Moved flow-analysis to BlockContext.
853 2009-08-21  Marek Safar  <marek.safar@gmail.com>
855         * *.cs: Detached BlockContext from EmitContext.
857 2009-08-20 Gonzalo Paniagua Javier <gonzalo@novell.com>
859         * statement.cs: avoid nullref when the return value of GetEnumerator()
860         does not contain any MoveNext() method.
862 2009-08-19  Marek Safar  <marek.safar@gmail.com>
864         * *.cs: Removed IResolveContext::GenericDeclContainer.
866 2009-08-19  Marek Safar  <marek.safar@gmail.com>
868         * class.cs, delegate.cs: Changed Delegate to be TypeContainer based.
870 2009-08-19  Marek Safar  <marek.safar@gmail.com>
872         * generic.cs, iterators.cs, expression.cs, statement.cs, ecore.cs,
873         cs-parser.jay, attribute.cs, codegen.cs: Better error reports.
875 2009-08-18  Marek Safar  <marek.safar@gmail.com>
877         * *.cs: Removed boolean fields from EmitContext.
879 2009-08-18  Marek Safar  <marek.safar@gmail.com>
881         * *.cs: Add IResolveContext::IsStatic.
883 2009-08-18  Marek Safar  <marek.safar@gmail.com>
885         * *.cs: Moved TopBlock's methods from EmitContext to TopBlock.
887 2009-08-17  Marek Safar  <marek.safar@gmail.com>
889         * *.cs: Removed DeclContainer from EmitContext.
891 2009-08-17  Marek Safar  <marek.safar@gmail.com>
893         * *.cs: Add IResolveContext::CurrentTypeParameters.
895 2009-08-14  Marek Safar  <marek.safar@gmail.com>
897         * *.cs: Removed TypeContainer and ContainerType from EmitContext.
899 2009-08-14  Marek Safar  <marek.safar@gmail.com>
901         * decl.cs, expression.cs, namespace.cs, ecore.cs, class.cs,
902         codegen.cs: Add IResolveContext::LookupExtensionMethod.
904 2009-08-13  Marek Safar  <marek.safar@gmail.com>
906         * decl.cs: Look in PartialContainer for parent type parameters.
908 2009-08-13  Marek Safar  <marek.safar@gmail.com>
910         * decl.cs, namespace.cs, ecore.cs, class.cs, attribute.cs,
911         codegen.cs: Add IResolveContext::LookupTypeParameter.
913 2009-08-13  Marek Safar  <marek.safar@gmail.com>
915         * lambda.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
916         Moved resolved logic from Emit to Resolve.
918 2009-08-13  Marek Safar  <marek.safar@gmail.com>
920         * parameter.cs, decl.cs, roottypes.cs, class.cs, attribute.cs,
921         codegen.cs: Reworked atttributes handling of ResolveContext.
923 2009-08-12  Marek Safar  <marek.safar@gmail.com>
925         * decl.cs, ecore.cs, class.cs, attribute.cs, codegen.cs: Pushed
926         LookupNamespaceOrType to ResolveContext.
928 2009-08-12  Marek Safar  <marek.safar@gmail.com>
930         * typemanager.cs, decl.cs, expression.cs, namespace.cs, ecore.cs,
931         class.cs: Removed unused parameters and methods.
933 2009-08-11  Marek Safar  <marek.safar@gmail.com>
935         * generic.cs, lambda.cs, anonymous.cs, statement.cs, generic-mcs.cs,
936         codegen.cs: Finding the best common type of a set of expressions for
937         lambda statements.
939 2009-08-07  Marek Safar  <marek.safar@gmail.com>
941         * dynamic.cs, expression.cs: More dynamic conversions.
943 2009-08-06  Miguel de Icaza  <miguel@novell.com>
945         * generic.cs: This loop was incorrect, it was increment ii, but
946         checking for `i'.  This was a change introduced to fix #327497,
947         now we fix #424012.
949         * class.cs: Catch another case for cs0533 error, fixes #324782.
951 2009-08-06 Rodrigo Kumpera  <rkumpera@novell.com>
953         * typemanager.cs (GetGenericArguments): SRE returns null for
954         generic methods on type builder instances if they are not generic
955         themselves. For example, for Foo<int>::Bar() it returns null, but
956         not for Foo<int>::Bar<>() or Foo<int>::Bar<double>().
958 2009-08-05  Marek Safar  <marek.safar@gmail.com>
960         * argument.cs, dynamic.cs, expression.cs, ecore.cs, class.cs,
961         delegate.cs: Work on dynamic binding.
963 2009-08-04  Marek Safar  <marek.safar@gmail.com>
965         A second fix for bug #525342
966         * class.cs: Attach partial method attributes to method
967         implementation.
969 2009-08-03  Marek Safar  <marek.safar@gmail.com>
971         * typemanager.cs, parameter.cs, support.cs, class.cs: Dynamic type
972         restrictions.
973         
974         * rootcontext.cs: Default to langversion v4.
976 2009-08-03  Marek Safar  <marek.safar@gmail.com>
978         * pending.cs: Check return type before member info is set.
980 2009-08-03  Marek Safar  <marek.safar@gmail.com>
982         * anonymous.cs: Fully initialize generic hoisted field expression.
984 2009-08-02  Miguel de Icaza  <miguel@novell.com>
986         * cs-parser.jay: Flag variables declared on the interactive shell
987         as used to prevent the 168 warning about local variable not being
988         used. 
990 2009-07-31  Marek Safar  <marek.safar@gmail.com>
992         * parameter.cs, dynamic.cs, support.cs, class.cs, delegate.cs,
993         attribute.cs: Emit dynamic export attribute.
995 2009-07-30  Marek Safar  <marek.safar@gmail.com>
997         * expression.cs: More verifier work.
999 2009-07-29  Marek Safar  <marek.safar@gmail.com>
1001         * nullable.cs: Fixed SRE crash during corlib compilation.
1003 2009-07-29  Marek Safar  <marek.safar@gmail.com>
1005         * generic.cs, typemanager.cs, decl.cs, iterators.cs, convert.cs,
1006         nullable.cs, expression.cs, ecore.cs, class.cs, attribute.cs:
1007         More TypeManager.TypeToCoreType needed.
1009 2009-07-29  Marek Safar  <marek.safar@gmail.com>
1011         * anonymous.cs: Update after recent SRE fixes.
1013 2009-07-28  Marek Safar  <marek.safar@gmail.com>
1015         * typemanager.cs, expression.cs, ecore.cs, delegate.cs: Use correct
1016         version of GetFieldHandle for fields of generic types.
1018 2009-07-27  Marek Safar  <marek.safar@gmail.com>
1020         * typemanager.cs, argument.cs, convert.cs, assign.cs, expression.cs,
1021         ecore.cs: Add TypeManager.IsDynamicType,
1022         PredefinedAttributes.Dynamic.
1024 2009-07-27  Marek Safar  <marek.safar@gmail.com>
1026         A fix for bug #415375
1027         * expression.cs: Fixed object and reference type parameter
1028         comparison.
1030 2009-07-27  Marek Safar  <marek.safar@gmail.com>
1032         A fix for bug #525342
1033         * class.cs: Attach partial method attributes to method
1034         implementation.
1036 2009-07-24  Marek Safar  <marek.safar@gmail.com>
1038         * argument.cs, dynamic.cs, expression.cs, class.cs, attribute.cs:
1039         Dynamic arguments.
1041 2009-07-24  Marek Safar  <marek.safar@gmail.com>
1043         * anonymous.cs (MutateField): Add imported types handling.
1045 2009-07-23  Marek Safar  <marek.safar@gmail.com>
1047         * expression.cs, delegate.cs: Moved arguments resolve into their
1048         counterparts expressions. Removed argument resolve from
1049         CollectionElementInitializer.
1051 2009-07-23  Marek Safar  <marek.safar@gmail.com>
1053         A fix for bug #523683
1054         * convert.cs, delegate.cs: Use common overload mechanism for method
1055         group conversion check.
1057 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1059         A fix for bug #523899
1060         * generics.cs: Exact type inference with other bound types.
1062 2009-07-22  Raja R Harinath  <harinath@hurrynot.org>
1064         Don't complain when the same type is implemented by the output
1065         assembly as well as multiple referenced assemblies
1066         * namespace.cs (RootNamespace.LookupTypeReflection): Add
1067         'must_be_unique' flag.
1068         (GlobalRootNamespace): Update to changes.
1069         (Namespace.LookupType): Pass 'must_be_unique' only when we don't
1070         already have a type in hand.
1072 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1074         * expression.cs: More verifier instrumentation.
1075         
1076         * statement.cs: Do proper throw expression conversion.
1078 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1080         A fix for bug #522789
1081         * expression.cs: Mutate invocation return type.
1083 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1085         * anonymous.cs: Split assignable and readonly generated variable
1086         references.
1088 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1090         A fix for bug #521671
1091         * statement.cs: Fixed crash when checking missing type.
1093 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1095         * typemanager.cs, generic.cs, argument.cs, linq.cs, convert.cs,
1096         assign.cs, expression.cs, statement.cs, support.cs, ecore.cs,
1097         class.cs, driver.cs: Work on dynamic binding.
1099         * dynamic.cs: New file.
1101         * *.sources, *.proj: Updated.
1103 2009-07-15  Marek Safar  <marek.safar@gmail.com>
1105         * expression.cs (Conditional): Avoid double Resolve.
1107 2009-07-13  Marcus Griep  <marcus@griep.us>
1109         * ecore.cs: Fix obscure bug with resolving members of interfaces
1110         that hide parent interface members. Fixes bug #444388 and corrects
1111         bug #323096
1113 2009-07-13  Marek Safar  <marek.safar@gmail.com>
1115         * expression.cs (LocalVariableReference): Bounce resolve.
1117 2009-07-10  Marek Safar  <marek.safar@gmail.com>
1119         * typemanager.cs, lambda.cs, parameter.cs, convert.cs, anonymous.cs,
1120         expression.cs, literal.cs, ecore.cs, complete.cs: Moved internal
1121         types to new class.
1122         
1123         * support.cs: New dynamic type wrapper.
1125 2009-07-08  Marek Safar  <marek.safar@gmail.com>
1127         * ecore.cs, cs-parser.jay: Better error reporting for implicitly
1128         typed local variable.
1130 2009-07-06  Marek Safar  <marek.safar@gmail.com>
1132         A fix for bug #519005
1133         * anonymous.cs: Use null_type as no return type placeholder.
1135 2009-07-02  Marek Safar  <marek.safar@gmail.com>
1137         * generic.cs: Handle type inference of identical type parameters
1138         with different bounds.
1140 2009-07-01  Marek Safar  <marek.safar@gmail.com>
1142         * expression.cs, class.cs: Events variance.
1143         
1144         * cs-parser.jay: Interface events error messages.
1146 2009-07-01  Marek Safar  <marek.safar@gmail.com>
1148         * generic.cs, argument.cs: Updated type inference logic to C# 4.0.
1150 2009-06-29  Marek Safar  <marek.safar@gmail.com>
1152         * parameter.cs, convert.cs, expression.cs, class.cs: Default
1153         parameter expression can be value-type New.
1155         * cs-parser.jay: Clean up too many parameter modifier boolean flags.
1157 2009-06-26  Marek Safar  <marek.safar@gmail.com>
1159         * generic.cs, argument.cs, expression.cs, ecore.cs, cs-parser.jay:
1160         Implemented C# 4.0 named arguments.
1162 2009-06-24  Marek Safar  <marek.safar@gmail.com>
1164         * typemanager.cs, parameter.cs, iterators.cs, convert.cs,
1165         expression.cs, ecore.cs, delegate.cs: Removed unnecessary ArgList
1166         parameter modifier. Also fixes bug #515497.
1168 2009-06-24  Marek Safar  <marek.safar@gmail.com>
1170         * *.cs: Replaced ArrayList with Arguments in need of a nonsequential 
1171         arguments expression to be implemented.
1172         
1173         *.sources: Add argument.cs
1175 2009-06-23  Marek Safar  <marek.safar@gmail.com>
1177         * parameter.cs: Moved GetParameterIndexByName to base class.
1178         
1179         * expression.cs, statement.cs, ecore.cs, delegate.cs: Removed
1180         unused AType. Use argument's version of GetExpressionTree.
1182 2009-06-22  Marek Safar  <marek.safar@gmail.com>
1184         * expression.cs, cs-parser.jay, attribute.cs, codegen.cs: Named
1185         arguments grammar.
1187 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1189         A fix for bug #514096
1190         * class.cs: Allow IntPtr/UIntPtr fields to be volatile.
1192 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1194         * expression.cs: The first multi-dimensional array nested array
1195         initializers was not checked.
1196         
1197         * statement.cs (Switch): Fixed error message to reflect 2.0 changes.
1199 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1201         A fix for bug #513400
1202         * nullable.cs (EmitEquality): Operands emit could be simplified for
1203         built-in types when we now emit user operators differently.
1205 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1207         * ecore.cs: Report inaccessible delegate methods correctly.
1209 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1211         * parameter.cs, expression.cs, ecore.cs, class.cs, delegate.cs,
1212         cs-parser.jay: Implemented C# 4.0 optional parameters.
1214 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1216         * driver.cs: Removed broken DefineManifestResource.
1218 2009-06-16  Raja R Harinath  <harinath@hurrynot.org>
1220         * Makefile [net_2_0_bootstrap]: Don't explicitly mention net_1_1.
1221         Use $(BOOTSTRAP_PROFILE) instead.
1223 2009-06-12  Jb Evain  <jbevain@novell.com>
1225         * rootcontext.cs: add a Platform field.
1226         * driver.cs: handle /platform.
1227         * codegen.cs: pass the proper flags according to
1228         the platform when saving the assembly.
1230 2009-06-11  Marek Safar  <marek.safar@gmail.com>
1232         * parameter.cs, const.cs, report.cs, cs-parser.jay, attribute.cs:
1233         Add optional parameters grammar.
1235 2009-06-10  Marek Safar  <marek.safar@gmail.com>
1237         * eval.cs, anonymous.cs, report.cs, rootcontext.cs, cs-parser.jay,
1238         driver.cs: Split lang version and metadata version.
1240 2009-06-10  Marek Safar  <marek.safar@gmail.com>
1242         * decl.cs: Better overload ctor collision error message.
1244 2009-06-05  Jb Evain  <jbevain@novell.com>
1246         * driver.cs (EmbededResource): avoid using an internal method
1247         in gmcs to embed manifest resources.
1249 2009-06-04  Sebastien Pouliot  <sebastien@ximian.com>
1251         * generic.cs, parameter.cs: Avoid using 'var' so we can bootstrap
1252         the compiler from older mono versions (like moon's bots)
1254 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1256         * namespace.cs (LookupTypeReflection): Ignore collisions between
1257         forwarded types.
1259 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1261         * codegen.cs: Enabled generic type forwarders.
1263 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1265         * dmcs.*: Add another version of SRE compiler.
1267 2009-06-03  Marek Safar  <marek.safar@gmail.com>
1269         * generic.cs, typemanager.cs, parameter.cs, convert.cs,
1270         generic-mcs.cs: Fixed variant type conversions.
1272 2009-06-02  Marek Safar  <marek.safar@gmail.com>
1274         A fix for bug #507863
1275         * codegen.cs: Fixes a crash on invalid string value attribute.
1277 2009-06-01  Marek Safar  <marek.safar@gmail.com>
1279         A fix for bug #508334
1280         * typemanager.cs, parameter.cs, convert.cs, expression.cs, ecore.cs,
1281         cs-parser.jay: Fully import __arglist modifier.
1283 2009-05-29  Marek Safar  <marek.safar@gmail.com>
1285         * generic.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs,
1286         delegate.cs, generic-mcs.cs: Rewrote type variance checks to
1287         actually work with closed generic types.
1289 2009-05-27  Alan McGovern  <amcgovern@novell.com>
1291         * class.cs, decl.cs, delegate.cs, parameter.cs: 
1292         Fix the build by replacing the use of 'var' with the actual type.
1294 2009-05-27  Marek Safar  <marek.safar@gmail.com>
1296         * generic.cs, parameter.cs, decl.cs, ecore.cs, class.cs, delegate.cs
1297     cs-parser.jay, generic-mcs.cs: Report wrong variant types
1298         declarations.
1299           
1300         * driver.cs, rootcontext.cs, report.cs: Add 3.0 language version
1301         filter.
1303 2009-05-26  Rodrigo Kumpera  <rkumpera@novell.com>
1304                         Marek Safar  <marek.safar@gmail.com>
1306         A fix for bug #377509
1307         * parameter.cs: Use predefined and not empty name for implicit
1308         setters.
1310 2009-05-21  Marek Safar  <marek.safar@gmail.com>
1312         * class.cs: Don't report wrong warnings for event fields.
1314 2009-05-21  Marek Safar  <marek.safar@gmail.com>
1316         A fix for bug #504667
1317         * class.cs: Check for static class using parent container instead of
1318         parent type.
1320 2009-05-08  Marek Safar  <marek.safar@gmail.com>
1322         A fix for bug #496922
1323         * expression.cs: Always use temporary variable when using object
1324         initializer.
1326 2009-04-28  Marek Safar  <marek.safar@gmail.com>
1328         A fix for bug #495112
1329         * class.cs (IsUnmanagedType): Handle recursive unmanaged types using
1330         local cache.
1332 2009-04-27  Miguel de Icaza  <miguel@novell.com>
1334         * driver.cs: Add a flag to work as a replacement for CSC in VS.
1336 2009-04-24  Miguel de Icaza  <miguel@novell.com>
1338         * complete.cs: No idea how gonzalo got a null in the list, but
1339         avoid crashing.
1341 2009-04-24  Miguel de Icaza  <miguel@novell.com>
1343         * complete.cs (CompletionElementInitializer): New completion class
1344         to support completing inside a C# 3 element initializer, so this
1345         allows completion for Silverlight situations where it is very
1346         common to do:
1348         new TextBlock () { Fo<TAB>
1350         (CompletionSimpleName): Expose the prefix that was
1351         passed to the simple name.
1353         * cs-parser.jay (object_or_collection_initializer): Add support
1354         for element_initializers.
1356         * expression.cs (CollectionOrObjectInitializers.DoResolve):
1357         special case completion expressions as this method aggressively
1358         collects data before it operates, and errors were being thrown
1359         earlier than we were able to complete.
1361 2009-04-23  Miguel de Icaza  <miguel@novell.com>
1363         * eval.cs: Make getcompletions silent and enable debugging output
1364         if the -v option is passed.
1366         * namespace.cs (NamespaceEntry.CompletionGetTypesStartingWith):
1367         Consider looking up the namespace that matches the prefix being
1368         used. 
1370         This is part of the support for allowing completions like:
1371         `System.Co<TAB>' to complete to System.Console.
1373         * complete.cs (CompletionSimpleName.AppendResults): Make this
1374         routine reusable.
1376 2009-04-21  Raja R Harinath  <harinath@hurrynot.org>
1378         * cs-parser.jay (GetTokenName): Mark GENERATE_COMPLETION and
1379         COMPLETE_COMPLETION as internal.
1381 2009-04-17  Miguel de Icaza  <miguel@novell.com>
1383         * complete.cs: Include namespace resolution in simple names as
1384         well as global types and types in the using scope in the
1385         resolution. 
1387         * namespace.cs: Supporting infrastrcture to provide completions
1388         based on the current using scope. 
1390         * eval.cs: Introduce an entry point that allows for initialization
1391         to return a list of the files passed on the command line.
1393 2009-04-14  Marek Safar  <marek.safar@gmail.com>
1395         A fix for bug #494243
1396         * report.cs (SymbolRelatedToPreviousError): Fixed NRE.
1398 2009-04-13  Marek Safar  <marek.safar@gmail.com>
1400         A fix for bug #493887
1401         * statement.cs: Don't skip string multi-section with default or
1402         null label when populating string hashtable.
1404 2009-04-06  Marek Safar  <marek.safar@gmail.com>
1406         A fix for bug #492329
1407         * expression.cs (New): Load variable when assigning type parameter
1408         to ref variable.
1410 2009-04-06  Marek Safar  <marek.safar@gmail.com>
1412         A fix for bug #488960
1413         * decl.cs: Compare MVAR types using non-null values.
1415 2009-03-27  Marek Safar  <marek.safar@gmail.com>
1417         * typemanager.cs, expression.cs: Removed unused nullable checks.
1419 2009-03-27  Marek Safar  <marek.safar@gmail.com>
1421         * *.cs: Removed some gmcs conditionals.
1423 2009-03-26  Marek Safar  <marek.safar@gmail.com>
1425         * generic.cs, support.cs: Moved generics stuff out of support.cs
1427 2009-03-24  Marek Safar  <marek.safar@gmail.com>
1429         * ecore.cs, expression.cs: Use queried type for MethodGroupExpr
1430         DeclaringType.
1432 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1434         * attribute.cs: Consider all members for error reporting when
1435         checking named arguments.
1437 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1439         A fix for bug #487625
1440         * namespace.cs: Use a warning for all predefined type conflicts.
1442 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1444         A fix for bug #485706
1445         * statement.cs: Explicitly type catch type argument to pass verifier
1446         check.
1448 2009-03-22  Miguel de Icaza  <miguel@novell.com>
1450         Initial support to provide code completion facilities to consumers
1451         of the evaluator API.
1452         
1453         * cs-tokenizer.cs (CompleteOnEOF): this new property is used to
1454         support the completion engine.   When we reach the end of the
1455         input stream instead of returning EOF, when this flag is true the
1456         tokenizer instead produces:
1458                 One GENERATE_COMPLETION token: this token then must be
1459                 handled in the grammar at every point where the user
1460                 would likely request a completion.
1462                 As many COMPLETE_COMPLETION tokens as necessary.   These
1463                 tokens are generated to assist the parser in unwinding and
1464                 producing a valid parse tree.    
1466         The parser rules do not have to be perfect, the parser needs to be
1467         augmented with judicious use of GENERATE_COMPLETION tokens to
1468         improve the areas where we can provide completion and the parser
1469         needs to add support for COMPLETE_COMPLETION tokens in productions
1470         to make them work.
1472         It is common to not have enough support for COMPLETE_COMPLETION
1473         under certain rules and that even if we generated the
1474         GENERATE_COMPLETION token that the resulting tree will be invalid
1475         due to the missing rules that support COMPLETE_COMPLETION.
1477         The final EOF token is produced by having the parser notify the
1478         tokenizer when it reaches the root production that the next token
1479         should be EOF.
1481         * support.cs (CompletionResult): New Exception.   This exception
1482         is thrown to return the completion results when one of the special
1483         completion expressions is reached.
1485         This exception is thrown by the completing ExpressionStatements
1486         classes that live in complete.cs
1488         * complete.cs (CompletingExpression): a new base class for
1489         completing expressions.   This derives from the
1490         ExpressionStatement class and not from Expression as it allows
1491         completion to happen not only where expressions are expected in
1492         the grammar, but also where statements are expected.
1494         (CompletionSimpleName): A new class used to provide completions
1495         for SimpleNames.     This currently only resolves to local
1496         variables from the evaluator context (GetVars call).
1498         (CompletionMemberAccess): Implements support for completing member
1499         access patterns. 
1501         * cs-parser.jay: Add support for completion in a few places. 
1503         * eval.cs (GetCompletions): New public API for the evaluator that
1504         returns a list of possible completions given the input.   The
1505         return value is an array of completions 
1507         * anonymous.cs (Compatible): If the exception thrown from the
1508         resolved expression is a CompletionResult exception let that one
1509         through instead of printing a diagnostic error in the try/catch. 
1510 <       
1511 2009-03-22  Miguel de Icaza  <miguel@novell.com>
1513         * 
1515         * driver.cs (Main): Use Environment.Exit to quit quickly and
1516         prevent the compiler from doing the usual wait for helper thread
1517         to terminate.  
1519         This is to prevent a slowdown that was reported by Gonzalo on
1520         ASP.NET 
1522 2009-03-19  Marek Safar  <marek.safar@gmail.com>
1524         * ecore.cs: Load build-in types directly instead of accessing
1525         an internal field.
1527 2009-03-18  Marek Safar  <marek.safar@gmail.com>
1529         * ecore.cs: Always use unbox.any when available.
1531 2009-03-18  Marek Safar  <marek.safar@gmail.com>
1533         * class.cs: Always set TypeAttributes.BeforeFieldInit conditionally.
1535 2009-03-17  Marek Safar  <marek.safar@gmail.com>
1537         * generic.cs: Removed obsolete version of type inference.
1539 2009-03-16  Marek Safar  <marek.safar@gmail.com>
1541         * typemanager.cs, decl.cs, roottypes.cs, anonymous.cs, nullable.cs,
1542         expression.cs, rootcontext.cs, namespace.cs, ecore.cs, class.cs,
1543         delegate.cs, flowanalysis.cs, cs-parser.jay, driver.cs,
1544         attribute.cs, codegen.cs: Changed RootTypes to be ModuleContainer.
1546 2009-03-11  Marek Safar  <marek.safar@gmail.com>
1548         A fix for bug #482996
1549         * anonymous.cs: Make sure we are not infering return type when
1550         checking type compatibility.
1552 2009-03-11  Marek Safar  <marek.safar@gmail.com>
1554         * typemanager.cs, generic.cs, parameter.cs, decl.cs, const.cs,
1555         rootcontext.cs, namespace.cs, class.cs, delegate.cs, driver.cs,
1556         generic-mcs.cs, attribute.cs, codegen.cs: Maintain predefined
1557         attributes in their own structure. Needed when accessing their
1558         properties before they are resolved.
1560 2009-03-09  Marek Safar  <marek.safar@gmail.com>
1562         * cs-tokenizer.cs: Optimized GetKeyword using an array instead of
1563         hashtable (~10x faster).
1564         
1565         * driver.cs: Removed wrong Reset.
1567 2009-03-08  Marek Safar  <marek.safar@gmail.com>
1569         * class.cs: Use correct common base type for unmanaged delayed
1570         check.
1572         * rootcontext.cs: Wrap unhandled exception.
1574 2009-03-06  Raja R Harinath  <harinath@hurrynot.org>
1576         Make SeekableStreamReader self-tuning and arbitrarily seekable
1577         * support.cs (SeekableStreamReader.ResetStream): New.  Allocates
1578         the buffer.
1579         (SeekableStreamReader.Position.set): Use it.  Simplify logic
1580         which, as a side-effect, makes it arbitrarily-seekable.  Tune the
1581         buffer size when the stream needs to be re-read from the beginning.
1583 2009-03-05  Marek Safar  <marek.safar@gmail.com>
1585         A fix for bug #480100
1586         * parameter.cs: A parameter is not hoisted when used directly as ET.
1588 2009-03-04  Marek Safar  <marek.safar@gmail.com>
1590         * statement.cs: Fixed an issue when using variable is of interface
1591         type.
1593 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1595         A fix for bug #480319
1596         * report.cs, driver.cs: Support -warnaserror-:<warning list> option.
1598 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1600         A fix for bug #480867
1601         * typemanager.cs, expression.cs, ecore.cs: Changed method group
1602         expression to have no valid type.
1604 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1606         A fix for bug #481258
1607         * class.cs: Set extension method flag in partial container.
1609 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1611         * statement.cs, typemanager.cs: Use expression for StringEmitter.
1612         
1613         * attribute.cs: Add sanity check.
1615 2009-02-27  Marek Safar  <marek.safar@gmail.com>
1617         * class.cs: Add external constructor error.
1619 2009-02-26  Marek Safar  <marek.safar@gmail.com>
1621         A fix for bug #475354
1622         * convert.cs, nullable.cs, expression.cs, statement.cs: Emit
1623         correctly user defined nullable equality operators.
1625 2009-02-25  Marek Safar  <marek.safar@gmail.com>
1627         A fix for bug #479532
1628         * expression.cs: Implement NewInitialize::AddressOf.
1630 2009-02-25  Marek Safar  <marek.safar@gmail.com>
1632         A fix for bug #413633
1633         * expression.cs: Iterate all base class-constraint types.
1635 2009-02-24  Marek Safar  <marek.safar@gmail.com>
1637         A fix for bug #479209
1638         * literal.cs: Mutate null underlying type.
1640 2009-02-24  Marek Safar  <marek.safar@gmail.com>
1642         A fix for bug #476295
1643         * convert.cs: Avoid wrapping implicitly convertible reference type.
1645 2009-02-23  Marek Safar  <marek.safar@gmail.com>
1647         * iterators.cs: Create MemberName correctly.
1649 2009-02-23  Marek Safar  <marek.safar@gmail.com>
1651         A fix for bug #478655
1652         * literal.cs: Check also underlying null type conversion.
1654 2009-02-21  Marek Safar  <marek.safar@gmail.com>
1656         * generic.cs, ecore.cs, class.cs: Removed redundant AsAccessible.
1658 2009-02-20  Marek Safar  <marek.safar@gmail.com>
1660         A fix for bug #477447
1661         * statement.cs: Add reference to correct parent storey when this
1662         is accessible from deep children storey (more than 1 level).
1664 2009-02-19  Marek Safar  <marek.safar@gmail.com>
1666         A fix for bug #475860 by David Mitchell <dmitchell@logos.com>
1667         * class.cs: Define base type members before setting up member cache.
1669 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1671         A fix for bug #477378
1672         * nullable.cs, expression.cs, statement.cs: More precise null type
1673         sanity checks.
1675 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1677         A fix for bug #472805
1678         * typemanager.cs, namespace.cs: Import only visible extension method
1679         types.
1681 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1683         A fix for bug #476895
1684         * attribute.cs: Use correct resolve context for attribute type.
1686 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1688         A fix for bug #476266
1689         * anonymous.cs: Mutate multi-dimensional arrays.
1691 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1693         A fix for bug #476400
1694         * statement.cs, expression.cs: Removed wrong Dispose optimization.
1696 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1698         A fix for bug #476811
1699         * generics.cs: Fixed null-literal check.
1701 2009-02-17  Marek Safar  <marek.safar@gmail.com>
1703         * typemanager.cs, convert.cs, flowanalysis.cs, driver.cs,
1704         expression.cs, ecore.cs, rootcontext.cs, eval.cs, class.cs: More
1705         messing with static variables.
1707 2009-02-16  Marek Safar  <marek.safar@gmail.com>
1709         A fix for bug #475965
1710         * generics.cs: Check generic parameter type after extracting from
1711         Expression<T>.
1713 2009-02-16  Marek Safar  <marek.safar@gmail.com>
1715         A fix for bug #475823
1716         * convert.cs, expression.cs, literal.cs, ecore.cs, cfold.cs: Add
1717         typed-null support.
1719 2009-02-14  Marek Safar  <marek.safar@gmail.com>
1721         * modifiers.cs, decl.cs, ecore.cs, class.cs, flowanalysis.cs:
1722         Simplified event field definition using backing field and not
1723         field builder directly.
1725         * expression.cs (EmitLdArg): Optimize fast paths.
1727 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1729         A fix for bug #475327
1730         * expression.cs (ArrayCreation): Don't mutate values optimized away.
1732 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1734         A fix for bug #475342
1735         * cs-parser.jay: Using 'super' instead of 'base' to call base
1736         constructor crashes compiler.
1738 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1740         A fix for bug #475354
1741         * expression.cs (Constantify): Add nullable types.
1742         
1743         * const.cs (EmitDecimalConstant): Avoid explicit cast.
1745 2009-02-12  Marek Safar  <marek.safar@gmail.com>
1747         A fix for bug #475246
1748         * expression.cs: More broken flowanalysis hacking needed.
1750 2009-02-12  Marek Safar  <marek.safar@gmail.com>
1752         * attribute.cs: Compare only ref/out array modifiers. 
1754 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1756         * statement.cs: Use member cache when looking for foreach members.
1758 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1760         * expression.cs: Don't expose internal initializer types.
1761         
1762         * statement.cs: Check also explicit conversions for goto case.
1764 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1766         * convert.cs, statement.cs: Removed usage of IsAssignableFrom.
1768 2009-02-10  Marek Safar  <marek.safar@gmail.com>
1770         * *.cs: Replace null-type with NullLiteral where appropriate.
1772 2009-02-09  Marek Safar  <marek.safar@gmail.com>
1774         * expression.cs: Initializer of reference argument use temporary
1775         variable to be verifiable.
1776         
1777         * parameter.cs: Share EmitLdArg.
1779 2009-02-09  Marek Safar  <marek.safar@gmail.com>
1781         A fix for bug #473559
1782         * class.cs: Fixed: Not reporting error about nested class with the
1783         same name.
1785 2009-02-06  Scott Peterson  <lunchtimemama@gmail.com>
1787         Contributed under the MIT/X11 license.
1789         * generic.cs: Added VerifyVariantTypeParameters which performs new
1790         variance verification logic. The old logic, based on the spec, was
1791         wrong because the spec is full of LIES!
1793         * generic-mcs.cs: Stubbed out the VerifyVariantTypeParameters method.
1795         *typemanager.cs: Moved variance verification logic to GenericTypeExpr.
1797         * class.cs:
1798         * ecore.cs: Added calls to the new variance verification logic.
1800         * parameter.cs:
1801         * delegate.cs: Removed calls to the old variance verification logic.
1803 2009-02-06  Marek Safar  <marek.safar@gmail.com>
1805         * delegate.cs: Use cached Invoke method directly.
1807 2009-02-06  Marek Safar  <marek.safar@gmail.com>
1809         * expression.cs: Emit expression tree for hoisted variable access.
1811 2009-02-04  Marek Safar  <marek.safar@gmail.com>
1813         * namespace.cs: Add better extension class check.
1815 2009-02-05  Scott Peterson  <lunchtimemama@gmail.com>
1817         * generic.cs: Fixed typeo (TypeParameter.Variacne).
1819 2009-02-04  Scott Peterson  <lunchtimemama@gmail.com>
1821         This patch adds initial generic variance support to the compiler.
1822         It is contributed under the MIT/X11 license.
1824         * typemanager.cs: Modified ImplementsInterface to check variance.
1825         Added VerifyVariantTypeParameters which checks the specified type to see
1826         if it uses a variant type parameter as a type argument (which is not
1827         allowed). Added IsVariantOf which determins if the first type is a
1828         variant of the second. NOTE: This only supports reference types at
1829         the moment to conform with the current level of VM support. When the
1830         VM supports value types, this will follow step.
1832         * generic.cs: Added the Variance enum. Added a Variance property to
1833         TypeParameter and added variance support to definition phase. Added a
1834         Variance property to TypeParameterName. Also check to make sure that
1835         no variant types appear in generic method parameters.
1837         * cs-tokenizer.cs: Modified parse_less_than to tokenize the variance
1838         keywords if the langversion supports it.
1840         * parameter.cs: Added Parameter.VerifyNoVariantTypeParameters to ensure
1841         that variant types are only used in legal positions. Also added
1842         ParametersCompiled.VerifyNoVariantTypeParameters to check all of its
1843         parameters.
1845         * decl.cs: Construct TypeParameter with the variance information.
1847         * convert.cs: Checks variance in ImplicitReferenceConversionExists
1848         and ImplicitConversionStandard.
1850         * rootcontext.cs: Added new "Future" language version.
1852         * class.cs: In TypeContainer.DoDefineMembers, ensure that contravariant
1853         type parameters are not used as type arguments in interface inheritance.
1854         In MemberBase.DoMemberDependentChecks, ensure that contravariant type
1855         parameters are not used as method return types. In MemberBase.
1856         ResolveMemberType, ensure that variant type parameters are not used
1857         as type arguments. Also call VerifyNoVariantTypeParameters on every
1858         set of parameters which are resolved.
1860         * delegate.cs: Modified Delegate.Define to ensure that variant
1861         parameters are not used as type arguments and that a contravariant
1862         parameter is not used as the return type. Also call
1863         VerifyNoVariantTypeParameters on the delegate parameters.
1865         * cs-parser.jay: Modified grammar to support "in" and "out" keywords
1866         to specify generic variance.
1868         * driver.cs: Added support for LanguageVersion.Future in the form of
1869         "-langversion:future".
1871         * generic-mcs.cs: Stubbed out new members in generic.cs.
1873 2009-02-03  Marek Safar  <marek.safar@gmail.com>
1875         * class.cs, generic.cs: Emit type parameter constraints for nested
1876         types.
1878 2009-02-02  Marek Safar  <marek.safar@gmail.com>
1880         A fix for bug #471213
1881         * class.cs: Avoid emitting backing field for abstract event fields.
1883 2009-02-01  Marek Safar  <marek.safar@gmail.com>
1885         A fix for bug #359731
1886         * cs-tokenizer.cs, cs-parser.jay: Correctly parse nested query
1887         expressions.
1889 2009-01-30  Marek Safar  <marek.safar@gmail.com>
1891         A fix for bug #470767
1892         * statement.cs: Introduced BlockScopeExpression, needed when 
1893         expression tree conversion has to emit scope variables.
1895 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1897         * class.cs: Remove duplicate CallingConvention.
1899 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1901         *.cs: Rename Parameters to ParametersCompiled and ParametersImported
1902         when I finally found the right naming convention.
1904 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1906         * cs-tokenizer.cs: Put back different open parens optimization.
1908 2009-01-28  Marek Safar  <marek.safar@gmail.com>
1910         A fix for bug #470227
1911         * cs-tokenizer.cs: Remove too agressive parser optimization.
1913 2009-01-28  Marek Safar  <marek.safar@gmail.com>
1915         A fix for bug #324319
1916         * class.cs: Remove too early base type resolve.
1918 2009-01-27  Marek Safar  <marek.safar@gmail.com>
1920         A fix for bug #324319
1921         * ecore.cs: Explicitly type null when assigning to type argument to
1922         make pass verifier check.
1924 2009-01-27  Marek Safar  <marek.safar@gmail.com>
1926         * anonymous.cs: Fixed recent regression when initializing captured 
1927         this.
1929 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1931         A fix for bug #469019
1932         * anonymous.cs: Use all parent type parameters when instantiating
1933         nested generic storey.
1935 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1937         * expression.cs: Check for null instance methodgroup expression.
1939 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1941         A fix for bug #469244
1942         * cs-tokenizer.cs, cs-parser.jay: Fixed parsing of nullable type
1943         instance inside a conditional expression.
1945 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1947         * typemanager.cs, generic.cs, parameter.cs, decl.cs, anonymous.cs,
1948         expression.cs, report.cs, ecore.cs, attribute.cs: Use common 
1949         GetElementType and HasElementType. IsValueType clean up.
1951 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1953         * nullable.cs: Use common EmitCall.
1954         
1955         * expression.cs: Emit constraint. for virtual calls only.
1957 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1959         * typemanager.cs, generic.cs, eval.cs, convert.cs, const.cs, 
1960         expression.cs, statement.cs, rootcontext.cs, ecore.cs, class.cs,
1961         driver.cs, attribute.cs, enum.cs: Split IsValueType and IsStruct
1962         checks.
1964 2009-01-22  Jb Evain  <jbevain@novell.com>
1966         * anonymous.cs: make anonymous types' ToString implementation
1967         match what csc outputs.
1969 2009-01-21  Marek Safar  <marek.safar@gmail.com>
1971         * typemanager.cs, ecore.cs, iterator.cs: TypeLookupExpression clean
1972         up.
1974 2009-01-17  Marek Safar  <marek.safar@gmail.com>
1976         * convert.cs, ecore.cs: Explicitly casts type arguments to pass
1977         verifier checks.
1979 2009-01-16  Marek Safar  <marek.safar@gmail.com>
1981         * nullable.cs (LiftedBinaryOperator): Check for all possible null
1982         expressions.
1984 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1986         A fix for bug #466634
1987         * statement.cs: Add reference for nested storey when only this
1988         is captured.
1990 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1992         A fix for bug #466474
1993         * codegen.cs: Emit SecurityPermissionAttribute when -unsafe option
1994         was specified.
1996 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1998         * iterators.cs, anonymous.cs, expression.cs, statement.cs, ecore.cs:
1999         Fixed nested stories parent referencing process. Also fixes #463985.
2001 2009-01-06  Marek Safar  <marek.safar@gmail.com>
2003         * decl.cs, iterators.cs, expression.cs, statement.cs, doc.cs, 
2004         class.cs, cs-parser.jay, codegen.cs: Clean up destructor
2005         implementation. Also fixes #463108.
2007 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2009         A fix for bug #416109
2010         * decl.cs: Issue correct CLSAttribute warning location.
2012 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2014         A fix for bug #456775
2015         * attribute.cs: Use attribute owner scope when resolving attribute
2016         arguments.
2018 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2020         A fix for bug #457257
2021         * decl.cs: Fixed incorrect member declaring type comparison.
2023 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2025         A fix for bug #460896
2026         * driver.cs: Handle /RES resources as embeddable.
2028 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2030         A fix for bug #462515
2031         * ecore.cs: Report inacessible members upwards.
2033 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2035         A fix for bug #463190, #463192
2036         * decl.cs, namespace.cs: Also import internal extension classes.
2038 2009-01-04  Marek Safar  <marek.safar@gmail.com>
2040         A fix for bug #463415
2041         * generic.cs: Use right index for RemoveDependentTypes.
2043 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2045         A fix for bug #463196
2046         * expression.cs: Fixed enum to null comparison.
2048 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2050         A fix for bug #463121
2051         * nullable.cs: Fixed nullable user equality operator comparison.
2053 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2055         A fix for bug #462950
2056         * class.cs, decl.cs: Use full explicit name when defining automatic
2057         property backing field.
2059 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2061         A fix for bug #462592
2062         * pending.cs: Emit type arguments for generic proxy method.
2064 2008-12-30  Marek Safar  <marek.safar@gmail.com>
2066         * expression.cs (As): Mutate all type arguments.
2068 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2070         A fix for bug #462622
2071         * anonymous.cs: Resolve anonymous type GetHashCode in unchecked
2072         context.
2074 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2076         A fix for bug #450782
2077         * ecore.cs: Consider more variables of form V.I to be fixed.
2079 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2081         A fix for bug #460712
2082         * typemanager.cs: Core types could be imported.
2084 2008-12-28  Marek Safar  <marek.safar@gmail.com>
2086         A fix for bugs #460847, #460772, #458049, #457339, #447807
2087         * generic.cs, parameter.cs, lambda.cs, linq.cs, anonymous.cs
2088         statement.cs, ecore.cs, class.cs, delegate.cs, flowanalysis.cs
2089         cs-parser.jay, driver.cs: LINQ implementation upgrade to deal with
2090         user lambdas used inside query clauses.
2092 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2094         A fix for bug #460229
2095         * cs-tokenizer.cs: Ignore wrongly placed BOM markers.
2097 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2099         A fix for bug #459952
2100         * decl.cs, namespace.cs: Use common CheckAccessLevel.
2102 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2104         A fix for bug #459630
2105         * convert.cs: Enum to valuetype conversion is not allowed.
2107 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2109         A fix for bug #457087
2110         * generic.cs: Don't crash when constraint comes from type
2111         declaration.
2113 2008-12-16  Marek Safar  <marek.safar@gmail.com>
2115         A fix for bug #459221
2116         * anonymous.cs, statement.cs: Delay only captured this
2117         initialization.
2119 2008-12-12  Marek Safar  <marek.safar@gmail.com>
2121         A fix for bug #457489
2122         * anonymous.cs, statement.cs: Split anonymous storey instantiation
2123         and initialization to capture scope initializers correctly.
2125 2008-12-11  Marek Safar  <marek.safar@gmail.com>
2127         * generic.cs, parameter.cs, expression.cs, statement.cs, doc.cs:
2128         ParameterReference refactoring.
2130 2008-12-03  Marek Safar  <marek.safar@gmail.com>
2132         * typemanager.cs, namespace.cs, driver.cs: Allow ExtensionAttribute
2133         to be imported from any assembly.
2135 2008-12-03  Marek Safar  <marek.safar@gmail.com>
2137         * parameter.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs
2138         statement.cs, class.cs, cs-parser.jay: Removed duplicate parameters
2139         from anonymous method and lambda expression.
2141 2008-12-01  Marek Safar  <marek.safar@gmail.com>
2143         A fix for bug #448560
2144         * expression.cs (As): Box any generic type arguments to be
2145         verifiable.
2147 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
2149         Add tripwire for implicit conversion bugs
2150         * ecore.cs (MethodGroupExpr.Error_ArgumentCountWrong): New helper
2151         for CS1501 error.
2152         (MethodGroupExpr.OverloadResolve): Add sanity check between
2153         IsApplicable and VerifyArgumentsCompat.
2154         (VerifyArgumentsCompat): Report CS1501 where appropriate.
2156 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
2158         Fix build break in System.Data_test
2159         * convert.cs (ImplicitConversionExists): Move NullLiteral
2160         conversions ...
2161         (ImplicitStandardConversionExists): ... here.
2163 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2165         * literal.cs: Emit correctly explicit null to nullable cast.
2167 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2169         * ecore.cs, generics.cs: Fixed crash when type arguments fail to
2170         resolve.
2172 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2174         A fix for bug #449005
2175         * convert.cs, nullable.cs: Use only one implicit nullable
2176         conversion.
2178 2008-11-27  Marek Safar  <marek.safar@gmail.com>
2180         * convert.cs, literal.cs: More Convert cleanup is needed.
2182 2008-11-27  Marek Safar  <marek.safar@gmail.com>
2184         * decl.cs, class.cs: Fixed misleading error message.
2186 2008-11-26  Marek Safar  <marek.safar@gmail.com>
2188         A fix for bug #449005
2189         * nullable.cs (EmitEquality): Disable optimization for user operator
2190         operands.
2192 2008-11-25  Marek Safar  <marek.safar@gmail.com>
2194         A fix for bug #447027
2195         * anonymous.cs (HoistedVariable): Cache also outer access to deal
2196         with context variables stored as expression instances.
2198 2008-11-25  Marek Safar  <marek.safar@gmail.com>
2200         A fix for bug #447027
2201         * delegate.cs: Fixed delegate VerifyMethod logic.
2203 2008-11-24  Marek Safar  <marek.safar@gmail.com>
2205         * ecore.cs, delegate.cs: MethodGroup expressions can be applicable
2206         but not verifiable.
2208 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2210         * typemanager.cs, decl.cs, anonymous.cs, class.cs, enum.cs: Rewrote
2211         member type resolve to follow normal flow, instead of random
2212         property access.
2214 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2216         * iterators.cs (GetEnumeratorStatement): Re-use already resolved
2217         type.
2219 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2221         * const.cs: Emit decimal array constant as literal.
2223 2008-11-20  Marek Safar  <marek.safar@gmail.com>
2225         * iterators.cs, ecore.cs: Removed CurrentBlock statement.
2227 2008-11-19  Marek Safar  <marek.safar@gmail.com>
2229         * eval.cs, location.cs, driver.cs (Location.SourceFiles): Turned
2230         into real property (saves 8 MB for corlib compilation).
2232 2008-11-19  Marek Safar  <marek.safar@gmail.com>
2234         * generic.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs,
2235         nullable.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay
2236         generic-mcs.cs: Small cleanup of TypeArguments.
2238 2008-11-18  Marek Safar  <marek.safar@gmail.com>
2240         * generic.cs, iterators.cs, anonymous.cs, nullable.cs, ecore.cs,
2241         expression.cs, namespace.cs, generic-mcs.cs, class.cs: Small cleanup
2242         of ConstructedType expression, renamed to GenericTypeExpr.
2244 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2246         A fix for bug #445303
2247         * location.cs (IsConditionalDefined): Handle undefined global
2248         defines.
2250 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2252         A fix for bug #444678
2253         * expression.cs (TryReduceConstant): Always create new constant
2254         instance.
2256 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2258         A fix for bug #444673
2259         * ecore.cs: Ignore open generic types when used as generic type
2260         instance fields.
2262 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2264         A fix for bug #445458
2265         * expression.cs, cs-parser.jay: Don't crash when an expression
2266         statement is null.
2268 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2270         A fix for bug #445464
2271         * expression.cs, cs-parser.jay: Fixed typeof of non-generic type
2272         inside unbound type.
2274 2008-11-14  Jb Evain  <jbevain@novell.com>
2276         * driver.cs: ignore empty -nowarn argument such as
2277         the one in -nowarn:12,13,,.
2279 2008-11-13  Marek Safar  <marek.safar@gmail.com>
2281         A fix for bug #444271
2282         * anonymous.cs: Rescan parent storeys when best candidate was
2283         undone.
2285 2008-11-13  Marek Safar  <marek.safar@gmail.com>
2287         * generic.cs, expression.cs, ecore.cs, cs-parser.jay: Removed
2288         useless UnboundTypeExpression.
2289         
2290         * attribute.cs: Do check obsolete attribute on generic types.
2292 2008-11-12  Marek Safar  <marek.safar@gmail.com>
2294         A fix for bugs #425680, #400139
2295         * ecore.cs, expression.cs: Trying to do some almost_matched_members
2296         refactoring.
2298 2008-11-11  Marek Safar  <marek.safar@gmail.com>
2300         A fix for bug #435747
2301         * assign.cs, expression.cs: Cleanup New assignment to emit correcly
2302         compound value types assignment. Few micro optimizations added.
2304 2008-11-10  Marek Safar  <marek.safar@gmail.com>
2306         A fix for bug #442610
2307         * anonymous.cs (MutateConstructor): More SRE hacking.
2309 2008-11-10  Marek Safar  <marek.safar@gmail.com>
2311         A fix for bug #442579
2312         * ecore.cs: Also initialize expanded form of a method with 1 params
2313         parameter.
2315 2008-11-06  Marek Safar  <marek.safar@gmail.com>
2317         * expression.cs (UnaryMutator): Do early l-side check.
2319 2008-11-05  Miguel de Icaza  <miguel@novell.com>
2321         * codegen.cs (InitDynamic): also setup Assembly.Name like we do in
2322         Init, otherwise we would crash later on when checking for friend
2323         assemblies. 
2325         * eval.cs: Do not hide errors from invalid calls to LoadAssembly.
2326         Otherwise we never get any meaningful information as to what
2327         failed. 
2329 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2331         A fix for bug #436318
2332         * driver.cs, report.cs: Add -warnaserror:Wn to command line options.
2334 2008-11-05  Miguel de Icaza  <miguel@novell.com>
2336         * namespace.cs: Turns out that it was a really bad idea to hide
2337         the errors for namespaces not found here in eval mode.    
2339         * eval.cs: When we process using clauses, only enter those into
2340         the list of valid using clauses after they have been validated.   
2342         The above change gives the proper semantics: it does not
2343         senselessly report the same errors with broken using statements by
2344         never storing them in the first place when they are invalid.
2346 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2348         A fix for bug #421839
2349         * cs-parser.jay: Remove expression from coalesce rule to force lower
2350         priority than the assignment operator.
2352 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2354         A fix for bug #437875
2355         * nullable.cs: Compile correctly method group operand used with null
2356         coalescing operator.
2358 2008-11-04  Marek Safar  <marek.safar@gmail.com>
2360         A fix for bug #434589
2361         * expression.cs (Binary): Ignore lifted conversions when at least
2362         one operand is of reference type.
2364 2008-11-04  Marek Safar  <marek.safar@gmail.com>
2366         * cs-parser.jay: Better syntax error report.
2368 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2370         A fix for bug #436792
2371         * cs-parser.jay: Use GetLocation to access location.
2373 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2375         A fix for bug #440774
2376         * cs-parser.jay: Also set current_array_type when parsing local
2377         variables types.
2379 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2381         A fix for bug #440785
2382         * expression.cs (As): Don't resolve self modifing expression
2383         multiple times.
2385 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2387         A fix for bug #439447
2388         * cs-tokenizer.cs: Tokenize surrogates only where allowed.
2390 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2392         A fix for bug #437571
2393         * cs-parser.jay: Fixes internal error for invalid expression
2394         statements.
2396 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2398         * ecore.cs: Resolve correctly ambiguous params delegate methods.
2400 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2402         * generic.cs, anonymous.cs: Simplified GetDeclarations.
2404 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2406         * cs-tokenizer.cs: More precise cast parsing.
2408 2008-10-16  Martin Baulig  <martin@ximian.com>
2410         * anonymous.cs (AnonymousMethodStorey): Put back the
2411         `hoisted_locals' hashtable and use it in EmitType().
2413 2008-10-15  Marek Safar  <marek.safar@gmail.com>
2415         * cs-tokenizer.cs, nullable.cs, expression.cs, statement.cs,
2416         cs-parser.jay: Tokenizer optimizations and memory reduction, saves
2417         ~5MB for corlib.
2419 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2421         * cs-tokenizer.cs: Add bool type to the list of valid cast tokens.
2423 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2425         * statement.cs: Mutate scope initializers.
2427 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2429         * expression.cs: Use typeless value for This constant.
2430         
2431         * ecore.cs: Access FieldInfo via GetConstructedFieldInfo.
2433 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2435         * cs-tokenizer.cs, cs-parser.jay: Unify context sensite keyword
2436         tokenizer.
2438 2008-10-13  Marek Safar  <marek.safar@gmail.com>
2440         * cs-tokenizer.cs: Add missing alias qualifier and dotted generic
2441         type to type cast.
2443 2008-10-13  Marek Safar  <marek.safar@gmail.com>
2445         * cs-tokenizer.cs, expression.cs, cs-parser.jay: Reworked parens
2446         parser and tokenizer. Fixes many ambiguities including #433258.
2448 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2450         * cs-parser.jay: Fixed missing accessor recovery.
2452 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2454         A fix for bug #433701
2455         * expression.cs: Better error message.
2457 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2459         * cs-parser.jay, expression.cs: Start reporting real parser errors.
2460         
2461         * Makefile: Disabled unused debug symbols.
2463         Also fixes: #320556, #321097, #321656, #321876, #351316
2465 2008-10-09  Miguel de Icaza  <miguel@novell.com>
2467         * eval.cs: rename "<interactive>" to "{interactive}", to work
2468         around a requirement in the compiler that this be a valid
2469         filename, and in Windows it is not (433886).
2471 2008-10-09  Marek Safar  <marek.safar@gmail.com>
2473         * cs-tokenizer.cs, cs-parser.jay: Fixed more subtle parser problems
2475 2008-10-08  Marek Safar  <marek.safar@gmail.com>
2477         * cs-tokenizer.cs, eval.cs, anonymous.cs, statement.cs, class.cs
2478         cs-parser.jay: Generic type declaration and type arguments cleanup.
2480 2008-10-05  Marek Safar  <marek.safar@gmail.com>
2482         * cs-parser.jay: Allow parsing weird array creation construct.
2484 2008-10-05  Marek Safar  <marek.safar@gmail.com>
2486         * cs-parser.jay: Conflicts reduction.
2488 2008-10-04  Marek Safar  <marek.safar@gmail.com>
2490         * cs-parser.jay: Conflicts reduction.
2492 2008-10-04  Raja R Harinath  <harinath@hurrynot.org>
2494         Fix #398325
2495         * flowanalysis.cs (MyBitvector.MakeShared): Rename from 'Shared'
2496         property.  Add a 'count' hint about the use of the shared vector.
2497         Ensure that we don't leak out dirty bits.
2498         (UsageVector.MergeChild): Throw away information about variables
2499         in child vectors.
2500         Based on patch and analysis by Moritz Kroll <Moritz.Kroll@gmx.de>.
2502 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2504         A fix for bug #431746
2505         * iterators.cs, anonymous.cs: Re-initialize hoisted iterator
2506         parameters when iterator is created.
2508 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2510         A fix for bug #431827
2511         * expression.cs: Fixed right based pointer arithmetic operations
2512         emit.
2514 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2516         A fix for bug #353779
2517         * assign.cs, expression.cs: Fixed compound assignment conversions.
2519 2008-10-02  Marek Safar  <marek.safar@gmail.com>
2521         A fix for bug #375262
2522         * statement.cs: Refactor ArrayForeach to be usable with string
2523         indexer. Optimized single dimentional arrays foreach.
2525 2008-10-02  Marek Safar  <marek.safar@gmail.com>
2527         A fix for bug #431255
2528         * anonymous.cs, expression.cs: Removed broken optimization.
2530 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2532         * anonymous.cs: Use full type parameters of parent generic
2533         containers. Removed unnecessary AddParentStoreyReference call.
2535 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2537         A fix for bug #324702
2538         * class.cs: Use better shorter names for explicit interface member
2539         implementations.
2541         * ecore.cs, typemanager.cs: Convert only mscorlib predefined names.
2543 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2544         
2545         * expression.cs: Use new interface to check fixed expression.
2547 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2549         A fix for bug #421101
2550         * expression.cs, statement.cs, ecore.cs: Use IFixedExpression
2551         interface to check for fixed fixed-buffers.
2553 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2555         A fix for bug #429264
2556         * assign.cs, anonymous.cs, ecore.cs: More type mutators added.
2557         
2558         * delegate.cs: Removed unnecessary casts.
2560 2008-09-30  Marek Safar  <marek.safar@gmail.com>
2562         A fix for bug #352151
2563         * decl.cs, iterators.cs, anonymous.cs, report.cs, namespace.cs,
2564         class.cs: Fixed already defined explicit interface members check.
2566 2008-09-29  Rodrigo Kumpera  <rkumpera@novell.com>
2568         cs-tokenizer.cs: Fix typo.
2570 2008-09-28  Miguel de Icaza  <miguel@novell.com>
2572         * eval.cs (InteractiveBase): The quit command now just sets a
2573         flag, instead of calling Environment.Exit(), it is milder on
2574         embedded hosts. 
2576         CompiledMethod is now in Mono.CSharp, not nested inside
2577         the Evaluator, it was inconvenient to use.
2579 2008-09-27  Miguel de Icaza  <miguel@novell.com>
2581         * eval.cs (Evaluator): Introduce Compile method, to allow compiled
2582         code to be invoked without having to reparse.
2584 2008-09-27  Miguel de Icaza  <miguel@novell.com>
2586         * ecore.cs: The recent changes to FieldExpr broke this as well.
2587         Fixes LINQ queries in the interactive shell.
2589         * Multiple files: indentation fixing for the Mono coding
2590         guidelines for the switch statement.
2592         * eval.cs: Make the Evaluator API thread safe.
2594 2008-09-26  Marek Safar  <marek.safar@gmail.com>
2596         * anonymous.cs, statement.cs, class.cs, cs-parser.jay: Simplified
2597         constructor parsing.
2599 2008-09-26  Marek Safar  <marek.safar@gmail.com>
2601         A fix for bug #325326
2602         * statement.cs: Check possible mistaken empty statement using
2603         explicit blocks only.
2605 2008-09-25  Miguel de Icaza  <miguel@novell.com>
2607         * eval.cs (LoadAssembly, ReferenceAssembly): Call
2608         RootNamespace.ComputeNamespaces to update the internal list of
2609         namespaces, this is no longer done for us.
2611         (InteractiveBase): Use the Evaluator APIs instead of calling into
2612         Driver directly
2614 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2616         A fix for bug #429264
2617         * expression.cs: Missing mutator for access to multidimensional
2618         arrays.
2620 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2622         * class.cs, statement: Emit DebuggerHidden attribute for iterator
2623         entry wrapper.
2624         
2625         * driver.cs: Missing input argument check.
2627 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2629         * typemanager.cs, generic.cs, eval.cs, decl.cs, anonymous.cs,
2630         expression.cs, statement.cs, rootcontext.cs, class.cs, 
2631         cs-parser.jay, driver.cs, generic-mcs.cs, enum.cs: Removed obsolete
2632         DefineMembers.
2634 2008-09-24  Miguel de Icaza  <miguel@novell.com>
2636         * ecore.cs (FieldExpr): Only initialize eclass when we return a
2637         fully constructed FieldExpr, fixes the regression introduced in
2638         the last commit.
2639         
2640         * ecore.cs, expression.cs: Plug back the eclass initialization as
2641         otherwise it regresses `csharp'. 
2643 2008-09-24  Marek Safar  <marek.safar@gmail.com>
2645         * typemanager.cs, decl.cs, convert.cs, assign.cs, expression.cs,
2646         ecore.cs, attribute.cs: Moved obsolete method checks from emit
2647         phase to resolve phase. It resolves problems with expression trees
2648         and fixes bugs #323796, #325156.
2650 2008-09-23  Marek Safar  <marek.safar@gmail.com>
2652         * codegen.cs: Report better error when symbol writer is missing.
2654 2008-09-23  Marek Safar  <marek.safar@gmail.com>
2656         * codegen.cs: Set .NET symbol writer.
2657         
2658         * decl.cs: Guard against null generic arguments.
2659         
2660         * report.cs: Don't report exactly same additional details.
2662 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2664         A fix for bug #324917
2665         * cs-parser.jay: Add missing multidimensional non-expression type
2666         ranks.
2667         
2668 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2670         A fix for bug #428191
2671         * anonymous.cs: Create an outer generic fields also for non-storey
2672         anonymous methods.
2674 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2676         A fix for bug #378294
2677         * class.cs: Make fixed size buffers gmcs feature only.
2679 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2681         A fix for bug #355622, #324993
2682         * assign.cs, const.cs, class.cs: Create new EmitContext for each
2683         field initializer.
2685 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2687         * nullable.cs, expression.cs, namespace.cs, delegate.cs: Duplicate
2688         error reporting.
2690 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2692         A fix for bug #416110
2693         * generic.cs: Struct constraint results in default ctor and
2694         ValueType base type constraint to be set.
2696 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2698         A fix for bug #423791
2699         * generic.cs: Fixed params output type type-inference.
2701 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2703         * cs-parser.jay, expression.cs: Fixed few expression crashes.
2704         
2705 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2707         * cs-tokenizer.cs: Don't break on extra partial modifier.
2709 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2711         A fix for bug #427592
2712         * generic.cs: Use common parameter resolve method.
2714 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2716         A fix for bug #414758
2717         * expression.cs, ecore.cs: Fixed crash when accessing non-static
2718         property.
2720 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2722         * driver.cs, namespace.cs: Read types and namespaces after all
2723         requested assemblies are loaded, fixes issues with System.Core
2724         auto-reference, and #419888.
2726 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2728         A fix for bug #417705
2729         * cs-parser.jay: Fixed as/is operator expression split.
2731 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2733         * const.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay:
2734         Fixed expression tree representation of empty new expression and
2735         new initializer expression.
2737 2008-09-18  Miguel de Icaza  <miguel@novell.com>
2739         * eval.cs: Remove warning, keep reference to driver around.
2741         * Hide fields that do not need to be public.
2743 2008-09-17  Marek Safar  <marek.safar@gmail.com>
2745         A fix for bug #426385
2746         * expression.cs (ImplicitlyTypedArrayCreation): Use full implicit
2747         conversion for array elements.
2749 2008-09-17  Marek Safar  <marek.safar@gmail.com>
2751         * expression.cs, statement.cs, class.cs, cs-parser.jay: Fixed
2752         void parsing conflicts.
2754 2008-09-15  Marek Safar  <marek.safar@gmail.com>
2756         A fix for bug #425601
2757         * driver.cs, typemanager.cs, namespace.cs: Automatically reference
2758         System.Core only when there is no custom ExtensionAttribute
2759         implementation.
2761 2008-09-15  Miguel de Icaza  <miguel@novell.com>
2763         * namespace.cs: Do not report CS0246 (name
2765 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2767         A fix for bug #425669
2768         * generic.cs: Don't cache generic static anonymous method 
2769         containers.
2771 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2773         * generic.cs, class.cs, delegate.cs: Check recursive inherited
2774         conflicting constraints.
2776 2008-09-12  Raja R Harinath  <harinath@hurrynot.org>
2778         * cs-tokenizer.cs (consume_identifier): Allow partial methods in
2779         mcs too.
2781 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2783         * literal.cs, convert.cs, expression.cs, statement.cs: More null
2784         to null pointer conversion fixes.
2786 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2788         * cs-parser.jay, expression.cs: An implicitly typed local variable
2789         declarator cannot use an array initializer.
2791 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2793         * cs-parser.jay: Reduced number of printed tokens, add sorting.
2795 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2797         * generic.cs (InflatedConstraints): Don't crash when constraints
2798         are different.
2799         
2800         * cs-parser.jay: const_declarator is a block.
2802         * constant.cs: Check for not allowed NaN conversions.
2804 2008-09-10  Miguel de Icaza  <miguel@novell.com>
2806         * driver.cs: Drop --shell argument, the compiler is no longer a
2807         REPL. 
2809         * eval.cs: Move most of the code that deals with evaluation into
2810         this file and document the public API from repl.cs
2812         * repl.cs: Remove from here.
2813         
2814 2008-09-10  Marek Safar  <marek.safar@gmail.com>
2816         A fix for bug #424684
2817         * generic.cs: Generic class constraints must come first.
2819 2008-09-09  Miguel de Icaza  <miguel@novell.com>
2821         * cs-parser.jay: Improve error reporting for syntax errors in
2822         statements and expressions, we now report the expected tokens
2823         instead of reporting the useless "; expected".
2825         Drop the strings from the token declaration, it turns out that
2826         they did not do what I thought they did.  Instead they were adding
2827         two sets of tokens to the tables.
2829 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2831         * typemanager.cs, generic.cs, parameter.cs, expression.cs, class.cs,
2832         delegate.cs: Share special type check.
2834 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2836         A fix for bug #423981
2837         * expression.cs (EmitBranchable): Correctly emit inverted float conditions.
2839 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2841         * ecore.cs (ReducedConstantExpression): Implemented ConvertExplicitly and
2842         ConvertImplicitly.
2844 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2846         A fix for bugs: #324750, #335946
2847         * cs-tokenizer.cs, cs-parser.jay, expression.cs: Use a custom 
2848         lookup rule to determine ?-based tokens.
2850 2008-09-08  Miguel de Icaza  <miguel@novell.com>
2852         * repl.cs (OptionalAssign.EmitStatement): It is possible that some
2853         expressions (like event adding or removing) end up here, so we
2854         need to treat those as statements.
2856         Add LoadAssembly method.
2858 2008-09-04  Miguel de Icaza  <miguel@novell.com>
2860         * repl.cs: Add Time method.
2862 2008-09-05  Marek Safar  <marek.safar@gmail.com>
2864         * cs-tokenizer.cs: Fixed swaped UTF-16 surrogates parsing.
2866 2008-09-05  Miguel de Icaza  <miguel@novell.com>
2868         * repl.cs: Add workaround for old compilers.
2870 2008-09-04  Jb Evain  <jbevain@novell.com>
2872         * repl.cs (PrettyPrint): pretty print everything that
2873         implements IDictionary, as well as IEnumerables. Also,
2874         add a quit helper property.
2876 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2878         * constant.cs: Better error reporting for decimal literals.
2879         
2880         * class.cs, attribute.cs, typemanager.cs: Emit more fixed buffer
2881         field attributes.
2882         
2883 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2884                         Miguel de Icaza  <miguel@novell.com>
2886         A fix for bug #422951
2887         * assign.cs (Assign.DoResolve): Perform the type conversions
2888         checks before we attempt to initialize `New' initializers. 
2890 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2892         A fix for bug #422853
2893         * delegate.cs (DelegateCreation): Add special handling for
2894         EmptyExpression.Null instance expression which is just another
2895         hack for undecided member instance exression.
2897 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2899         * expression.cs, ecore.cs: Emit full expression tree for reduced
2900         binary expressions.
2902 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2904         * expression.cs (This): Guard against multi-resolving.
2905         
2906         * ecore.cs, statement.cs (Throw): Simplified.
2907         
2908         * flowanalysis.cs: Also verify event fields.
2910 2008-09-04  Miguel de Icaza  <miguel@novell.com>
2912         * assign.cs (Assign.DoResolve): Perform the type conversions
2913         checks before we attempt to initialize `New' initializers. 
2915         * repl.cs (PrettyPrint): Add Hashtable prettyprint
2917         * anonymous.cs (AnonymousTypeClass): On EvalMode make the class
2918         public. 
2920         * repl.cs: Update help.
2922 2008-09-03  Miguel de Icaza  <miguel@novell.com>
2924         * driver.cs (ProcessDefaultConfig): Now it encapsulates all the
2925         handling of the default config handling, including the special
2926         treatment of System.Core assembly. 
2928         Fixes the REPL processing for LINQ.
2930 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2932         A fix for bug #422507
2933         * expression.cs (UnboxCast): Add missing child expression mutator.
2935 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2937         * driver.cs: Don't self reference System.Core assembly.
2939 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2941         A fix for bug #422507
2942         * expression.cs (StringConcat): Add missing type mutator.
2944 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2946         * generic.cs (TypeInferenceContext): Follow equality rule for
2947         constructed type lower bound type inference.
2949 2008-09-02  Miguel de Icaza  <miguel@novell.com>
2951         * getline.cs (CmdRefresh): Apply patch from Douglas S. Blank
2952         <dblank@cs.brynmawr.edu> which updates the cursor position on
2953         refresh.
2954         
2955 2008-09-02  Marek Safar  <marek.safar@gmail.com>
2957         A fix for bug #367145
2958         * driver.cs: Fixed import of extension methods when using -noconfig
2959         option.
2961 2008-09-02  Marek Safar  <marek.safar@gmail.com>
2963         * iterator.cs: Don't emit GetEnumerator method twice but call a generic
2964         version from non-generic implementation instead.
2966 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2968         A fix for bug #418908
2969         * class.cs: Use AddScopeStatement for field initializers.
2971 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2973         A fix for bug #415385
2974         * ecore.cs, convert.cs: Do method group conversion for equal group types.
2976 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2978         A fix for bug #421736
2979         * iterators.cs: Don't crash on unreachable iterators.
2981 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2983         A fix for bug #421628
2984         * parameter.cs, attribute.cs: Clone also parameter attributes.
2986 2008-08-30  Miguel de Icaza  <miguel@novell.com>
2988         * namespace.cs (LookupType): In EvalMode, try to replace
2989         the TypeBuilder from our cache with a Type as Reflection.Emit does
2990         not  like to mix code from older assemblies emitted and new
2991         assemblies emitted. 
2993         This sounds like a serious Mono bug that prevents multiple
2994         assemblies to be generated and consumed at the same time.
2996         * cs-parser.jay (push_current_class): Do not make interactive
2997         classes internal or private, make them public as we currently
2998         generate each new class in a new assembly.   
3000 2008-08-29  Miguel de Icaza  <miguel@novell.com>
3002         * decl.cs, roottypes.cs, class.cs:: Add an infrastructure to
3003         remove types that are entered into the global namespace during
3004         parsing so that we can remove them on failure.
3006         * cs-parser.jay: Parsing: we now keep track of types that are
3007         entered into global variables and queue those in case the parsing
3008         or resolution fail.
3010         This happens in a few situations: during partial-input, we invoke
3011         the parser repeatedly for example with the string "class X", this
3012         would cause X to be registed, and we need to remove this
3013         registration so that another parse attempt later with say "class X {"
3014         would actually work.
3016         Additionally, if there is an error in the resolution phase, for
3017         example: "class X : NonExistant {}" th
3018         
3019         * cs-parser.jay: Be more precise with the errors being raised,
3020         instead of flagging all exceptions during parsing to be attributed
3021         to the parsing process, distinguish those from errors happening in
3022         the actions and hint that using -v would produce the actual
3023         exception. 
3025         * repl.cs: Do not load all compiler references on each reset,
3026         doing the partial reset takes care of this.
3027         
3028 2008-08-28  Miguel de Icaza  <miguel@novell.com>
3030         * repl.cs: Add support for loading all the files from
3031         ~/.config/csharp/*cs as startup scripts and ~/.config/csharp/*.dll
3032         as shell libraries.
3034         Introduce a micro-parser that is able to deambiguate on its input
3035         whether we are dealing with a compilation unit (namespace, class,
3036         interface, struct, delegate) declaration or a statement.   This
3037         allows both declarations and statements to be entered. 
3039         Set history size by default to 300 lines.
3041         Instead of distinguishing based on the parser.InteractiveResult,
3042         have only two cases: statements were parsed, or a compilation unit
3043         was.   Always pull the Using statement additions from the
3044         compilation unit parse.
3045         
3046         * cs-tokenizer.cs: Rename tokens to better describe their intent
3047         (EvalStatementParserCharacter and EvalCompilationUnitParserCharacter).
3048         
3049         * rootcontext.cs: Split EvalMode into EvalMode and StatementMode.
3050         EvalMode is used to trigger the lookup of global variables while
3051         StatementMode is used turn variable declarations into static
3052         fields.
3054         * getline.cs: Allow history size to be set.
3055         
3056 2008-08-29  Marek Safar  <marek.safar@gmail.com>
3058         A fix for bug #360755
3059         * ecore.cs (SimpleName): Exclude indexers from simple name resolve.
3061 2008-08-29  Marek Safar  <marek.safar@gmail.com>
3063         * generic.cs, iterators.cs, codegen.cs: Removed unused variable.
3064         
3065         * typemanager.cs, statement.cs, ecore.cs, enum.cs: Don't reconstruct enum
3066         member name, it is too confusing
3067         
3068         * decl.cs, class.cs: Don't report unused fields with attached attribute.
3069         
3070         * rootcontext.cs: Finally default to warning level 4.
3072 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3074         * class.cs (CheckBase): Ignore overloaded operators.
3076 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3078         A fix for bug #420830
3079         * expression.cs, cs-parser.jay: Put back InvocationOrCast expression.
3081 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3083         A fix for bug #420832
3084         * anonymous.cs, iterators.cs: Also clone hoisted this iterator variable.
3086 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3088         A fix for bug #420386
3089         * nullables.cs: Fixed logic of nullable user comparison operators involving
3090         null values.
3092 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3093         
3094         * attribute (IsClsCompliant): Use FALSE value for pointer types.
3096 2008-08-27  Miguel de Icaza  <miguel@novell.com>
3098         * repl.cs: Add support for aborting the running code with C-c. 
3100 2008-08-27  Raja R Harinath  <harinath@hurrynot.org>
3102         * cs-parser.jay (CS1002): Dump 'yyToken' with Report.ExtraInformation.
3104 2008-08-27  Miguel de Icaza  <miguel@novell.com>
3106         * cs-parser.jay (interactive_statement_list): A new set of rules
3107         for hosting statements that uses the "interactive_" prefix.   
3109         * repl.cs: Add support for parsing `using' as a statement or as a
3110         directive.  Deambiguating before passing this to the parser.
3112         We need to distinguish statement_expressions that occur at the
3113         toplevel vs those that occur embedded into expressions.
3115         * getline.cs: Applied patch from Stuart Carnie <stuart.carnie@gmail.com> 
3116         that fixes the cursor key handling, and a history bug.
3117         
3118 2008-08-26  Miguel de Icaza  <miguel@novell.com>
3120         * Makefile: Drop BOOTSTRAP_COMPILER as that was masking the
3121         limitations in Console, instead the 2.0 bootstrap libraries now
3122         include the Console bits.
3124         Also, remove the use of Nullables from getline.cs
3126         ------------
3127         
3128         Interactive support for the C# compiler.   Use gmcs --shell to
3129         enter a read-eval-print loop shell.
3131         Docs: http://www.mono-project.com/CsharpRepl
3132         
3133         * sources: include repl.cs here and getline.cs for gmcs.exe,
3134         everything else is getline.cs impaired.
3136         * Makefile: when bootstrapping pass a special flag
3137         BOOTSTRAP_COMPILER which we use to prevent failures in compilation
3138         as we use NET_2_0 define to pull 2.0 APIs from System.Console.
3139         This distinguishes those two cases.
3141         * repl.cs: Support for a read-eval-print loop.   Will be soon
3142         refactored into eval support and then REPL on top of it.
3144         * ecore.cs: If a simplename lookup fails, before erroring out,
3145         if we are in EvalMode to resolve the name to a declaration in the
3146         Eval-land.    
3148         This means that variable declarations that happened in previous
3149         classes (as repl puts every statement in a separate class) are
3150         made visible in this way.
3152         * cs-parser.jay: UnexpectedEOF, a new flag that is set if we
3153         triggered an error due to the end of file being reached.   This is
3154         used to do multi-line input, and notify the caller that the user
3155         needs to provide more text before a successful parse.
3157         Add new grammar rules after the INTERACTIVE_PARSER token is seen
3158         to drive the evaluation with a custom wrapper. 
3160         * driver.cs: Add support for --shell, and refactor some code to be
3161         reused from repl.cs
3162         
3163         * namespace.cs: Add support for serializing the contents of the
3164         namespaces and reloading them.  
3166         * getline.cs: A managed implementation of ReadLine under
3167         X11/Apache2 license terms.  Easy to embed in other applications as
3168         well.
3170         * namespace.cs: Add some functions to save and restore the
3171         namespace state.
3173         * rootcontext.cs: New public field.
3175         * cs-tokenizer.cs: Add support for one of the possible characters
3176         we introduce into the token stream.  
3178         This patch does not affect the regular tokenization process, the
3179         only performance hit would happen if there is an invalid character
3180         on the input string.
3182         * support.cs: Move isatty helper routine here.
3184         * codegen.cs: Small cleanup, and add a mechanism to initialize the
3185         code generator for in-memory assemblies.
3187 2008-08-26  Marek Safar  <marek.safar@gmail.com>
3189         * generic.cs, ecore.cs, delegate.cs, cs-parser.jay, expression.cs: A type
3190         parameter cannot be always used as a type.
3192 2008-08-21  Marek Safar  <marek.safar@gmail.com>
3194         * convert.cs, expression.cs: Use single ExplicitReferenceConversion routine.
3196 2008-08-21  Marek Safar  <marek.safar@gmail.com>
3198         * convert.cs: Implement explicit array to IList<T> conversion.
3200 2008-08-20  Marek Safar  <marek.safar@gmail.com>
3202         A fix for bug #362740
3203         * cs-tokenizer.cs: Handle UTF-16 surrogates.
3205 2008-08-20  Marek Safar  <marek.safar@gmail.com>
3206         
3207         * generic.cs, support.cs, typemanager.cs, lambda.cs, parameter.cs,
3208         pending.cs, ecore.cs, linq.cs, class.cs, decl.cs, delegate.cs,
3209         flowanalysis.cs, iterators.cs, cs-parser.jay, convert.cs, anonymous.cs,
3210         expression.cs, attribute.cs, statement.cs, doc.cs: Refactored parameters
3211         handling to use just one type of infrastructure and deal with generics
3212         more effectivelly.
3214 2008-07-23  Martin Baulig  <martin@ximian.com>
3216         *** Merged this from trunk revision 108527 ***
3218         * statement.cs
3219         (ExplicitBlock.EmitSymbolInfo): Moved to `ToplevelBlock'.
3220         (ToplevelBlock.EmitSymbolInfo): Tell the symbol writer about the
3221         scope variable.
3223 2008-08-15  Marek Safar  <marek.safar@gmail.com>
3224         
3225         * ecore.cs, linq.cs, const.cs, expression.cs, statement.cs: More robust
3226         error checks.
3228 2008-08-15  Marek Safar  <marek.safar@gmail.com>
3229         
3230         * delegate.cs: Fixed compiler crash when creating delegate using partial
3231         method.
3232         
3233         * typemanager.cs: MulticastDelegate is not a delegate.
3235 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3236         
3237         * expression.cs, ecore.cs, anonymous.cs, class.cs: Fixed missing error
3238         checks.
3240 2008-08-14  Raja R Harinath  <harinath@hurrynot.org>
3242         * cs-parser.jay (type): Allow 'var' in mcs too.
3243         (local_variable_type): Likewise.
3245 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3246         
3247         * driver.cs: Removed broken -noconfig variants.
3249 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3250         
3251         A fix for bug #417078
3252         * expression.cs: Emit correctly left side pointer operators.
3254 2008-08-13  Marek Safar  <marek.safar@gmail.com>
3256         * generic.cs, lambda.cs: Inflate method generic arguments only.
3258 2008-08-12  Marek Safar  <marek.safar@gmail.com>
3260         * class.cs: Fixed struct layout check regression.
3262 2008-08-12  Marek Safar  <marek.safar@gmail.com>
3264         * cs-parser.jay, enum.cs: Simplified enum parsing.
3265         
3266         * decl.cs: Check all type parameters conflicts.
3267         
3268         * expression.cs, statement.cs, attribute.cs: More expression checks.
3270 2008-08-11  Marek Safar  <marek.safar@gmail.com>
3272         * generic.cs: Add type inference types restriction.
3273         
3274         * parameter.cs, class.cs, delegate.cs, iterators.cs, cs-parser.jay,
3275         anonymous.cs, expression.cs: Allocate less accessor parameters.
3277 2008-08-08  Marek Safar  <marek.safar@gmail.com>
3279         * typemanager.cs, ecore.cs: Ambiguous operators can come from different
3280         classes.
3282 2008-08-08  Marek Safar  <marek.safar@gmail.com>
3284         * convert.cs, delegate.cs: Fixed delegate compatibility conversion. 
3286 2008-08-07  Marek Safar  <marek.safar@gmail.com>
3288         * class.cs, decl.cs, iterator.cs, ecore.cs: Refactor base type resolving.
3289         Also fixes #362146 and #381592.
3291 2008-08-07  Marek Safar  <marek.safar@gmail.com>
3293         * ecore.cs: Reduced constant cannot be used as an attribute value.
3294         
3295         * cs-parser.jay: Base expression has to be a type.
3296         
3297         * expression.cs (Conditional): Uses ReducedExpression.
3299 2008-08-06  Marek Safar  <marek.safar@gmail.com>
3301         A fix for bug #376826
3302         * parameter.cs, ecore.cs, anonymous.cs, expression.cs, statement.cs: An
3303         address of hoisted local variable or parameter cannot be taken.
3305 2008-08-05  Marek Safar  <marek.safar@gmail.com>
3307         * ecore.cs, constant.cs, expression.cs, statement.cs: Resolve correctly 
3308         anonymous method inside checked/unchecked expression.
3310 2008-08-05  Marek Safar  <marek.safar@gmail.com>
3312         * typemanager.cs (IsEqual): Guard against null.
3313         
3314         * ecore.cs, class.cs, convert.cs, const.cs, constant.cs, expression.cs,
3315         attribute.cs, enum.cs, statement.cs: Pass EmitContext to constant conversion
3316         routine. Fixed few misleading conversion errors.
3318 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3320         * class.cs: Consider generics when checking cycles in struct layout.
3322 2008-08-04  Raja R Harinath  <harinath@hurrynot.org>
3324         * cs-tokenizer.cs (get_cmd_arg): Simplify.  Don't be too pedantic.
3326 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3328         A fix for bug #414165
3329         * anonymous.cs: Use same anonymous implementation method for all anonymous
3330         method emits.
3332 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3334         * generic.cs, anonymous.cs, statement.cs: Emit inherited anonymous method
3335         constraints.
3337 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3339         * cs-parser.jay: Typeof argument has to be a type expression.
3340         
3341         * namespace.cs: Check alias and namespace definitions collisions.
3342         
3343         * class.cs, pending.cs: Moved explicit interface accessor implementation
3344         check.
3345         
3346         * delegate.cs, expression.cs: Verify special name invocations.
3347         
3348 2008-08-01  Marek Safar  <marek.safar@gmail.com>
3350         * cs-parser.jay: Don't choke on empty generic type arguments.
3351         
3352         * cs-tokenizer.cs: Handle escaped preprocessor directives.
3353         
3354         * expression.cs, ecore.cs: Minor expressions bugs.
3356 2008-08-01  Marek Safar  <marek.safar@gmail.com>
3358         * cs-parser.jay: Removed duplicate interface declaration (fixes 2 conflicts)
3359         and added more error handling.
3360         
3361         * class.cs, iterators.cs, anonymous.cs: Removed useless interface parameter.
3362         
3363         *  modifiers.cs, enum.cs: Fixed.
3365 2008-07-31  Jb Evain  <jbevain@novell.com>
3367         * driver.cs: remove -pkg ability of smcs.
3369 2008-07-30  Marek Safar  <marek.safar@gmail.com>
3371         * statement.cs (Switch): Correctly set empty default target for single
3372         blocks.
3374 2008-07-30  Marek Safar  <marek.safar@gmail.com>
3376         * typemanager.cs, assign.cs, driver.cs, expression.cs, statement.cs: Rewrote
3377         string switch statement implementation to use string dictionary which
3378         significantly (2-8x) improves performance of generated code.
3380 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3382         A fix for bug #412880 by Atsushi Enomoto <atsushi@ximian.com>
3383         * modifiers.cs (GetDescription): Fixed FamANDAssem case.
3384         
3385 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3387         A fix for bug #412595
3388         * typemanager.cs, convert.cs, expression.cs: Some types are never
3389         convertible to each other.
3391 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3393         * nullable.cs (CreateNullConstant): An error messages update.
3395 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3397         A fix for bug #412595
3398         * cfold.cs: Don't cast undefined bool constant.
3400 2008-07-29  Martin Baulig  <martin@ximian.com>
3402         * symbolwriter.cs
3403         (SymbolWriter.Reset): New public static method.
3405         * driver.cs
3406         (CompilerCallableEntryPoint.Reset): Call SymbolWriter.Reset().
3408 2008-07-28  Marek Safar  <marek.safar@gmail.com>
3410         * cs-tokenizer.cs (IsLambdaOpenParens): Optimized using more stop tokens.
3411         
3412         * expression.cs (ElementAccess): Exact size allocation.
3414 2008-07-26  Marek Safar  <marek.safar@gmail.com>
3416         * driver.cs: Replaced outdated UnixParseOption with CSCParseOption.
3418 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3420         * flowanalysis.cs (StructInfo): Fixed detection of dynamic types.
3421         
3422         * class.cs: Removed $PRIVATE$ field hack which caused problems during
3423         flow analysis.
3425 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3427         A fix for bug #412217
3428         * assign.cs: Mutate also assignment type.
3430 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3432         A fix for bug #323644
3433         * typemanager.cs (IsValidProperty): Verify DefaultMemberName when checking
3434         indexers.
3436 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3438         A fix for bug #412134
3439         * expression.cs (ResolveOperatorEnum): Do implicit conversion of
3440         non-enumerable operands when overloading equality or bitwise operators.
3442 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3444         * anonymous.cs: Cache closed generic anonymous method delegates.
3446 2008-07-24  Marek Safar  <marek.safar@gmail.com>
3448         * lambda.cs, linq.cs, class.cs, iterators.cs, cs-parser.jay, assign.cs, 
3449         anonymous.cs, statement.cs: Always emit anonymous method as static method
3450         when is instance free. Use nesting for nested anynomous methods blocks.
3451         
3452 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3454         * anonymous.cs (MutateGenericMethod): Added extra code path for imported
3455         types.
3457 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3459         * expression.cs: Removed MakeSimpleCall.
3461 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3463         A fix for bug #323012
3464         * class.cs, pending.cs: Emit proxy for indexers when they differ in name.
3465         Base method implementing interface has to be public.
3467 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3469         * cs-parser.jay: Don't break on missing argument.
3471 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3473         A fix for bug #320993
3474         * report.cs, parameter.cs, class.cs, decl.cs, delegate.cs, attribute.cs,
3475           enum.cs, codegen.cs: Report CLS compliance errors as warnings.
3477 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3479         A fix for bug #320748
3480         * convert.cs: Implicit user operators cannot convert to interfaces
3482 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3484         A fix for bug #312686
3485         * driver.cs: Ignore empty assembly references.
3487 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3489         A fix for bug #387040
3490         * ecore.cs: Skip constrains check for an explicit implementation.
3492 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3494         A fix for bug #409045
3495         * cs-tokenizer.cs, rootcontext.cs, class.cs, location.cs, delegate.cs,
3496           cs-parser.jay, driver.cs, expression.cs, attribute.cs: Conditional
3497           identifiers are file specific unless passed as input arguments.
3499 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3501          * typemanager.cs, parameter.cs, class.cs, attribute.cs: Use an attribute
3502          to emit UnmanagedMarshal data under 2.0 profile.
3504 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3506         A fix for bug #410369
3507         * parameter.cs: Clone correctly ParamsParameter.
3509 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3511         * expression.cs (Argument): Always report type for type based expressions
3512         errors.
3514 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3516         A fix for bug #410666
3517         * anonymous.cs: Correctly initialize generic storey reference.
3519 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3521         * convert.cs: Don't box same type arguments.
3523 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3525         * ecore.cs, linq.cs, delegate.cs, constant.cs, nullable.cs, expression.cs:
3526         Finished missing generic type mutators.
3528 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3530         * iterators.cs, statement.cs: Finished statements CloneTo.
3532 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3534         * anonymous.cs: ExpressionTreeProxy is of Value type expression.
3535         
3536         * expression.cs: Emit optimized default value expressions in expression tree
3537         array initializer.
3539 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3541         * ecore.cs, cs-parser.jay, statement.cs: Error reporting fixes.
3543 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3545         A fix for bug #367536
3546         * cs-parser.jay: Check static constructor of generic types for an access
3547         modifier.
3549 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3551         A fix for bug #353800
3552         * lambda.cs: Emit ret for contextual statements.
3553         
3554         * codegen.cs: Keep both resolved and unreachable flags, otherwise we end
3555         up emitting redundant ret for all anonymous methods with return.
3557 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3559         A fix for bug #365188
3560         * ecore.cs, anonymous.cs, expression.cs, codegen.cs, statement.cs: Don't
3561         create anonymous method storey in unreachable block.
3563 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3565         * generic.cs, typemanager.cs, cs-tokenizer.cs, parameter.cs, namespace.cs,
3566         class.cs, delegate.cs, flowanalysis.cs, iterators.cs, anonymous.cs,
3567         driver.cs, nullable.cs, expression.cs, attribute.cs, codegen.cs,
3568         statement.cs: Fixed relevant defects found by Gendarme.
3570 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3572         A fix for bug #325291
3573         * modifiers.cs, class.cs, cs-parser.jay, anonymous.cs, codegen.cs, 
3574         statement.cs: Replaced IAnonymousHost with top level block flag.
3576 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3578         * cs-parser.jay: Clean up unused open_parens.
3580 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3582         * ecore.cs: Custom error message for a range variable assignment.
3584 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3586         * constant.cs, typemanager.cs: Emit empty string ("") as string.Empty field
3587         load.
3589 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3591         * literal.cs: Null literal is of object type.
3593 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3595         * nullable.cs (LiftedBinaryOperator): Always lift unwrapped nullable
3596         expression of nullable equality comparison.
3598 2008-07-15  Marek Safar  <marek.safar@gmail.com>
3600         * expression.cs(PointerArithmetic): Removed redundant assignment.
3602 2008-07-15  Marek Safar  <marek.safar@gmail.com>
3604         * decl.cs (GetSignatureForError): Report full namespace name for containers.
3606 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3608         A fix for bug #408361
3609         * anonymous.cs (MutateGenericMethod): Store generic type arguments before
3610         they are replaced by GetMethod.
3612 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3614         A fix for bug #408721 by jeremie.laval@gmail.com
3615         * expression.cs (Indirection): Implemented CloneTo.
3617 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3619         * statement.cs (AssignableSlots): Temporary disabled variable initialization
3620         assert check.
3622 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3624         * report.cs (EnableReporting): Don't reinitialize 0-based values.
3626 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3628         * linq.cs: Reset tranparent parameter counter in probing mode.
3630 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3632         * anonymous.cs: Mutate anonymous method type.
3634 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3636         * ecore.cs, anonymous.cs: Mutate field expressions.
3638 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3640         A fix for bug #369670
3641         * linq.cs, statement.cs: Use explicit block for query expressions variables.
3643 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3645         * report.cs, ecore.cs: Flush recorder only when silent mode is off.
3647 2008-07-10  Raja R Harinath  <harinath@hurrynot.org>
3649         Fix bug #314902
3650         * cs-tokenizer.cs (is_punct): If a generic lookahead is looking
3651         only one '>', and finds a '>>', abort the generic lookahead.
3653 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3655         A fix for bug #319902
3656         * cs-tokenizer.cs: Always look-ahed for `>='  when tokenizing `>'.
3658 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3660         A fix for bug #406371
3661         * statement.cs: Moved EmitSymbolInfo to Block.
3663 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3665         * ecore.cs: Report better error for extension method overload failures.
3667 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3669         * expression.cs (Is): No need to box reference values.
3671 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3673         * class.cs: Use event resolve context when initializing CreateEmitContext.
3675 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3677         A fix for bug #394436
3678         * anonymous.cs, class.cs, expression.cs, lambda.cs: Emit correctly extension
3679         method used inside expression trees. Added more LINQ to expression tree
3680         conversions.
3682 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3684         A fix for bug #378189, #370577
3685         * lambda.cs, ecore.cs: Implemented 3.0 enhancement to better conversion
3686         from expression.
3688 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3690         * anonymous.cs, class.cs, decl.cs: Emit CompilerGenerated attribute
3691         hierarchically.
3693 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3695         A fix for bug #406702
3696         * anonymous.cs: Always park anonymous method in the nearest parent storey.
3698 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3700         A fix for bug #406648
3701         * cs-parser.jay: Report nullable use in mcs for some cases.
3703 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3705         * ecore.cs: Improved argument mismatch error messages.
3707 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3709         * anonymous.cs: Don't cache generic delegates when reference MVAR argument.
3711 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3713         * expression.cs (TypeOf): Mutate type argument.
3715 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3717         * class.cs: Report missing partial modifier for correct type.
3719 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3721         * ecore.cs, expression.cs (VariableReference): Variable property is 
3722         protected.
3724 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3726         * ecore.cs, convert.cs: Made OpcodeCast more memory efficient.
3727         
3728 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3730         * anonymous.cs, class.cs, lambda.cs, iterator.cs: Cache static anonymous
3731         method delegates.
3733 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3735         * anonymous.cs, class.cs, expression.cs, iterator.cs, statement.cs: Reduce
3736         anonymous method storey to an instance method when only "this" is hoisted.
3738 2008-07-03  Marek Safar  <marek.safar@gmail.com>
3740         A fix for bug #321615
3741         * expression.cs: Pointer comparisons use unsigned operator.
3743 2008-07-03  Marek Safar  <marek.safar@gmail.com>
3745         * expression.cs: Fixed native pointer conversions. Also fixes #321615.
3747 2008-07-02  Marek Safar  <marek.safar@gmail.com>
3749         A fix for bug #404905
3750         * class.cs: Always initialize local unsafe variables.
3752 2008-06-30  Marek Safar  <marek.safar@gmail.com>
3754         A fix for bug #396987
3755         * expression.cs (NewInitialize): Clear local temporary variable for next run
3757 2008-06-27  Marek Safar  <marek.safar@gmail.com>
3759         A fix for bug #401020
3760         * ecore.cs: Both types and modifiers have to match for ref and out arguments
3762 2008-06-27  Marek Safar  <marek.safar@gmail.com>
3764         A fix for bug #398319
3765         * cs-parser.jay: Implemented undocumented base access expression inside
3766         anonymous types.
3768 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3770         A fix for bug #404227
3771         * cs-parser.jay: Parse namespace declaration using qualified identifier.
3773 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3775         A fix for bug #404227
3776         * convert.cs: Fixed explicit array to interface cast.
3778 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3780         A fix for bug #403894
3781         * delegate.cs: Mutate DelegateInvocation type.
3783 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3785         A fix for bug #379348
3786         * delegate.cs: Box a load of generic parameters.
3788 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3790         * expression.cs: Add an array creation arguments mutate.
3792 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3794         A fix for bug #386068
3795         * anonymous.cs, expression.cs: Emit correctly hoisted expression tree
3796         parameter.
3798 2008-06-25  Marek Safar  <marek.safar@gmail.com>
3800         * ecore.cs, expression.cs: Fixed broken TypeCast clone, implemented few more
3801         CloneTo.
3803 2008-06-25  Marek Safar  <marek.safar@gmail.com>
3805         A fix for bug #403518
3806         * delegate.cs: Type correctly anonymous method new invocation.
3808 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3810         A fix for bug #394826
3811         * anonymous.cs: Fully qualify members when resolving anonymous type internal
3812         calls.
3814 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3816         A fix for bug #394826
3817         * anonymous.cs, iterators.cs: Construct generic storey only when is really
3818         needed.
3820 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3822         * class.cs: Clone indexer parameters for localized capturing.
3824 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3826         A fix for bug #402379
3827         * expression.cs: Don't crash when an object initializer resolve fails.
3829 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3831         A fix for bug #402888
3832         * expression.cs: Mutate conditional expression.
3834 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3836         A fix for bug #401012
3837         * class.cs: Keep StructLayout in shared container.
3839 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3841         A fix for bug #400438
3842         * decl.cs, class.cs: Only properties can be automatically implemented.
3844 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3846         * statement.cs (ChangeToIterator): Copy also labels.
3848 2008-06-23  Marek Safar  <marek.safar@gmail.com>
3850         * ecore.cs: Pass type argument details to parent extension method.
3852 2008-06-23  Marek Safar  <marek.safar@gmail.com>
3854         A fix for bug #375966
3855         * delegate.cs: Fixed IsTypeCovariant generic type conversions.
3857 2008-06-23  Raja R Harinath  <harinath@hurrynot.org>
3859         * Makefile (bootstrap-libs): Pass NO_DIR_CHECK to sub-make.
3861 2008-06-22  Marek Safar  <marek.safar@gmail.com>
3863         A fix for bug #394347
3864         * anonymous.cs: Cache compatible delegates as compatibility check produces
3865         a new method every time.
3867 2008-06-20  Marek Safar  <marek.safar@gmail.com>
3869         * anonymous.cs: Propagate storey reference for single references.
3871 2008-06-20  Marek Safar  <marek.safar@gmail.com>
3873         A fix for bug #387615
3874         * assign.cs, expression.cs: Correctly clone compound assignment.
3876 2008-06-19  Marek Safar  <marek.safar@gmail.com>
3878         A fix for bug #359611, #359604
3879         * anonymous.cs: Mutate all types of hoisted parameters.
3881 2008-06-19  Marek Safar  <marek.safar@gmail.com>
3883         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, linq.cs, class.cs
3884         delegate.cs, iterators.cs, cs-parser.jay, assign.cs, anonymous.cs, driver.cs
3885         expression.cs, codegen.cs, statement.cs
3886         
3887         Fixes bugs: #318652, #323223, #234779, #325069, #325476, #332532, #334465,
3888         #345907, #349190, #353276, #355256, #359617, #378542, #384584, #396530
3889         
3890         ** Anonymous methods, lambda expressions rewrite **
3891         
3892         Anonymous expressions are now resolved when an explicit block is resolved 
3893         and they don't require any registration procedure anymore. Further,
3894         anonymous methods are defined when explicit block is emitted which allows
3895         better control of whole process and opens possibilities for more
3896         optimizations as well as alternative to reverse whole process.
3897         
3898         A concept of `MutateHoistedGenericType' was introduced to keep the resolve
3899         process consistent and to correctly emit hoisted generic methods when they
3900         have at least 1 hoisted variable.
3901         
3902 2008-06-17  Martin Baulig  <martin@ximian.com>
3904         * class.cs: Also emit the `[DebuggerHidden]' attribute on the main
3905         iterator method.
3906         (AbstractPropertyEventMethod.IsDebuggerHidden): New protected
3907         virtual property; check it in Emit().
3908         (PropertyMethod.IsDebuggerHidden): Override, check whether we're
3909         an iterator.
3910         (MethodOrOperator.ResolveMethods): Set `DEBUGGER_HIDDEN' if we're
3911         an iterator.
3912         (Indexer.Define): Likewise.
3914 2008-06-17  Marek Safar  <marek.safar@gmail.com>
3916         * convert.cs: Don't use IsInterface on type arguments.
3917         
3918         * delegate.cs: DelegateInvocation uses MethodInfo.
3919         
3920         * parameter.cs: Removed IsTypeParameter.
3921         
3922         * generic-mcs.cs: More missing stuff.
3924 2008-06-16  Martin Baulig  <martin@ximian.com>
3926         * modifiers.cs
3927         (Modifiers.DEBUGGER_HIDDEN): New public const.
3929         * typemanager.cs
3930         (TypeManager.GetDebuggerHiddenAttribute): New public static method.
3932         * class.cs
3933         (MethodOrOperator.Emit): Check `Modifiers.DEBUGGER_HIDDEN'.
3934         (AbstractPropertyEventMethod): Likewise.
3935         (Constructor.Emit): Likewise.
3936         (SourceMethod.SetCompilerGenerated): Removed.
3938         * iterator.cs: Set `Modifiers.DEBUGGER_HIDDEN' everywhere except
3939         on MoveNext().
3941         * anonymous.cs
3942         (RootScopeInfo.DoDefineMembers): Set `Modifiers.DEBUGGER_HIDDEN'
3943         if we're an `IteratorHost'.
3944         (AnonymousMethodMethod..ctor): Don't set
3945         `Modifiers.COMPILER_GENERATED'; csc only sets this on the class,
3946         not on the method.
3948 2008-06-16  Marek Safar  <marek.safar@gmail.com>
3950         * statement.cs: Clean-up foreach statements.
3952 2008-06-12  Marek Safar  <marek.safar@gmail.com>
3954         * class.cs: Stop using public method which should not exist
3955         (MethodBuilder.SetGenericMethodSignature).
3957 2008-06-11  Martin Baulig  <martin@ximian.com>
3959         * location.cs
3960         (Location.LookupFile): Add `CompilationUnit' argument; when given
3961         a relative file name, make it relative to the directory the .cs
3962         file is located in instead of using the current directory.
3964 2008-06-11  Martin Baulig  <martin@ximian.com>
3966         * class.cs
3967         (IMethodData.EmitExtraSymbolInfo): Added `SourceMethod' argument.
3968         (MethodOrOperator.EmitExtraSymbolInfo): Likewise.
3969         (SourceMethod.SetRealMethodName): Moved here from the symbol writer.
3970         (SourceMethod.SetCompilerGenerated): Likewise.
3972 2008-06-11  Marek Safar  <marek.safar@gmail.com>
3974         * codegen.cs, driver: Only write symbol file when it's asked for.
3976 2008-06-11  Marek Safar  <marek.safar@gmail.com>
3978         * codegen.cs: Don't use assembly writer error handling for symbol writer.
3980 2008-06-10  Martin Baulig  <martin@ximian.com>
3982         * symbolwriter.cs: Reflect latest MarkSequencePoint() API changes.
3984 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3986         A fix for bug #316290
3987         * expression.cs: Include decimal operators in predefined table.
3988         
3989         * parameters.cs: More readonlyness.
3991 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3993         A fix for bug #397213
3994         * cs-parser.jay: One more missing current_local_parameters reset.
3996 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3998         A fix for bug #396633
3999         * class.cs: Host backing field in partial container.
4001 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4003         A fix for bug #397068
4004         * expression.cs: Check both operand types when predefined operator is used.
4006 2008-06-05  Martin Baulig  <martin@ximian.com>
4008         Merged the `debugger-kahalo' branch.
4010         * class.cs
4011         (MethodData.Emit): Call SymbolWriter.SetCompilerGenerated() if
4012         we're an iterator method.
4013         (SourceMethod): Reflect latest symbol writer changes;
4014         SymbolWriter.OpenMethod() now takes a `ICompileUnit' argument and
4015         now `start_row' and `end_row'.
4016         (Constructor.Emit): Fix the logic whether to emit symbol information.
4018         * iterator.cs: Call SymbolWriter.SetCompilerGenerated() on all the
4019         generated methods.
4021         * location.cs
4022         (CompilationUnit): New public class; derives from `SourceFile'.
4023         (SourceFileEntry.DefineSymbolInfo): New public method.
4024         (SourceFileEntry.SetChecksum): New public method.
4025         (Location): Encode hidden line numbers by using `column == 255';
4026         the .ctor now accepts `column == -1' to mark a hidden line number.
4027         (Location.Hidden): New public property.
4028         (Location.CheckPoint): Add `CompilationUnit'.
4029         (Location.SourceFiles): Change return type to `CompilationUnit[]'.
4030         (Location.Push): Add `CompilationUnit compile_unit' argument.
4031         (Location.CompilationUnit): New public property.
4033         * statement.cs
4034         (ToplevelBlock.Emit): Add `ec.Mark (EndLocation)'.
4036         * cs-parser.jay: `SourceFile' -> `CompilationUnit'.
4038         * driver.cs: `SourceFile' -> `CompilationUnit'.
4040         * cs-tokenizer.cs: `SourceFile' -> `CompilationUnit'.
4042         * namespace.cs: `SourceFile' -> `CompilationUnit'.
4044         * cs-tokenizer.cs: Add support for `#pragma checksum' and
4045         `#line hidden'.
4047         * symbolwriter.cs
4048         (SymbolWriter.MarkSequencePoint): Take a `Location' and use the
4049         new symbol writer API to also pass the file.
4051 2008-06-05  Marek Safar  <marek.safar@gmail.com>
4053         * statement.cs: Emit catch variable assignment using variable expression.
4054         
4055 2008-06-05  Marek Safar  <marek.safar@gmail.com>
4057         * ecore.cs, expression.cs, statement.cs: Make TemporaryVariable compatible
4058         with other variable types.
4060 2008-06-04  Marek Safar  <marek.safar@gmail.com>
4062         * ecore.cs, expression.cs, statement.cs, typemanager.cs: Removed custom
4063         GetLength method emit, it breaks resolve rules.
4064         
4065 2008-06-02  Atsushi Enomoto  <atsushi@ximian.com>
4066             Marek Safar  <marek.safar@gmail.com>
4067                         
4068         A fix for bug #395542
4069         * cs-parser.jay: The trailing comma is allowed in anonymous type member
4070         declaration.
4071         
4072 2008-06-02  Marek Safar  <marek.safar@gmail.com>
4074         A fix for bug #395287
4075         * class.cs, modifiers.cs: Automatic properties method base modifiers checks.
4077 2008-05-31  Marek Safar  <marek.safar@gmail.com>
4079         A fix for bug #395845
4080         * class.cs, nullable.cs: User unary operator is allowed to have nullable and
4081         non-nullable parameter type.
4082         
4083 2008-05-31  Marek Safar  <marek.safar@gmail.com>
4085         * class.cs: Handle contructor initializer as a statement in top-level block.
4087 2008-05-30  Marek Safar  <marek.safar@gmail.com>
4089         * attribute.cs: Don't mix old and new corlib types when emitting corlib
4090         security attributes.
4092 2008-05-24  Marek Safar  <marek.safar@gmail.com>
4094         * ecore.cs, expression.cs: Small IVariable refactoring.
4096 2008-05-22  Marek Safar  <marek.safar@gmail.com>
4098         * assign.cs (LocalTemporary): Implemented CreateExpressionTree.
4100 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4102         * cs-parser.jay: Removed redundant catch type check.
4104 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4106         A fix for bug #390372
4107         * nullable.cs: Set correct return type.
4109 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4111         A fix for bug #391062
4112         * typemanager.cs: Fixed crash when comparing null types.
4114 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4116         A fix for bug #391871
4117         * cs-parser.jay: Better error handling for invalid catch type.
4119 2008-05-20  Marek Safar  <marek.safar@gmail.com>
4121         A fix for bug #392155
4122         * cs-tokenizer.cs: Fixed casting of byte and decimal expression.
4124 2008-05-15  Marek Safar  <marek.safar@gmail.com>
4126         A fix for bug #390666
4127         * ecore.cs (BetterExpressionConversion): Unwrap each Expression<T>
4128         expressions.
4130 2008-05-15  Marek Safar  <marek.safar@gmail.com>
4132         * class.cs, expression.cs, statement.cs: Removed a hack, setting block flag
4133         in getter.
4135 2008-05-13  Marek Safar  <marek.safar@gmail.com>
4137         A fix for bug #389625
4138         * delegate.cs, generic.cs: Some progress on method group return type
4139         inference.
4141 2008-05-13  Marek Safar  <marek.safar@gmail.com>
4143         A fix for bug #378419
4144         * namespace.cs: Inspect also parent namespaces not only namespace entries.
4146 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4148         * class.cs (Constructor): Added IsCompilerGenerated.
4150 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4152         * expression.cs: Enum binary operators can accept non-enum operand only when
4153         is implicitly convertible to underlying type.
4155 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4157         A fix for bug #389272
4158         * support.cs: Workaround System.InvalidOperationException for enums.
4160 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4162         A fix for bug #389073
4163         * convert.cs: More undocumented explicit IntPtr/UIntPtr conversions.
4165 2008-05-10  Marek Safar  <marek.safar@gmail.com>
4167         * driver.cs: Split Parse.
4168         
4169         * location.cs (LookupFile): Uses string.Empty.
4171 2008-05-07  Marek Safar  <marek.safar@gmail.com>
4173         * expression.cs, parameter.cs: Small ParameterReference clean up.
4175 2008-05-07  Marek Safar  <marek.safar@gmail.com>
4177         * anonymous.cs, codegen.cs, convert.cs, ecore.cs: Removed uber ugly TempEc
4178         hack. Fixes #387502.
4180 2008-05-06  Martin Baulig  <martin@ximian.com>
4182         * class.cs (Constructor.Emit): Fix the logic whether to emit
4183         symbol information.
4185 2008-05-06  Raja R Harinath  <harinath@hurrynot.org>
4187         Fix #385503
4188         * iterators.cs (Iterator.CurrentBlock.DoEmit): Don't emit
4189         InvalidOperationException when the iterator is before the start or
4190         after the end.
4192 2008-05-06  Marek Safar  <marek.safar@gmail.com>
4194         * nullable.cs (NullCoalescingOperator): Result is underlying type of left,
4195         when left is nullable type.
4197 2008-05-06  Marek Safar  <marek.safar@gmail.com>
4199         A fix for bug #386628
4200         * expression.cs (LocalVariableReference): Continue in resolving when
4201         variable is not assigned.
4203 2008-05-05  Marek Safar  <marek.safar@gmail.com>
4205         * nullable.cs, statement.cs (Unwrap): Store non-variable expression in all
4206         nullable operations.
4208 2008-05-04  Marek Safar  <marek.safar@gmail.com>
4210         * nullable.cs, statement.cs (Unwrap): Don't duplicate variable expressions,
4211         it saves many redundant temporary variables for nullable operations.
4213 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4215         * assign.cs: EventAddOrRemove is a statement and cannot have a type.
4216         
4217         * cfold.cs, constant.cs, expression.cs: Share Error_OperatorCannotBeApplied
4218         method.
4219         
4220         * nullable.cs: Constant coalescing operator optimizations.
4222 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4224         * constant.cs: Use unsigned conversion for values which are unsigned only.
4226 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4228         * convert.cs, literal.cs, nullabel.cs, typemanager.cs: Implemeted null 
4229         coalescing operator as it should be.
4231 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4233         A fix for bug #371016
4234         * expression.cs: All predefined delegate operators require implicit method
4235         group conversion.
4236         
4237 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4239         * constant.cs: Emit long constant as uint when fits the range.
4240         
4241         * convert.cs, expression.cs: Fixed few unsafe conversions.
4243 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4245         * convert.cs, literal.cs: Don't wrap implicit reference conversion to object
4247 2008-05-02  Raja R Harinath  <harinath@hurrynot.org>
4249         Fix #385758
4250         * convert.cs (ImplicitNumericConversion): Don't modify the type of
4251         'expr'.
4252         * ecore.cs (EmptyCast.Create): Flatten nested EmptyCasts.
4254 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4256         * constant.cs, literal.cs: IsLiteral property for error reporting.
4257         
4258         * ecore.cs, expression.cs: Implemented Property expression.
4260 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4262         * class.cs, modifiers.cs, flowanalysis.cs: New BACKING_FIELD flag.
4263         
4264         * nullable.cs: Implemented nullable coalescing null operator.
4266         * ecore.cs, expression.cs: Expression trees work.
4268 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4270         * ecore.cs: CreateExpressionTree is finally abstract.
4272         * expression.cs, linq.cs: Updated.
4274 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4276         * expression.cs, ecore.cs: Block base access expression inside expression
4277         tree.
4279 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4281         A fix for bug #385058
4282         * expression.cs: User-defined operator implementations always take
4283         precedence over predefined operator implementations.
4285 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4287         * assign.cs, anonymous.cs, lambda.cs, nullable.cs, ecore.cs, linq.cs,
4288         class.cs, iterators.cs, expression.cs, attribute.cs: Filled a few more
4289         expression tree conversions.
4290         
4291 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4293         * typemanager.cs, ecore.cs, class.cs, expression.cs, doc.cs: Merged all
4294         operators method details to Operator class.
4296 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4298         * anonymous.cs: Pass unsafe flags to anonymous container.
4299         
4300         * ecore.cs, expression.cs, statement.cs: Block unsafe pointer operations
4301         inside expression tree.
4303 2008-04-29  Martin Baulig  <martin@ximian.com>
4305         * cs-tokenizer.cs (Tokenizer.Position): Added `line'.
4306         (Tokenizer.PopPosition): Also restore the `line'.
4308 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4310         * delegate.cs: Implemented Invoke expression.
4312 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4314         * expression.cs: Fixed equality reference comparison regression.
4316 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4318         * ecore.cs: Clean up EmptyCast hack.
4319         
4320         * expression.cs, nullable.cs: Implemented enum binary and unary operations
4321         using correct conversion rules. Also fixes #383993.
4323 2008-04-28  Martin Baulig  <martin@ximian.com>
4325         * class.cs (Constructor.Emit): Don't emit debugging information
4326         for generated default .ctor's.
4328 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4330         * convert.cs: Empty-cast ushort to int conversion.
4332 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4334         A fix for bug #384191
4335         * ecore.cs, expression.cs: Fixed expression cloning.
4337 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4339         * ecore.cs, delegate.cs, assign.cs: Few tweaks for recent changes.
4341 2008-04-28  Raja R Harinath  <harinath@hurrynot.org>
4343         Fix #381559, test-638.cs, test-639.cs
4344         * assign.cs (CompoundAssign.Helper): New wrapper.
4345         (CompoundAssign.DoResolve): Use it to wrap the nested 'target'
4346         access.
4347         * ecore.cs (MethodGroupExpr.VerifyArgumentsCompat) <params arguments>:
4348         Pass unconverted expressions to the params array creation expression.
4349         (FieldExpr.EmitAssign): Don't special-case StringConcat.
4350         (PropertyExpr.EmitAssign): Likewise.
4351         * expression.cs (ArrayCreation.ResolveArrayElement): Keep track of the
4352         element if it is of kind CompoundAssign.Helper.
4353         (ArrayCreation.Emit): If we saw a CompoundAssign.Helper, emit it
4354         first before anything else.
4355         (ArrayAccess.EmitAssign): Don't special-case StringConcat.
4356         (ArrayAccess.LoadArrayAndArguments): Simplify.
4358 2008-04-27  Marek Safar  <marek.safar@gmail.com>
4360         * expression.cs: Fixed cloning of typeof(void).
4362 2008-04-27  Raja R Harinath  <harinath@hurrynot.org>
4364         * assign.cs (Assign.DoResolve): Remove support for EventExprs.
4365         (Assign.Emit): Likewise.  Move it to ...
4366         (CompoundAssign.DoResolve): ... here and ...
4367         (CompoundAssign.Emit): ... here.
4368         (EventAddOrRemove): New helper to handle += and -= on events, and
4369         avoid the use of BinaryDelegates.
4370         * ecore.cs (EventExpr.DoResolveLValue): Emit CS0070 unconditionally.
4371         (EventExpr.EmitAddOrRemove): Improve.
4372         * delegate.cs (DelegateInvocation.DoResolve): Simplify slightly.
4374         * cs-parser.jay (type) <namespace_or_type_name variant>: Don't
4375         create VarExprs for 'foo.bar.var'.
4376         * ecore.cs (VarExpr.InferType): Rename from DoResolveLValue, which
4377         is a highly inappropriate name for its functionality.
4379 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
4381         Simplify handling of multiple assignments
4382         * assign.cs (Assign): Clear out all 'embedded assign' gunk.  Make
4383         inheritable-only.
4384         (SimpleAssign): New.  Class to be used for normal assignments.
4385         * anonymous.cs, class.cs, cs-parser.jay: Update to changes.
4386         * expression.cs, parameter.cs, statement.cs: Likewise.
4388 2008-04-25  Marek Safar  <marek.safar@gmail.com>
4390         * ecore.cs, expression.cs, nullable.cs: Implemeted enum binary add operation
4391         for incompatible underlying types, more to come, uff.
4393 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
4395         Fix gtest-388.cs
4396         * expression.cs (VariableReference.EmitAssign) <source is NewInstance>:
4397         Handle 'leave_copy'.
4399 2008-04-25  Marek Safar  <marek.safar@gmail.com>
4401         * expression.cs, nullable.cs: Implemented UnaryPlus expression.
4403 2008-04-24  Raja R Harinath  <harinath@hurrynot.org>
4405         Fix test-636.cs.  Sprinkle a few more 'EmitSideEffect's around
4406         * expression.cs (Unary.TryReduceConstant): Unwrap SideEffectConstant.
4407         * statement.cs (While, Do, For): Allow test to have side effects.
4408         (For.DoEmit): Always emit InitStatement.
4410         Fix test-635.cs
4411         * expression.cs (Binary.DoResolve) <BitwiseAnd with zero constant>:
4412         Always create SideEffectConstant.
4413         (Binary.EnumLiftUp): Don't assume that the enumeration constant is
4414         of type EnumConstant.
4416         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
4417         Handle 'right' being SideEffectConstant of type 'bool'.
4419         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
4420         Use left.EmitBranchable instead of open coding it, so as to
4421         improve optimization opportunities.
4423         * constant.cs (SideEffectConstant.EmitSideEffect): Simplify slightly.
4425         * ecore.cs (Expression.EmitBranchable): Document some non-obvious
4426         assumptions.
4427         (Expression.EmitSideEffect): Document.
4429 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4431         * expression.cs: Implemented NewArrayBounds, TypeIs, and TypeAs expressions.
4433 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4435         * constant.cs, statement.cs: Use EmitSideEffect for constant if statement.
4437 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4439         * ecore.cs, expression.cs, delegate.cs: Implemeted delegate instantiation
4440         conversion to expression tree.
4442 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4444         * ecore.cs: Removed unused expression.
4446 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4448         * expression.cs: Implemented NegateChecked and New expressions.
4450 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4452         * convert.cs, nullable.cs, expression.cs: Implemented Negate expression.
4454 2008-04-22  Raja R Harinath  <harinath@hurrynot.org>
4456         Fix #351102
4457         * anonymous.cs (AnonymousMethodExpression.DoResolve): Mark as
4458         needing final 'ret' instruction.
4460 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4462         * expression.cs: Disabled lifted binary conversion on ISO-1 profiles.
4464 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4466         * expression.cs: Emit ldnull and not null expression as an instance argument
4467          of static method expression calls.
4469 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4471         A fix for bug #378200
4472         * expression.cs: Fixed crash when creating parameterless expression tree
4473         method call.
4475 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4477         A fix for bug #375297
4478         * anonymous.cs: Fixed crash when inferring from null argument anonymous
4479         method.
4481 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4483         A fix for bug #377596
4484         * decl.cs, class.cs: Emit delegate type argument attributes.
4486 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4488         A fix for bug #365314
4489         * generic.cs, ecore.cs: Type parameter declaration cannot be of generic type
4490         
4491 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4493         * cs-parser.jay, expression.cs: ComposedCast can work with type expressions
4494         only.
4496 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4498         * generic.cs (TypeParameter): Removed redundant location.
4500 2008-04-19  Marek Safar  <marek.safar@gmail.com>
4502         * generic.cs, parameter.cs, namespace.cs, ecore.cs, class.cs, decl.cs,
4503         delegate.cs, iterators.cs, cs-parser.jay, const.cs, enum.cs: Use
4504         FullNamedExpression in all declaration type expression, statements will come
4505         later.
4507 2008-04-18  Marek Safar  <marek.safar@gmail.com>
4509         * generic.cs, namespace.cs, ecore.cs, class.cs, decl.cs, generic-mcs.cs,
4510         nullable.cs, expression.cs, enum.cs, doc.cs: Cleaning up type expressions.
4512 2008-04-18  Marek Safar  <marek.safar@gmail.com>
4514         * parameter.cs, delegate.cs, cs-parser.jay, expression.cs: Removed unused
4515         code.
4517 2008-04-17  Marek Safar  <marek.safar@gmail.com>
4519         * decl.cs, class.cs, generic.cs: Verify partial parts type parameters and
4520         constraints.
4522 2008-04-17  Marek Safar  <marek.safar@gmail.com>
4524         * decl.cs, class.cs, cs-parser.jay, ecore.cs, expression.cs: Unify all type
4525         name expressions.
4526         Also fixes #340463.
4528 2008-04-17  Raja R Harinath  <harinath@hurrynot.org>
4530         Hook up 'EmitSideEffect'
4531         * constant.cs (Constant.EmitSideEffect): New.
4532         (SideEffectConstant.Emit): Simplify.  Use EmitSideEffect.
4533         (SideEffectConstant.EmitSideEffect): New.
4534         * ecore.cs (BoxedCast.EmitBranchable): Remove.  We can't use an
4535         unconditional branch in EmitBranchable.
4536         (FieldExpr.EmitBranchable): New.
4537         * expression.cs (Unary.EmitSideEffect): New.
4538         (Binary.EmitSideEffect): New.
4539         (VariableReference.EmitSideEffect): New.  Do nothing.
4541 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
4543         Introduce 'EmitSideEffect'
4544         * ecore.cs (Expression.EmitSideEffect): New.
4545         (TypeCast): Rename from EmptyCast.
4546         (EmptyCast): New.
4547         (EmptyCast.EmitBranchable, EmptyCast.EmitSideEffect): Implement.
4548         (BoxedCast.EmitBranchable, BoxedCast.EmitSideEffect): Implement.
4549         * convert.cs, nullable.cs: Update to changes.
4551 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4553         * class.cs, cs-parser.jay: Early check for base types expression.
4555 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4557         * decl.cs (MemberName): Declare PrettyName as obsolete.
4559 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4561         * namespace.cs: Use MemberName comparison.
4563 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
4565         Fix build break
4566         * decl.cs (MemberName.PrettyName): New.  Replaces the misnamed
4567         FullName.
4568         (MemberName.MethodName, MemberName.GetSignatureForError): Improve.
4569         (MemberName.FullyQualifiedName): New.  Provides the functionality
4570         that users assume FullName would have.
4571         * ecore.cs, namespace.cs: Update to changes.
4573         * statement.cs (Using.assign): Make into ExpressionStatement.
4574         (Using.EmitPreTryBody): Simplify.
4576 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4578         * report.cs: ColorFormat is protected.
4579         
4580         * rootcontext.cs: Unused fields clean-up.
4581         
4582         * namespace.cs: Made UsingEntry name private.
4584 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4586         * cs-tokenizer.cs, location.cs: Removed unused field.
4588 2008-04-16  Jan Oravec <jan.oravec@6com.sk>
4589             Raja R Harinath  <harinath@hurrynot.org>
4591         Fix #379822
4592         * constant.cs (SideEffectConstant.value): Rename from 'left'.
4593         (SideEffectConstant.side_effect): Rename from 'right'.
4594         (SideEffectConstant..ctor): Normalize 'side_effect'.
4595         (SideEffectConstant.Emit): Emit 'value', not 'side_effect' as the
4596         value of this constant.
4597         * cfold.cs: Update to changes.
4599 2008-04-15  Marek Safar  <marek.safar@gmail.com>
4601         * cs-paser.jay: Removed unused variable.
4602         
4603         * driver.cs: Made Compile instance method.
4605 2008-04-15  Raja R Harinath  <harinath@hurrynot.org>
4607         * flowanalysis.cs (FlowBranching.MergeChild): Simplify.
4609 2008-04-15  Marek Safar  <marek.safar@gmail.com>
4611         * cs-paser.jay, namespace.cs: Simplified handling of namespace imports. 
4613 2008-04-13  Jb Evain  <jbevain@novell.com>
4615         * namespace.cs: update the System.Core fullname for 2.1
4616         * driver.cs: update the list of required assemblies for 2.1.
4617         Merged from the Moonlight 2 branch.
4619 2008-04-11  Marek Safar  <marek.safar@gmail.com>
4621         * assign.cs, ecore.cs, expression.cs, nullable.cs: More work on nullable
4622         types and user defined operators. User operators arguments has to be checked
4623         for null value before invocation, which also means no operator is called
4624         when any argument is not convertible to unwrapped nullable type.
4625         
4626 2008-04-09  Marek Safar  <marek.safar@gmail.com>
4628         * convert.cs, ecore.cs, expression.cs, nullable.cs: Initial refactoring
4629         of Unary expressions to follow operator overloading rules precisely.
4630         Also fixes #321794, #323794
4631         
4632 2008-04-08  Marek Safar  <marek.safar@gmail.com>
4634         * cs-parser.jay, expression.cs: Don't wrap Indirection expression in Unary
4635         expression.
4636         
4637 2008-04-08  Marek Safar  <marek.safar@gmail.com>
4639         * expression.cs, ecore.cs: Implemented MemberInit expression.
4640         
4641 2008-04-08  Raja R Harinath  <harinath@hurrynot.org>
4643         Fix mono/tests/exception4.cs
4644         * statement.cs (ExceptionStatement, TryCatch): Revert to using
4645         ec.NeedReturnLabel () rather emitting a 'nop'.
4647         * statement.cs (ExceptionStatement.SomeCodeFollows): A hook for a
4648         simple heuristic.
4649         (TryCatch.SomeCodeFollows): Likewise.
4650         * flowanalysis.cs (FlowBranchingException): Call 'SomeCodeFollows'
4651         for 'break', 'continue' and 'return' statements inside a try.
4652         We're fairly sure that the generated IL stream will have more
4653         instructions textually following the try.
4654         (FlowBranchingTryCatch): Likewise.
4656         * statement.cs (Throw.Resolve): Move CS0156 and CS0724 testing ...
4657         * flowanalysis.cs (FlowBranching.CheckRethrow): ... here and to its
4658         overrides.
4660         * statement.cs (CollectionForeach.DisposableWrapper): Make a true
4661         wrapper -- forward everything to CollectionForeach.
4662         (CollectionForeach.NonDisposableWrapper): New.
4663         (CollectionForeach.EmitFinallyBody): Use 'endfinally' instruction
4664         instead of a pop + branch to end.
4666 2008-04-07  Marek Safar  <marek.safar@gmail.com>
4668         A fix for bug #377485
4669         * assign.cs, expression.cs, decl.cs, class.cs, ecore.cs, namespace.cs: 
4670         Propagate location for extension method groups. Report conversion failure at
4671         right place.
4673 2008-04-07  Marek Safar  <marek.safar@gmail.com>
4675         * anonymous.cs, expression.cs, ecore.cs, typemanager.cs: Implemented
4676         ListInit and Field expressions.
4678 2008-04-06  Raja R Harinath  <harinath@hurrynot.org>
4680         * iterators.cs (Iterator.EmitMoveNext): Remove try/fault wrapper.
4681         Since $PC is always -1 inside the body of MoveNext, the fault
4682         handler is a no-op.
4683         * flowanalysis.cs (FlowBranchingException.EmitFinally): Kill.
4684         * statement.cs (ExceptionStatement.emit_finally): Likewise.
4685         (ExceptionStatement.ResolveFinally): Drop 'branching' argument.
4687         The denouement!  Fix #324708
4688         * iterators.cs (Iterator.EmitMoveNext): Reset $PC to -1 on entry.
4689         (Iterator.EmitYieldBreak): We no longer need to reset $PC.
4690         * statement.cs (ExceptionStatement.DoEmit): Actually emit the
4691         'finally' inside the finally clause.
4693         * statement.cs (ExceptionStatement.DoEmit): Emit try/finally block
4694         inside an iterator.  Don't emit the body of the 'finally' inside
4695         the finally clause yet.
4697         Use the ResumableStatement infrastructure for MoveNext ()
4698         * iterators.cs (Iterator.EmitMoveNext_NoResumePoints): New.
4699         (Iterator.EmitMoveNext): Use 'resume_points'.  Get rid of
4700         'old_resume_points'.  Move dispatcher upfront.
4701         (Iterator.MarkYield): Mark the 'resume_point' of a Yield.
4702         * statement.cs (ExceptionStatement.DoEmit): Emit a dispatcher if
4703         in an enumerator.  This encodes the main fix in this patch series
4704         -- we can only jump into the first instruction of a try from the
4705         outside, but we want to emit try/finally regions in iterators and
4706         resume in the middle of them.
4708 2008-04-05  Raja R Harinath  <harinath@hurrynot.org>
4710         * statement.cs (ExceptionStatement.ResolveFinally): Move setting
4711         of NeedReturnLabel here.
4713         Introduce a common point for emitting try/finally to IL
4714         * statement.cs (ExceptionStatement.DoEmit): New.  Combines all the
4715         features of the various subclasses, which are now driven by ...
4716         (ExceptionStatement.EmitPreTryBody): ... this and ...
4717         (ExceptionStatement.EmitTryBody): ... this and the original
4718         EmitFinallyBody.
4719         (TryFinally, Lock, Using, UsingTemporary, DisposableWrapper):
4720         Remove DoEmit and update to follow above protocol.
4722         * statement.cs (ExceptionStatement.EmitForDispose): If all labels
4723         of the dispatcher are the same, skip emitting the 'switch'.
4724         * iterator.cs (Iterator.EmitDispose): Update to changes.
4726         Clean up handling of 'using' statement
4727         * statement.cs (UsingTemporary): New.  Carved out of ...
4728         (Using): ... this.  Simplify drastically.  Handle exactly
4729         one variable.
4730         * cs-parser.jay (using_statement): Split.  Create UsingTemporary
4731         or Using as appropriate.  If there are multiple variable declared,
4732         create nested Using statements.
4733         (resource_acquisition): Kill.
4735         * statement.cs (ExceptionStatement.EmitForDispose): Use
4736         EmitFinallyBody, not EmitFinally.
4738         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Remove.
4739         * iterator.cs: Update to changes.
4741         Start using the ResumableStatement infrastructure
4742         * statement.cs (ResumeableStatement.PrepareForDispose): New.
4743         (ResumableStatement.EmitForDispose): New.
4744         (ExceptionStatement): Override them.
4745         * iterators.cs (Iterator.EmitDispose): Use PrepareForDispose and
4746         EmitForDispose to create the body of the Dispose method.  Don't
4747         use OldResumePoint.
4749         * iterator.cs (Iterator.AddResumePoint): Move here from ...
4750         * statement.cs (Toplevel.AddResumePoint): ... here.
4751         (Toplevel.MoveNextStatement.Resolve): Create FlowBranchingIterator.
4752         * flowanalysis.cs (FlowBranchingIterator): New.
4753         * codegen.cs (EmitContext): Update to changes.
4755         * iterators.cs (Iterator.OldResumePoint): Rename from ResumePoint.
4756         (Iterator.old_resume_points): Rename from 'resume_points'.
4757         (Iterator.MoveNextStatement): Remove unused class.
4759         New infrastructure for try/finally in iterators (still unused)
4760         * flowanalysis.cs (FlowBranching.AddResumePoint): New.
4761         (FlowBranchingToplevel.AddResumePoint): Hook into
4762         ToplevelBlock.AddResumePoint.
4763         (FlowBranchingTryCatch): Move CS01626 and CS01631 checks here.
4764         (FlowBranchingException): Hook into ExceptionBlock.AddResumePoint.
4765         * statement.cs (ToplevelBlock.AddResumePoint): New.  Collect
4766         resume points and assign program-counter values.
4767         (ExceptionBlock.AddResumePoint): Collect resume points for
4768         de-muxer at the top of try block.
4769         * iterators.cs (Yield.CheckContext): Simplify.
4770         (Yield.Resolve): Use FlowBranching.AddResumePoint.
4772 2008-04-04  Raja R Harinath  <harinath@hurrynot.org>
4774         * flowanalysis.cs (FlowBranching.AddReturnOrigin): Change Location
4775         argument to an ExitStatement.
4776         (FlowBranchingException): Refactor saved origins code.
4777         * statement.cs (ExitStatement): Update to cahges.
4778         * iterator.cs (YieldBreak): Likewise.
4780         * statement.cs (ResumableStatement): New.  Common base class for
4781         YieldReturn and ExceptionStatement.
4782         (ExitStatement): New.  Common base class for Return and YieldBreak.
4783         (Return): Update to changes.
4784         * iterator.cs (YieldBreak): Likewise.
4785         * lambda.cs (ContextualReturn): Likewise.
4787         Fix #377028
4788         * ecore.cs (Expression.ResolveAsTypeStep): If '!silent' attempt to
4789         emit a meaningful error message.
4791         Fix #324765, #319508
4792         * flowanalysis.cs (VariableInfo.IsEverAssigned): New.
4793         (VariableInfo.SetAssigned): Set it.
4794         * statement.cs (Block.UsageWarning): Use 'IsEverAssigned' to
4795         determine if CS0219 or CS0168 is appropriate.  Don't use
4796         flow-analysis information.
4797         (Block.Resolve): Use ec.EndFlowBranching, not ec.DoEndFlowBranching.
4798         * codegen.cs (EmitContext.DoEndFlowBranching): Kill.  Inline into ...
4799         (EmitContext.EndFlowBranching): ... this.
4801 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4803         * class.cs, typemanager.cs: Emit volatile field with IsVolatile modifier.
4805 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4807         A fix for bug #376508
4808         * convert.cs, expression.cs: Fixed difference between ImplicitConversion and
4809         ImplicitConversionExists.
4811 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4813         * expression.cs (Binary): Added remaining binary operators to expression
4814         tree builder.
4816         * nullable.cs: Optimize shift with null argument.
4818 2008-04-03  Raja R Harinath  <harinath@hurrynot.org>
4820         Fix minor IL regression
4821         * statement.cs (TryCatch..ctor): Add 'inside_try_finally' argument.
4822         (TryCatch.DoEmit): Use it to avoid creating another ExceptionBlock.
4823         * cs-parser.jay (try_statement): Update to changes.
4825         * statement.cs (TryFinally.need_exc_block): Delete.
4826         (TryFinally): Update to changes.
4828         Now all ExceptionStatements are unconditional
4829         * statement.cs (CollectionForeach.DisposableWrapper): New.
4830         Extract out the try/finally code into a new wrapper.
4831         (CollectionForeach.Resolve): Use it to simplify the code.
4833 2008-04-02  Raja R Harinath  <harinath@hurrynot.org>
4835         Start at simplifying ExceptionStatement semantics a bit
4836         * statement.cs (TryCatch, TryFinally): Split 'Try' into two pieces.
4837         * cs-parser.jay (try_statement): Update to changes.
4838         (opt_catch_clauses): Remove.
4839         * flowanalysis.cs: Update to changes.
4840         (FlowBranching.BranchingType.TryCatch): New.
4841         (FlowBranchingTryCatch): New.
4843         * flowanalysis.cs (FlowBranching.BranchingType.SwitchSection): Kill.
4844         (FlowBranching.CreateBranching): Update to changes.
4845         (FlowBranchingBlock.AddSibling): Add sanity check.
4846         * codegen.cs (EmitContext.StartFlowBranching) <Block variant>:
4847         Update to changes.
4849         * iterators.cs (Iterator.MarkFinally): Remove.
4850         * statement.cs (ExceptionStatement): Update to changes.
4852         Add support for skipping over finally blocks at runtime.  First
4853         in a series to fix #324708
4854         * iterators.cs (Iterator.SkipFinally): New LocalBuilder.
4855         (Iterator.EmitMoveNext): Initialize it.
4856         * statement.cs (ExceptionStatement.EmitFinally): Use it to emit a
4857         branch over the body of the 'finally' clause.
4859 2008-03-31  Raja R Harinath  <harinath@hurrynot.org>
4861         Avoid lopsided use of Foo/DoFoo names
4862         * statement.cs (ExpressionStatement.EmitFinallyBody):
4863         Rename from EmitFinally.
4864         (ExpressionStatement.EmitFinally): Rename from DoEmitFinally.
4865         * iterator.cs: Update to changes.
4867 2008-04-02  Marek Safar  <marek.safar@gmail.com>
4869         * ecore.cs, expression.cs, nullable.cs: ConditionalLogicalOperator is now
4870         based on UserOperatorCall. More binary nullable operators clean up.
4872 2008-04-02  Martin Baulig  <martin@ximian.com>
4874         * symbolwriter.cs: Remove the `#if !DISABLE_TERRANIA_CHANGES' conditionals.
4876 2008-04-02  Marek Safar  <marek.safar@gmail.com>
4878         * nullable.cs: Merge user and empty conversions when lifting expression
4879         trees.
4880         
4881         * expression.cs (StringConcat): Implemented expression tree representation.
4883 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4885         * nullable.cs: When lifting null literal and a user operator exists, no call 
4886         is made.
4887         
4888 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4890         * nullable.cs, ecore.cs, expression.cs: Convert null arithmetic to lifted
4891         null.
4893 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4895         * nullable.cs, expression.cs: Use namespace instead heavily nested
4896         monster abstract class.
4898 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4900         * ecore.cs, convert.cs, constant.cs, nullable.cs, expression.cs: Implemented
4901         lifting of null literal and user operators. Clean up of some temporary
4902         nullable hacks.
4904 2008-03-30  Raja R Harinath  <harinath@hurrynot.org>
4906         Fix #368224, test-629.cs
4907         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Return true
4908         if it crossed an unwind-protect boundary.
4909         * iterators.cs (Yield.CheckContext): Relax check for 'yield break'.
4910         (Yield.Resolve, Yield.DoEmit): Track whether the yield occurs
4911         inside an unwind-protected region.
4912         (YieldBreak.Resolve, YieldBreak.DoEmit): Likewise.
4913         (Iterator.MarkYield): Add 'unwind_protect' parameter.  Emit a
4914         'leave' instead of a 'br' if unwind-protected.
4915         (Iterator.EmitYieldBreak): Likewise.
4917 2008-03-29  Gert Driesen  <drieseng@users.sourceforge.net>
4919         * driver.cs: Only define versioninfo resources if no win32 resource
4920         file was specified.
4922 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4924         A fix for bug #372375
4925         * convert.cs: Fixed boxing of nullable types.
4927 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4929         * typemanager.cs: Initialize InternalsVisibleTo as the very first optional
4930         type.
4932 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4934         A fix for bug #374619
4935         * nullable.cs: Fixed guarding of EmitBitwiseBoolean.
4936         
4937 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4939         * lambda.cs: Check return type only for invocation.
4940         
4941 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4943         A fix for bug #374214
4944         * ecore.cs: Correctly report argument type mismatch.
4946 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4948         * convert.cs (ImplicitReferenceConversionCore): Correctly compare enum type
4949         and not rely on broken IsEnum.
4951 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4953         * nullable.cs: New file, extracted from generic.cs.
4954         
4955         * generic.cs, generic-mcs.cs, *.csproj, *.sources: Updated.
4957 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4959         * generic.cs, convert.cs, generic-mcs.cs, expression.cs: Added lifting of
4960         predefined comparison operators and null literals.
4961         
4962         * report.cs: New warning ID.
4963         
4964 2008-03-25  Marek Safar  <marek.safar@gmail.com>
4966         A fix for bug #370577
4967         * lambda.cs: Check return type too.
4969 2008-03-25  Marek Safar  <marek.safar@gmail.com>
4971         A fix for bug #372846
4972         * class.cs: Automatic properties can be declared as unsafe.
4974 2008-03-20  Marek Safar  <marek.safar@gmail.com>
4976         * location.cs: Use string based concatenation.
4977         
4978         * expression.cs: LiftedBinaryOperator is gmcs only.
4979         
4980 2008-03-20  Marek Safar  <marek.safar@gmail.com>
4982         * generic.cs, literal.cs, ecore.cs, expression.cs: Ongoing work on nullable
4983         conversions rules and expression trees.
4985 2008-03-19  Marek Safar  <marek.safar@gmail.com>
4987         * delegate.cs: Use extension method source as delegate target.
4989 2008-03-19  Marek Safar  <marek.safar@gmail.com>
4991         * generic.cs, generic-mcs.cs, expression.cs, ecore.cs: Rewrote nullable
4992         binary operations to be purely based on binary operations and optimized
4993         emitted code (30% less in some cases). Introduced ReducedExpression for ETs
4994         and other ET refactoring.
4995         
4996         * typemanager.cs: Fixed warning.
4997         
4998 2008-03-17  Marek Safar  <marek.safar@gmail.com>
5000         * class.cs, decl.cs, delegate.cs: Do protected modifier check on each member
5001         
5002         * symbolwriter.cs: Fixed.
5004 2008-03-17  Marek Safar  <marek.safar@gmail.com>
5006         * anonymous.cs, driver.cs: Reset anonymous types counters.
5008 2008-03-17  Marek Safar  <marek.safar@gmail.com>
5010         * ecore.cs (MethodGroupExpr): Skip first candidate, it's already the best.
5011         
5012         * class.cs: Use fullname for all type member definitions.
5013         
5014 2008-02-19  Martin Baulig  <martin@ximian.com>
5016         * class.cs
5017         (IMethodData.EmitExtraSymbolInfo): New interface method.
5018         (MethodData.Emit): Call method.EmitExtraSymbolInfo().
5019         (MethodOrOperator.EmitExtraSymbolInfo): Implement this new
5020         interface method here as an empty public virtual method.
5022         * anonymous.cs
5023         (AnonymousMethodMethod.ctor): Added `string real_name' argument.
5024         (AnonymousMethodMethod.EmitExtraSymbolInfo): Override and call
5025         CodeGen.SymbolWriter.SetRealMethodName().       
5027 2008-02-18  Martin Baulig  <martin@ximian.com>
5029         * anonymous.cs
5030         (ScopeInfo.EmitType): Override this and emit debugging
5031         information for captured variables.
5032         (RootScopeInfo.EmitType): Override this and emit symbol
5033         information for a captured `this'.
5035 2008-02-15  Martin Baulig  <martin@ximian.com>
5037         * iterators.cs: Emit debugging info.
5039         * codegen.cs
5040         (EmitContext.Flags): Add `OmitDebuggingInfo'.
5041         (EmitContext.OmitDebuggingInfo): New public property.
5043         * statement.cs
5044         (While): Override Emit() and don't emit symbol info there; do it
5045         inside DoEmit() instead.
5046         (Block.Emit): Omit symbol information while emitting the scope
5047         initializers; don't ec.Mark() the `EndLocation'.  Fix the lexical
5048         block logic.
5049         (ExplicitBlock.IsIterator): Moved here from `ToplevelBlock'.
5050         (ToplevelBlock.MakeIterator): Pass the `flags' to `ExplicitBlock's
5051         .ctor to make `IsIterator' work.
5053 2008-03-14  Martin Baulig  <martin@ximian.com>
5055         * symbolwriter.cs: Added the new symbol writer function from the
5056         debugger's `terrania' branch; temporarily enclose them inside
5057         `#if !DISABLE_TERRANIA_CHANGES' conditionals until I'm back from
5058         my vacations.
5060 2008-03-14  Martin Baulig  <martin@ximian.com>
5062         * symbolwriter.cs
5063         (SymbolWriter): Make this a public static class.
5065         * codegen.cs
5066         (CodeGen.SymbolWriter): Removed; use the new static `SymbolWriter'
5067         class instead of using `if (CodeGen.SymbolWriter != null)' everywhere.
5069 2008-03-14  Marek Safar  <marek.safar@gmail.com>
5071         A fix for bug #370577
5072         * statement.cs, lambda.cs: Added extra limitations when dealing with void
5073         return type.
5074         
5075 2008-03-14  Marek Safar  <marek.safar@gmail.com>
5077         * typemanager.cs (CSharpName): Made 250 times faster.
5079 2008-03-13  Marek Safar  <marek.safar@gmail.com>
5081         * ecore.cs, expression.cs: Emit conversion for ET shift argument.
5082         
5083 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5085         * generic.cs, typemanager.cs, enum.cs, codegen.cs, statement.cs: Try not to
5086         crash when predefined field does not exist.
5087         
5088 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5090         * ecore.cs (PropertyExpr): Fixed IsSingleDimensionalArrayLength regression.
5091         
5092 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5094         * class.cs (FixedField): Don't crash when contructors are missing.
5096 2008-03-11  Marek Safar  <marek.safar@gmail.com>
5098         * typemanager.cs, namespace.cs, literal.cs, ecore.cs, class.cs, decl.cs,
5099         convert.cs, constant.cs, expression.cs, statement.cs: Use same method to
5100         check internal types accessibility for internal and external types.
5101         Replaced EnumToUnderlying by GetEnumUnderlyingType.
5103 2008-03-11  Marek Safar  <marek.safar@gmail.com>
5105         * support.cs, typemanager.cs, pending.cs, ecore.cs, class.cs, delegate.cs
5106         convert.cs, const.cs, anonymous.cs, constant.cs, expression.cs,
5107         attribute.cs, statement: Use corect instance of predefined types (work
5108         related to #364674).
5110 2008-03-07  Marek Safar  <marek.safar@gmail.com>
5112         * expression.cs (TypeOfVoid): Fixed predefined method initialization.
5113         
5114 2008-03-07  Marek Safar  <marek.safar@gmail.com>
5116         * generic.cs, typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, 
5117         class.cs, delegate.cs, iterators.cs, const.cs, constant.cs, driver.cs,
5118         expression.cs, attribute.cs, codegen.cs, statement.cs: TypeManager optional
5119         predefined types clean up, delayed predefined types members initialization
5120         (work related to #364674).
5122 2008-03-05  Marek Safar  <marek.safar@gmail.com>
5124         * typemanager.cs (IsFriendAssembly): InternalsVisibleTo is not mandatory.
5125         
5126 2008-03-05  Marek Safar  <marek.safar@gmail.com>
5128         * typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, class.cs, decl.cs,
5129         delegate.cs, convert.cs, driver.cs, attribute.cs, codegen.cs: TypeManager
5130         predefined types clean up (work related to #364674).
5132 2008-03-04  Marek Safar  <marek.safar@gmail.com>
5134         * ecore.cs: Print an error message instead of throwing exception.
5135         
5136 2008-03-04  Marek Safar  <marek.safar@gmail.com>
5138         * generic.cs, typemanager.cs, literal.cs, convert.cs, cfold.cs, constant.cs,
5139         expression.cs, statement.cs: Unififed null literal representation.
5141 2008-03-03  Marek Safar  <marek.safar@gmail.com>
5143         * anonymous.cs, cfold.cs, convert.cs, delegate.cs, doc.cs, ecore.cs,
5144         expression.cs: Refactored binary operators resolve phase and improved speed.
5145         The nullable code is still missing and won't work correctly, more fixes
5146         required.
5148         It also fixes #323726, #324312, #324248, and many other unreported issues.
5150 2008-02-29  Zoltan Varga  <vargaz@gmail.com>
5152         * report.cs (FeatureIsNotAvailable): Use 'mcs1' instead of 'mcs', and 'mcs' 
5153         instead of 'gmcs'.
5155 2008-02-27  Marek Safar  <marek.safar@gmail.com>
5157         * ecore.cs: Clean-up and split BetterConversion.
5158         
5159 2008-02-25  Raja R Harinath  <harinath@hurrynot.org>
5161         Fix #363791
5162         * enum.cs (EnumMember.Value): Only access 'value' if
5163         ResolveValue says it's ok.
5164         (EnumMember.DoResolveValue): Don't set prev_member.value.
5165         (Enum.GetDefinition): Reverse arguments of Equals --
5166         EnumMember.Value can return 'null'.
5168         * statement.cs (Switch.Error_AlreadyOccurs): Fix typo in name.
5170 2008-02-22  Marek Safar  <marek.safar@gmail.com>
5172         * generic.cs, expression.cs: More ongoing work on expression trees.
5173         
5174 2008-02-21  Marek Safar  <marek.safar@gmail.com>
5176         * class.cs, typemanager.cs: Rewrote operator matching logic to correctly
5177         handle missing matches when mutiple operators exist.
5178         
5179 2008-02-20  Marek Safar  <marek.safar@gmail.com>
5181         A fix for bug #363218
5182         * expression.cs (ArrayCreation.Clone): Deal with multi-dimensional
5183         initializers.
5184         
5185 2008-02-20  Marek Safar  <marek.safar@gmail.com>
5187         * expression.cs, constant.cs, cfold.cs: Yet another side-effect constant
5188         update. This time to deal correctly with SideEffectConstant expression used
5189         as an argument for another constant folding.
5191 2008-02-20  Raja R Harinath  <harinath@hurrynot.org>
5193         * typemanager.cs (DropGenericMethodArguments): Ensure we get an underlying
5194         MethodBuilder.
5196 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5198         * constant.cs, cfold.cs: SideEffectConstant results can apply for folding.
5200 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5202         A fix for bug #328136
5203         * expression.cs: Do not fold immediately LogicalAnd operators when the left
5204         side is a false constant, because we still need to evaluate the right-hand
5205         side.
5207         * statement.cs (If): Emit two types of boolean constants (simple constant,
5208         side-effect constant).
5210 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5212         * constant.cs (SideEffectConstant): Don't emit boolean constant.
5214         * expression.cs: Fold immediately LogicalAnd operators when both sides are
5215         constants.
5217 2008-02-18  Marek Safar  <marek.safar@gmail.com>
5219         A fix for bug #361457
5220         * ecore.cs (IsApplicable): Params methods have lower priority.
5222         * support.cs: Return correct parameter modifier for params types.
5224 2008-02-18  Marek Safar  <marek.safar@gmail.com>
5226         * generic.cs (TypeParameter): Cache attribute target name.
5228         * support.cs: Removed unused variable.
5230         * typemanager.cs: Removed debugging leftover.
5232         * ecore.cs: Use local type instead of a property;
5234         * class.cs (VerifyMembers): Consider also parent to test whether type member
5235         is local or public.
5237         * expression.cs (FullMethodDesc): Removed.
5239         * attribute.cs (IsValidArgumentType): Made static.
5241 2008-02-17  Raja R Harinath  <harinath@hurrynot.org>
5243         Cleanup to be more readable.
5244         * Makefile (GMCS_PROFILE): Remove.
5245         (COMPILER_NAME): New helper.
5247 2008-02-15  Miguel de Icaza  <miguel@novell.com>
5249         * cs-tokenizer.cs: if a conditional expression happens inside a
5250         (...) this also means that we do not need to de-ambiguate between
5251         an parenthesized expression and a cast.
5253         Fixes 346484.
5255         * constant.cs (SideEffectConstant): a constant value that happens
5256         to have a side effect.
5258         Fixes the build regressions introduced by the fix for #359789
5260 2008-02-14  Rodrigo Kumpera  <rkumpera@novell.com>
5262         * expression.cs (Conditional.Emit): when emitting the ternary
5263         operator, use local variables to generate code verifiable code.
5265         The verifier cannot infer that the type on stack before the
5266         stloc.0 is executed is of type ParentB. This happens because the
5267         stack merge algorithm uses only parent types when deciding which
5268         is the common type.  This is described in Part III 1.8.1.3 of ECMA
5269         335.
5271         This code compiled with mcs is not verifiable under MS. The MS
5272         verifier picks the first common interface of Foo and Bar, which is
5273         wrong, but doesn't use a full join type of the 2 interfaces.
5275         CSC uses a clever hack to compile such code in a verifiable
5276         way. It stores the intermediate values in a local variable with
5277         the expected type.
5279         Fixes: #358102
5281 2008-02-14  Miguel de Icaza  <miguel@novell.com>
5283         * expression.cs: Do not fold BitwiseAnd operators when the left
5284         side is a false constant, because we still need to evaluate the
5285         right-hand side.
5287         Fixes #359789
5289         * support.cs: Instead of throwing an InternalErrorException when
5290         the position of the stream is outside the boundary of our buffer,
5291         reset the state of the reader, and restart the reading from the
5292         beginning of the file.
5294 2008-02-14  Marek Safar  <marek.safar@gmail.com>
5296         * generic.cs (TypeParameter.GetMembers): Is not supported operation.
5298 2008-02-14  Marek Safar  <marek.safar@gmail.com>
5300         A fix for bug #361686
5301         * decl.cs: A protected types used inside a private class which parents
5302         derives from the protected class are accessible.
5304 2008-02-13  Marek Safar  <marek.safar@gmail.com>
5306         * generic.cs (ConstraintChecker): Use cached member lookup when looking for
5307         the parameterless constructor.
5309 2008-02-13  Marek Safar  <marek.safar@gmail.com>
5311         * generic.cs, typemanager.cs, iterators.cs, codegen.cs: Refactored core
5312         lookup methods to use standard member cache when doing member lookup.
5314 2008-02-12  Marek Safar  <marek.safar@gmail.com>
5316         * driver.cs: Don't report full path for referenced module as assembly error.
5318 2008-02-12  Marek Safar  <marek.safar@gmail.com>
5320         * Makefile: Fixed `qh' target to work on all machines.
5322         * report.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs, anonymous.cs,
5323         expression.cs, codegen.cs, statement.cs, doc.cs: Replaced type IsSubclassOf
5324         and HasElementType with TypeManager implementation.
5326 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5328         A fix for bugs #325134, #359749
5329         * expression.cs, ecore.cs: Try to resolve an extension method even if the
5330         first binds point to non-method member expression.
5332 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5334         * cs-parser.jay: Null coalescing operator is not part of ISO-1.
5336 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5338         A fix for bugs #321394, #323028
5339         * generic.cs, parameter.cs, ecore.cs, class.cs, decl.cs, delegate.cs:
5340         Reworked naive IsAccessibleAs implementation to handle nested types.
5342 2008-02-05  Jb Evain  <jbevain@novell.com>
5344         * class.cs: use generic type comparison for parameters
5345         as well.
5347 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5349         A fix for bug #325372
5350         * class.cs: Use generic type comparison when testing method signatures.
5352 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5354         A fix for bug #357047
5355         * ecore.cs: Applied C# 3.0 changes to better conversion.
5357 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5359         A fix for bug #358374
5360         * cs-parser.jay: Correctly set modifiers for all constructor types.
5362 2008-02-04  Marek Safar  <marek.safar@gmail.com>
5364         A fix for bug #355251
5365         * generic.cs: Added base class constraint based type inference.
5367 2008-02-01  Marek Safar  <marek.safar@gmail.com>
5369         A fix for bug #357255
5370         * decl.cs: One more missing visibility check.
5372 2008-02-01  Marek Safar  <marek.safar@gmail.com>
5374         * support.cs: Fixed broken return.
5376 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5378         * report.cs: Correctly reset warnings count after probing.
5380 2008-01-25  Martin Baulig  <martin@ximian.com>
5382         * namespace.cs
5383         (NamespaceEntry.SymbolFileID): Make this work again after
5384         MemberName.ToString() is gone.
5386 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5388         * expression.cs: Implemented Divide, Equal, ExclusiveOr, GreaterThanOrEqual
5389         expressions.
5391 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5393         * generic.cs: Use full implicit conversion for type inference fixing.
5395 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5397         * ecore.cs, expression.cs, generic.cs: Implemented Convert, ConvertChecked.
5398         Fixed user operator conversions.
5400 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5402         * generic.cs: Do nullable type to null comparison optimization during
5403         resolve phase.
5405 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5407         A fix for bug #355163
5408         * generic.cs: Enabled l-value resolve on nullable expressions.
5410 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5412         A fix for bug #353986
5413         * class.cs: Ingore static ctors with parameters for any further checks.
5415 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5417         A fix for bug #354310
5418         * namespace.cs: Removed redundant check.
5420 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5422         A fix for bug #354928
5423         * expression.cs: ElementInitializers can be resolved only once.
5425 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5427         * convert.cs, ecore.cs, expression.cs, generic.cs: Implemented Coalesce and
5428         Condition expressions.
5430 2008-01-23  Marek Safar  <marek.safar@gmail.com>
5432         * codegen.cs: Fixed AssemblyBuilder initialization on other platforms.
5434 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5436         * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool conversion is
5437         not allowed.
5439         * generic.cs: Implemented coalesce expression.
5441 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5443         A fix for bug #355145
5444         * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
5445         expression tree type inference.
5447 2008-01-22  Raja R Harinath  <harinath@hurrynot.org>
5449         Fix #354663
5450         * expression.cs (Binary.IsUnsignedType): Fix typo.
5452 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5454         * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit expression.
5456 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5458         A fix for bug #355161
5459         * ecore.cs, expression.cs: Wider range of extension method supported
5460         expressions.
5462 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
5464         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
5465         AssemblyBuilder to operate in compiler context. Fixes mcs part of
5466         bug #354970.
5468 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5470         A fix for bug #355148
5471         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
5473 2008-01-22  Miguel de Icaza  <miguel@novell.com>
5475         * expression.cs (CreateExpressionTree): Add support for or and
5476         logical or, and indent following the coding conventions.
5478         * typemanager.cs (LinqExpression): renamed from
5479         ExpressionTreeManager, for a shorter name.
5481         Use TypeManager.CoreLookupType to lookup types from our core
5482         assemblies and turn those into "Type" variables.
5484         Consumers that previously used "Namespace" and "Type" from this
5485         class should instead use the TypeExpression which is a type that
5486         is fully resolved (without involving the regular C# resolution
5487         rules). 
5489         This typically looks like this:
5491         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
5492         new MemberAccess (texpr, name, type_arguments, loc)
5494         This avoids the problem in: #355178
5496 2008-01-21  Marek Safar  <marek.safar@gmail.com>
5498         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
5499         feature in parser only as we do in other cases.
5500         
5501 2008-01-21  Marek Safar  <marek.safar@gmail.com>
5503         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
5504         typemanager.cs: A refactoring of params arguments to reuse existing
5505         expressions (params -> array initializer) to emit params argument instead
5506         of specialized handling.
5507         It was required by expression tree implementation and it has other benefits
5508         as well, we now apply same optimization for params arguments as we do for
5509         array initializers.
5510         
5511 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5513         A fix for bug #353526
5514         * generic.cs: A type inference of params arguments may not required any
5515         temporary array creation.
5516         
5517 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5519         A fix for bug #353534
5520         * generic.cs, ecore.cs, expression.cs: A method group type inference is
5521         supported for delegates only.
5522         
5523 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5525         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
5526         type for more than 1 candidates.
5527         
5528 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5530         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
5531         expressions.
5532         
5533 2008-01-16  Marek Safar  <marek.safar@gmail.com>
5535         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
5536         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
5537         operator) expressions. 
5538                 
5539 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
5541         * statement.cs: Avoid declaring an IL variable for this_variable since it is
5542         not accessed from the generated IL.
5544 2008-01-14  Marek Safar  <marek.safar@gmail.com>
5546         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
5547         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
5548         statement.cs: The first expression tree implementation drop, mostly
5549         infrastructure work.
5551 2008-01-14  Marek Safar  <marek.safar@gmail.com>
5553         * ecore.cs (IsNestedChild): Refactored.
5555 2008-01-11  Marek Safar  <marek.safar@gmail.com>
5557         * lambda.cs: Don't use a cast on unknown expression statement.
5559 2008-01-10  Geoff Norton  <gnorton@novell.com>
5561         * cs-tokenizer.cs: One more token to distinguish between method and lambda
5562         arguments
5564 2008-01-09  Marek Safar  <marek.safar@gmail.com>
5566         * doc.cs: Report better /doc crash details.
5567         
5568 2008-01-09  Marek Safar  <marek.safar@gmail.com>
5570         A fix for bug #352536
5571         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
5573 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5575         A fix for bug #352287
5576         * ecore.cs, expression.cs: Do `this' access checking in all member access
5577         expressions.
5578         
5579 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5581         * rootcontext.cs, driver.cs: Switch to linq mode by default.
5582         
5583         * report.cs: Reset message stacks.
5584         
5585 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5587         * generic.cs (InferInPhases): Correctly calculate params position.
5588         
5589 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5591         * cs-tokenizer.cs: No need to parse full string when parsing lambda
5592         arguments.
5594 2008-01-07  Marek Safar  <marek.safar@gmail.com>
5596         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
5597         
5598         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
5599         
5600         * driver.cs: Updated --help option.
5601         
5602 2008-01-07  Marek Safar  <marek.safar@gmail.com>
5604         * generic.cs (InferParamsTypeArguments): Removed.
5605         (InferInPhases): Add params type inference.
5606         (LowerBoundInference): Fixed scoring mechanism.
5607         
5608         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
5609         
5610 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
5612         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
5613         byte array for unsigned "baked" assemblies.
5615 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
5617         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
5618         array for assemblies that are not strongnamed.
5620 2008-01-04  Marek Safar  <marek.safar@gmail.com>
5622         A fix for bug #351481
5623         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
5624         declaring type for nested generic types.
5625         
5626 2008-01-04  Marek Safar  <marek.safar@gmail.com>
5628         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
5629         instead of ToString.
5630         
5631 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5633         A fix for bug #351047
5634         * expression.cs (Binary.ResolveOperator): Allow equality operators between
5635         null and structs only when equality and inequality operators are defined
5636         either as an user-operators or predefined operators.
5637         
5638 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5640         A fix for bug #351047
5641         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
5642         
5643 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5645         A fix for bug #351257
5646         * cs-tokenizer.cs: Advance line number for '\r' correctly.
5647         
5648 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5650         A fix for bug #351157
5651         * class.cs (Using): Fixed yet another broken cloning.
5652         
5653         (Block): Put back more sensible default value for statements.
5654         
5655 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
5657         * codegen.cs: Allow AssemblyVersion with only major version component.
5658         Fixes bug #351055.
5660 2007-12-29  Marek Safar  <marek.safar@gmail.com>
5662         A fix for bug #324654
5663         * class.cs: Use FullName property as member name.
5665 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5667         A fix for bug #342117
5668         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
5669         constructor constraint.
5671 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5673         A fix for bug #338273
5674         * class.cs (ProbertyBase): Access modifier checks are required for overrides
5675         only.
5677 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5679         A fix for bug #350839
5680         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
5682 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
5684         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
5685         GHOP:
5686         
5687         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
5689         * statement.cs: Changed some Hashtables to use HybridDictionaries
5690         instead. It was observed that some HashTables only contained a few
5691         items in the vast majority of cases. Since HybridDictionary is
5692         more efficient on small sets (<10 elements), "known_variables"
5693         from class ExplicitBlock as well as "labels" and "constants " from
5694         class Block were changed to HybridDictionaries. 
5696         Atsai results: (56216kb->54987kb)
5698         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
5701 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
5703         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
5704         GHOP:
5705         
5706         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
5707         
5708         * expression.cs: foreach loop to for loop, saved on allocation of
5709         enumerator (59333kb->59141kb)
5711         * statement.cs. Changed foreach loops to for loops, saved on
5712         allocation of enumerator (59141kb->59006kb)
5714         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
5715         when constructed with no specified capacity. This was causing a
5716         few ArrayLists to allocate more memory than they would potentially
5717         need in the Block class and MemberCache class. Setting the
5718         ArrayLists to construct with a capacity of 1 saves some
5719         memory. (56216kb->55585kb)
5721 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5723         A fix for bug #347189 (2nd issue)
5724         * expression.cs (MemberAccess): Nested type can be found in base non-generic
5725         type.
5727 2007-12-27  Miguel de Icaza  <miguel@novell.com>
5728         
5729         * report.cs: Do not use colors if stdout and stderr are not a
5730         terminal.
5732 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5734         A fix for bug #346998
5735         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
5736         overloads.
5738 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5740         A fix for bug #343465
5741         * class.cs: Explicit method name for nested types uses dots only.
5743 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5745         A fix for bug #343707
5746         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
5748 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5750         * ecore.cs: Report type inference errors only when arguments count matches
5751         parameter count.
5752         
5753         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
5754         
5755         * expression.cs, report.cs: New warning.
5756         
5757         * typemanager.cs: Catch anonymous method type too.
5759 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5761         A fix for bug #346379
5762         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
5764 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5766         A fix for bug #347359
5767         * expression.cs (Invocation): Don't resolve already resolved expression.
5769 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5771         A fix for bug #347189
5772         * class.cs (FixedField): Use non-dependent code only in the define phase.
5774 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5776         A fix for bug #348076
5777         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
5779 2007-12-22  Marek Safar  <marek.safar@gmail.com>
5781         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
5782         discovered extension methods.
5784 2007-12-22  Marek Safar  <marek.safar@gmail.com>
5786         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
5787         method.
5789 2007-12-21  Miguel de Icaza  <miguel@novell.com>
5791         * report.cs (ErrorMessage): Add support for using colors on
5792         terminals that support it. 
5794 2007-12-21  Marek Safar  <marek.safar@gmail.com>
5796         * ecore.cs: Use information about expanded params for error reporting.
5798 2007-12-21  Marek Safar  <marek.safar@gmail.com>
5800         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
5801         and logic for params overloads.
5802         
5803 2007-12-15  Miguel de Icaza  <miguel@novell.com>
5805         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
5806         as this is also created from the parser.  Fixes #349034
5808 2007-12-12  Miguel de Icaza  <miguel@novell.com>
5810         * statement.cs (Throw.CloneTo): it is valid to have empty
5811         expressions for throw. 
5813 2007-12-03  Marek Safar  <marek.safar@gmail.com>
5815         * cs-parser.jay: Set delegate constraint parsing region correctly.
5817 2007-12-03  Marek Safar  <marek.safar@gmail.com>
5819         A fix for bug #345467
5820         * typemanager.cs (IsEqual): Compare generic parameters position only.
5821         
5822 2007-11-28  Marek Safar  <marek.safar@gmail.com>
5824         * expression.cs (BaseAccess): Type arguments can be null.
5826 2007-11-27  Raja R Harinath  <harinath@gmail.com>
5828         * statement.cs (Block.Resolve): Ensure flow-branching tree is
5829         consistent even when an error has occured.
5830         (Switch.Resolve): Likewise.
5832 2007-11-22  Marek Safar  <marek.safar@gmail.com>
5834         A fix for bug #334505
5835         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
5836         overrides.
5837         
5838 2007-11-22  Marek Safar  <marek.safar@gmail.com>
5840         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
5841         refactorings required to resolve extension methods correctly when mixing
5842         generics and non-generics members.
5843         
5844 2007-11-20  Marek Safar  <marek.safar@gmail.com>
5846         A fix for bug #342584
5847         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
5848         conversion.
5849         
5850 2007-11-19  Marek Safar  <marek.safar@gmail.com>
5852         A fix for bug #342512
5853         * delegate.cs: Use delegate argument expression when is available. Don't
5854         emit virtual call when class is sealed.
5855         
5856 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5858         A fix for bug #325423
5859         * assign.cs (FieldInitializer): Use resolved expression for emit.
5860         
5861         * class.cs: Print less confusing error message.
5862         
5863 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5865         * cs-tokenizer.cs: Removed GMCS ifdefs.
5866         
5867         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
5868         mcs.
5869         
5870         * cs-parser.jay: Disabled nullable check.
5871         
5872         * generic-mcs: Copied more generic stuff.
5873                 
5874 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5876         * gcs-parser.jay: Merged to cs-parser.jay.
5877         
5878         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
5879         * *.csproj, *.sources: Updated to use only jay parser file.
5881 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5883         * gcs-parser.jay: Added nullable and default expression feature checks.
5884         
5885 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5887         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
5888         it fixes many TODOs and hidden bugs.
5889         
5890         * expression: Removed duplicate error check.
5892 2007-11-15  Marek Safar  <marek.safar@gmail.com>
5894         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
5895         implicitly type local variable only when it is used in a declaration.
5897 2007-11-15  Marek Safar  <marek.safar@gmail.com>
5899         * attribute.cs: Use CS0612 for empty strings.
5901 2007-11-14  Marek Safar  <marek.safar@gmail.com>
5903         * lambda.cs, statement.cs: Contextual return may act as a statement.
5905 2007-11-14  Marek Safar  <marek.safar@gmail.com>
5907         A fix for a regression cause by #324222
5908         * class.cs: Don't report unused even when it implements an interface.
5909         
5910 2007-11-13  Marek Safar  <marek.safar@gmail.com>
5912         A fix for bug #341205
5913         * ecore.cs, expression.cs: Method group expression cannot do static
5914         method access with an instance reference check before overloading takes
5915         a place.
5916         
5917 2007-11-13  Marek Safar  <marek.safar@gmail.com>
5919         A fix for bug #325359
5920         * class.cs: Use predictable name for automatically generated property.
5921         
5922 2007-11-12  Marek Safar  <marek.safar@gmail.com>
5924         A fix for bug #324996
5925         * expression.cs (Is): Handle case where D is nullable and T is not
5926         correctly.
5927         
5928         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
5929         
5930 2007-11-12  Marek Safar  <marek.safar@gmail.com>
5932         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
5933         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
5934         Flush small error reporting changes.
5935         
5936 2007-11-09  Marek Safar  <marek.safar@gmail.com>
5938         A fix for bug #324996
5939         * expression.cs: Rewrote Is expression implementation to work with
5940         generics, nullable types, anonymous method. A const result expression 
5941         uses existing infrastructure instead of custom not fully-featured one.
5942         
5943 2007-11-08  Marek Safar  <marek.safar@gmail.com>
5945         A fix for bug #340202
5946         * class.cs: Consider generics for volatile field.
5948 2007-11-08  Marek Safar  <marek.safar@gmail.com>
5950         A fix for bug #335594
5951         * expression.cs: Use conversion rules when handling string addition.
5952         
5953 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5955         A fix for bug #336651
5956         * expression.cs: Fixed a crash when probing is on.
5957         
5958 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5960         A fix for bug #324242
5961         * covert.cs: Added a conversion from any nullable-type with an 
5962         underlying enum-type to the type System.Enum.
5963         
5964 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5966         A fix for bug #324222
5967         * class.cs: Report all non-used event fields.
5968         
5969 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5971         A fix for bug #325161
5972         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
5973         qualifier for generic types.
5974         
5975 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5977         A fix for bug #322971
5978         * expression.cs, ecore.cs: Added intermediate result value check for
5979         indexers. 
5980         
5981 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5983         A fix for bug #324754
5984         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
5985         when it was requested.
5987 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5989         A fix for bug #325101
5990         * expression.cs: Do type not value comparison for `is' expression.
5992 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5994         A fix for bug #320236
5995         * convert.cs: Don't apply user conversion on underlying target type.
5997 2007-11-06  Marek Safar  <marek.safar@gmail.com>
5999         * expression.cs: Don't use unresolved expression for error reporting.
6001 2007-11-06  Marek Safar  <marek.safar@gmail.com>
6003         A fix for bugs #337712, #324490
6004         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
6005         overloading resolution too.
6006         
6007         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
6008         the process consistent and more robust.
6009         
6010         * expression.cs, linq.cs, report.cs: Update.
6012 2007-11-02  Marek Safar  <marek.safar@gmail.com>
6014         A fix for bug #332909
6015         * attribute.cs: Resolve attributes in correct context using error
6016         handling procedure.
6017         
6018         * rootcontext.cs: Define Obsolete attribute members as core members.
6019         
6020 2007-11-02  Marek Safar  <marek.safar@gmail.com>
6022         * statement.cs: Removed unused methods.
6023         
6024 2007-10-31  Wade Berrier  <wberrier@novell.com>
6026         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
6027         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
6028         during 'make dist')
6030 2007-10-31  Marek Safar  <marek.safar@gmail.com>
6032         A fix for bug #338102
6033         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
6034         methods registered as non-generics.
6035         
6036 2007-10-31  Marek Safar  <marek.safar@gmail.com>
6038         A fix for bugs #337712, #324490
6039         * delegate.cs: Delegate covariance and contravariance is not allowed for
6040         value types.
6041         
6042 2007-10-31  Marek Safar  <marek.safar@gmail.com>
6044         A fix for bug #337719 
6045         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
6046         `from' keyword.
6047         
6048 2007-10-30  Marek Safar  <marek.safar@gmail.com>
6050         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
6052 2007-10-29  Marek Safar  <marek.safar@gmail.com>
6054         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
6055         query expressions.
6057 2007-10-29  Raja R Harinath  <rharinath@novell.com>
6059         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
6061 2007-10-29  Marek Safar  <marek.safar@gmail.com>
6063         A fix for bug #334652
6064         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
6065         extension methods when we have not found the best candidate in normal
6066         container.
6068 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6070         * AssemblyInfo.cs: Keep up-to-date.
6072 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6074         * Makefile: Fixed generics compiler name.
6075         
6076 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6078         * lambda.test: removed, lambda parsing is done differently.
6079         
6080         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
6082 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
6084         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
6086 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6088         * Makefile, *.sources : All C# compilers are in mcs folder.
6089         
6090         * *.cs: Use existing 2_1 define for smcs.
6092 2007-10-26  Marek Safar  <marek.safar@gmail.com>
6094         A fix for bug #335847
6095         * assign.cs, expression.cs: Couple of changes to avoid creating a
6096         temporary variable for each object initializer assignment statement. It
6097         simplifies struct initialization too, otherwise two temporary variables
6098         would be required.
6099         Implemented optimization of redundant default element initializers.
6100         
6101 2007-10-25  Marek Safar  <marek.safar@gmail.com>
6103         A fix for bug #336766
6104         * expression.cs (Class.CheckBase): Use generic name when method is
6105         generic.
6106         
6107 2007-10-25  Marek Safar  <marek.safar@gmail.com>
6109         A fix for bug #334737
6110         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
6111         variable and not variable argument for prepared copies.
6113 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6115         A fix for bug #325110
6116         * class.cs, expression.cs, attribute.cs: Use open generic method when
6117         checking conditional attribute.
6118         
6119 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6121         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
6122         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
6123         FeatureIsNotAvailable.
6125 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6127         ** C# 3.0 Partial methods
6128         
6129         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
6130         methods support. Because of member cache issue with generics only
6131         non-generics partial methods are fully supported.
6132         
6133 2007-10-23  Marek Safar  <marek.safar@gmail.com>
6134         
6135         * class.cs, decl.cs: Rewrote member overloads check to cope with 
6136         generics and to use member cache for member checking. It also improves
6137         performance and fixes remaining overloads issues.
6138         
6139 2007-10-20  Marek Safar  <marek.safar@gmail.com>
6140         
6141         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
6142         roottypes.cs, typemanager.cs:
6143                 
6144         A member cache creation logic changed to add members immediately and
6145         not rely on fallback. The member cache is now only prefered way
6146         how to access and find type declaration members. It saves 5 MB of memory
6147         during MWF compilation and makes code ready for more optimizations and
6148         clean-ups, it's also a pre-requirement for partial methods.
6149         
6150 2007-10-18  Raja R Harinath  <harinath@gmail.com>
6152         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
6153         handling for generic parameters.
6155 2007-10-15  Marek Safar  <marek.safar@gmail.com>
6156         
6157         * class.cs (FixedField): Removed redundant volatile check.
6158         
6159 2007-10-15  Marek Safar  <marek.safar@gmail.com>
6160         
6161         * class.cs, decl.cs: Fixed overload members verification to do only one
6162         check per possible collision.
6163         
6164 2007-10-13  Marek Safar  <marek.safar@gmail.com>
6165         
6166         A fix for bug #325478
6167         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
6168         and create only one disposable flags container.
6169         
6170 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6171         
6172         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
6173         * statement.cs (Fixed): Fixed variables cloning.
6174         
6175 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6176         
6177         A fix for bug #333342
6178         * class.cs (EventField): Don't mark value type event as synchronized. 
6179         
6180 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6181         
6182         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
6183         inference to identify best candidate method correctly.
6184         (ProperyExpr): A range variable is read only and cannot be modified.
6185         
6186 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6187         
6188         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
6189         logic to identify best candidate method correctly.
6190         
6191 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6192         
6193         * location.cs (Equals, GetHashCode): Removed.
6194         
6195 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6196         
6197         * report.cs: Implemented message recorder. It is used mainly for lambda
6198         expressions to capture otherwise swallowed error messages.
6199         
6200         * anonymous.cs, lambda.cs.cs: Do full parameters check.
6202         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
6203         and not at the top.
6204         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
6205                 
6206         * expression.cs (MemberAccess): Always report lookup failure.
6207         
6208         * location.cs: Implemented Equals, GetHashCode.
6209         
6210         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
6211         
6212 2007-10-10  Jb Evain  <jbevain@novell.com>
6214         * codegen.cs: re-enable assembly version check.
6216 2007-10-09  Marek Safar  <marek.safar@gmail.com>
6217         
6218         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
6219         checks.
6220         
6221         * namespace.cs (UsingAlias): Do correct version check.
6222         
6223 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6224         
6225         * expresison.cs, ecore.cs: Issue extension method error message when
6226         appropriate.
6227         
6228         * rootcontext.cs: Added ISO_2 compiler mode option.
6230 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6231         
6232         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
6233          message.
6234         
6235 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6236         
6237         * attribute.cs (GetString, GetBoolean): Work with both literal and
6238         constant.
6239         
6240         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
6241         Moved method overload specific methods to MethodGroupExpr.
6242         
6243         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
6244         it should be less memory consuming.
6245         
6246 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
6248         * codegen.cs: remove the assembly version check until the buildbot is
6249         fixed.
6251 2007-10-07  Jb Evain  <jbevain@novell.com>
6253         * attribute.cs (Attribute.GetString): if the value
6254         expression is a StringConstant, return its string value.
6256 2007-10-07  Jb Evain  <jbevain@novell.com>
6258         * typemanager.cs: add `assembly_version_attribute_type`.
6259         * codegen.cs: on attribute emission, check that the
6260         AssemblyVersionAttribute doesn't overflow.
6262 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6263         
6264         A fix for bug #324677
6265         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
6266         parent container of a scope container with currently resolved one. 
6267         
6268 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6269         
6270         A fix for bug #325534
6271         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
6272         only.
6273         
6274 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6275         
6276         A fix for bug #327504
6277         * class.cs (Operator.Define): Refactored implicit and explicit user
6278         operator conversion rules.
6279         
6280 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6281         
6282         A fix for bug #327520
6283         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
6284         
6285 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6286         
6287         A fix for bug #328022
6288         * class.cs (MethodData.Define): Use correct method to check whether
6289         a method implementents an accessor.
6290         
6291 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6292         
6293         A fix for bug #330069
6294         * statement.cs (Fixed.Resolve): Read the first array element only when
6295         an array is instantiated. 
6296         
6297 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6298         
6299         * expression.cs, assign.cs, generics.cs: Print correct operator when
6300         compound assignment is used.
6301         
6302 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6303         
6304         A fix for bug #325841
6305         * expression.cs (ArrayAccess): Use full argument cloning only for
6306         string compound concatenation.
6307         
6308 2007-10-03  Marek Safar  <marek.safar@gmail.com>
6309         
6310         A fix for bug #328774
6311         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
6312         assignment.
6313         (PropertyExpr.EmitAssign): Fixed string concatenation compound
6314         assignment.
6316 2007-10-03  Raja R Harinath  <rharinath@novell.com>
6318         Fix #328490
6319         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
6320         Event accessibility checks here.  Remove some bogus code that
6321         accidently made GenericMethods work.
6322         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
6324 2007-09-25  Marek Safar  <marek.safar@gmail.com>
6325         
6326         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
6327         
6328         * statement.cs (Block): Refactored AddVariable to allow error handling
6329         customization.
6330         
6331         * generic.cs: New stub.
6332         
6333 2007-09-23  Marek Safar  <marek.safar@gmail.com>
6334         
6335         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
6336         flag.
6337         
6338 2007-09-17  Marek Safar  <marek.safar@gmail.com>
6340         * class.cs: Use partial container to record whether any partial part
6341         contains static field initializer and therefore default contructor has
6342         to be defined.
6343         
6344 2007-09-14  Marek Safar  <marek.safar@gmail.com>
6346         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
6347         mono-list when only one of two partial parts has defined accessibility
6348         modifier.
6349         
6350 2007-09-14  Marek Safar  <marek.safar@gmail.com>
6352         A fix for bug #82845
6353         
6354         * class.cs (TypeContainer): Set correct resolve context for all field
6355         initializers.
6356         
6357 2007-09-13  Marek Safar  <marek.safar@gmail.com>
6359         * assign.cs: Fixed a crash when field is resolved twice with an error.
6360         
6361         * codegen.cs: Changed InFieldInitializer to be flag.
6362         
6363         * anonymous.cs, ecore.cs, expression.cs: Update after
6364         IsInFieldInitializer rename.
6365         
6366         * const.cs: Removed unused parameter.
6367         
6368         * class.cs: Changed the way how we resolve and emit field initializers.
6369         The field initilizers have to have access to contructor block to emit
6370         compiler generated code.
6372 2007-09-13  Marek Safar  <marek.safar@gmail.com>
6374         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
6375         generics use TypeContainer instead.
6376         
6377 2007-09-12  Marek Safar  <marek.safar@gmail.com>
6378         
6379         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
6381         * lambda.cs (ResolveParameters): Use more powerful
6382         InflateGenericArgument.
6383         
6384         * parameters.cs: Better exception message.
6385                 
6386 2007-09-10  Marek Safar  <marek.safar@gmail.com>
6388         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
6389         correct expression block type. 
6390         
6391         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
6392         
6393         * expression.cs (Invocation): Extracted method group resolve to
6394         DoResolveOverload.
6395         
6396 2007-09-07  Marek Safar  <marek.safar@gmail.com>
6398         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
6399         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
6400         
6401         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
6402         generic extension methods.
6404 2007-09-06  Marek Safar  <marek.safar@gmail.com>
6406         A fix for bug #82676 (Do I get it right now?)
6407         * convert.cs (Binary.ResolveOperator): An interface is converted to the
6408         object before a standard conversion is applied.
6409         
6410 2007-09-06  Marek Safar  <marek.safar@gmail.com>
6412         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
6413         #82676.
6414         
6415 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6417         A fix for bug #82676
6418         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
6419         non-generic interface types.
6420         
6421 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6423         A fix for bug #82690
6424         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
6425         
6426 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6428         A fix for bug #82571
6429         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
6430         modifier for container based methods.
6431         
6432 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6434         A fix for bug #82676
6435         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
6436         any interface-type T means to any of interface type T.
6438 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6440         * namespace.cs: We have 2 versions of System.Core assembly.
6442 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6444         A fix for bug #82652
6445         * class.cs (Class.GetClassBases): Compare types and not expressions.
6447 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6449         A fix for bug #82620
6450         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
6451         actually never worked before.
6452         (IndexerAccess): Emit prepared arguments before they are modified.
6453         
6454 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6456         A fix for bug #82563
6457         * assign.cs: Revert wrong fix.
6458         
6459         * expression.cs (VariableReference.EmitAssign): Handle ref reference
6460         correctly.
6461         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
6462         Instead of ldelema/stdind we have to use temporary variables to handle
6463         cases like String.Concat (params string[]).
6464         
6465 2007-08-31  Marek Safar  <marek.safar@gmail.com>
6467         * class.cs: EmitAttributes to Emit rename.
6468         
6469         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
6470         null.
6471         (MemberCore.HasClsCompliantAttribute): Don't depend on 
6472         GetClsCompliantAttributeValue execution.
6473         
6474 2007-08-31  Marek Safar  <marek.safar@gmail.com>
6476         * anonymous.cs: Use shorter type prefix.
6477         
6478         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
6479         when exist.
6480         
6481         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
6482         variables when probing is on.
6483         
6484         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
6485         unresolved variables.
6486         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
6487         handle transparent identifiers.
6488         
6489 2007-08-26  Marek Safar  <marek.safar@gmail.com>
6491         * attribute.cs (IsClsCompliant): Add nullable types test.
6492         
6493 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
6495         * doc.cs : catch other types of exception than XmlException to
6496           report CS1570. Fixed bug #82565.
6498 2007-08-23  Marek Safar  <marek.safar@gmail.com>
6500         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
6501         The number of delegate parameters has to match.
6502         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
6503         arrays.
6505 2007-08-21  Marek Safar  <marek.safar@gmail.com>
6507         * anonymous.cs (AnonymousMethod): Generate private anonymous method
6508         to fix problem with private arguments.
6510 2007-08-20  Marek Safar  <marek.safar@gmail.com>
6512         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
6513         
6514         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
6515         
6516         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
6517         empty. Add cloning suport.
6518         
6519         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
6521 2007-08-20  Marek Safar  <marek.safar@gmail.com>
6523         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
6524         to create EmptyCast. It handles EmptyConstantCast specialization for
6525         constants.
6526         
6527 2007-08-18  Marek Safar  <marek.safar@gmail.com>
6529         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
6530         (EmitArrayArgument): One routine for array arguments.
6531         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
6532         
6533 2007-08-17  Marek Safar  <marek.safar@gmail.com>
6535         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
6537 2007-08-17  Marek Safar  <marek.safar@gmail.com>
6539         * anonymous.cs: MemberLookupFinal update.
6541         * class.cs (ConstructorInitializer): Is expression based.
6542         
6543         * delegate.cs: MethodGroupExpr update.
6544         
6545         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
6546         messages.
6547         (Error_MemberLookupFailed): Customizable error override.
6548         (MethodGroupExpr): Keep queried type for later usage.
6549         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
6550         resolve.
6551         
6552         * expression.cs: Error_MemberLookupFailed refactoring.
6553         (New.DoResolve): Resolve as much as possible.
6554         (ElementInitializer.Error_MemberLookupFailed): Object initializer
6555         customization for invalid member types.
6557         * statement.cs: MethodGroupExpr update.
6558         
6559 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6561         * modifier.cs (Check): Check all modifiers and not only accessibility
6562         ones.
6564 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6566         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
6567         type and not an expression.
6569 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6571         * statement.cs (Catch.Clone): Type and variable can be null.
6573 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6575         A fix for bug #81979
6576         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
6577         I am really not sure whether this is the best fix.
6578         
6579         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
6580         only once.
6581         
6582 2007-08-14  Marek Safar  <marek.safar@gmail.com>
6584         ** C# 3.0 Object and collection initializers (major re-write)
6585         
6586         * assign.cs (DoResolve): Initializers are not assign related.
6587         
6588         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
6589         used during collection or object initialization.
6590         
6591         * expression.cs (Error_InvalidArguments): Add initializers specific
6592         messages. More will come later because it requires some general
6593         refactoring.
6594         (New.DoResolve): Better error handling for unsafe types.
6595         (EmptyExpressionStatement): New class.
6596         (ElementInitializer): An object initializer expression.
6597         (CollectionElementInitializer): A collection initializer expression.
6598         (CollectionOrObjectInitializers): A block of object or collection
6599         initializers.
6600         (NewInitialize): New expression with element/object initializers.
6601         
6602         * statement.cs: Reverted object/collection initializer hacks.
6603         
6604         * typemanager.cs (CSharpName): Filter __arglist type.
6605         
6606 2007-08-09  Marek Safar  <marek.safar@gmail.com>
6608         ** C# 3.0 Anonymous Types (update to the latest standard)
6609         
6610         * expression.cs (Binary.ResolveOperator): Threat all null based types
6611         same.
6612         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
6613         (AnonymousTypeParameter): Updated.
6614         
6615         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
6616         (AnonymousTypeClass): New anonymous type container.
6617         
6618         * class.cs (AddField): Return operation result.
6619         
6620         * generic.cs: Another empty TypeArguments overload.
6621         
6622         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
6623         are stored at top of normal hierarchy.
6624         
6625         * typemanager.cs (CSharpName): Filter anonymous types.
6626         
6627 2007-08-09  Marek Safar  <marek.safar@gmail.com>
6629         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
6630         as single Concat call. How could we miss that :-(
6631         
6632 2007-08-08  Marek Safar  <marek.safar@gmail.com>
6634         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
6635         
6636 2007-08-07  Miguel de Icaza  <miguel@novell.com>
6638         * expression.cs: Fix the previous commit, the creation of the
6639         arguments array list needs also to be conditional on the arguments
6640         not being null.
6642         * class.cs: Add a little bit of help to help narrow down problems.
6644         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
6645         not try to copy in that case. 
6647         * driver.cs: When building SMCS, include a new different set of
6648         default assemblies here.   Do this here so we can control whether
6649         to include the default assemblies with /noconfig.
6651 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6653         A fix for bug #81979
6654         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
6655         only.
6657 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6659         A fix for bug #82300
6661         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
6662         we are in probing scope.
6664 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6666         A fix for bug #82301
6668         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
6669         (Statement.CloneTo): Clone and not map children blocks.
6671 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6673         A fix for bug #82299
6675         * expression.cs (LocalVariableReference.CloneTo): Remap local info
6676         variable too.
6677         
6678         * statement.cs (Statement.CloneTo): Clone variables before statements
6679         to allow remaping of local variables.
6681 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6683         A fix for bug #82296
6685         * anonymous.cs,
6686         * report.cs: Log crash details for future clone problems.
6687         
6688         * statement.cs (Return.Clone): Don't clone non-existent expression.
6690 2007-08-03  Raja R Harinath  <harinath@gmail.com>
6692         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
6693         (Class.AddBasesForPart): Move CS0537 check here from ...
6694         * cs-parser.jay (class_declaration): ... here.  Move calling of
6695         'AddBasesForPart' to ...
6696         (class_bases): ... here.
6697         (struct_declaration, interface_declaration): Update to changes.
6699 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6701         A fix for bug #81923
6703         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
6704         conversion is allowed.
6706 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6708         A fix for bug #81564
6710         * ecore.cs (EventExpr): Add IsBase handling.
6712         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
6713         too.    
6714         
6715 2007-08-02  Raja R Harinath  <harinath@gmail.com>
6717         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
6718         * cs-parser.jay: Some whitespace cleanups.
6719         (current_delegate): New.
6720         (type_name): New.
6721         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
6722         a dummy code block, and use 'type_name' instead of 'member_name'.
6723         (interface_declaration, class_declaration): Likewise.
6724         (delegate_declaration): Likewise.  Rearrange slightly and use
6725         'current_delegate'.
6726         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
6727         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
6729 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6731         A fix for bug #82039
6733         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
6734         available.
6736         * typemanager.cs (CSharpName): Split to string overload.
6738 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6740         * expression.cs,
6741         * report.cs: Updated warning CS0472.
6743 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6745         A fix for bug #82181
6746         * cs-parser.jay,
6747         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
6749 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6751         A fix for bug #82277
6752         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
6754 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6756         ** C# 3.0 Type Inference (major bits are working)
6757         
6758         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
6759         (.ImplicitStandardConversionExists): Uses compatible.
6760         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
6761         (.InferReturnType): New method.
6762         (.Compatible): Refactored.
6763         (.ResolveParameters): Uses factory to create resolved parameters.
6764         (.CompatibleMethod): Add probing mode support.
6765         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
6766         clearly distinguish between 2 different operations.
6767         (LambdaMethod): Moved to lambda.cs.
6768         (AnonymousMethod): Removed unused fields and methods.
6769         (AnonymousDelegate): Simplified.
6770         
6771         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
6772         
6773         * convert. cs (ImplicitConversionStandard): Compatible works differently.
6774         
6775         * delegate.cs (Delegate): New mehods to reduce code duplication.
6776         (.GetConstructor): New method.
6777         (.GetInvokeMethod): New method.
6778         (DelegateCreation): Updated.
6779         
6780         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
6781         does not exist.
6782         (OverloadResolve): Made probing little bit faster.
6783         
6784         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
6785         when probing is on.
6786         
6787         * generic.cs (TypeInferenceContext): Dummy implementation.
6788         
6789         * iterators.cs: Updated after Resolve/Define rename.
6790         
6791         * lambda.cs (LambdaExpression)
6792         (.ResolveParameters): Handles both type of arguments and type inference too.
6793         
6794         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
6795         (InflateTypes): Updated.
6796         
6797         * support.cs (InflateTypes): Changed signature and updated.
6798         
6799         * typemanager.cs (LookupMemberCache): Better dynamic type check.
6800         (MemberLookup_FindMembers): More MS tricks.
6801         (GetParameterData): Ditto.
6802         (GetDelegateParameters): Uses quick path for dynamic types.
6803         
6804 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6806         * class.cs (MethodData.Define): EmitContext is required for generic stuff
6807         only.
6809 2007-07-31  Marek Safar  <marek.safar@gmail.com>
6811         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
6812         syntax.
6813         
6814 2007-07-26  Jb Evain  <jbevain@novell.com>
6816         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
6817         which takes a boolean 'report_errors', similar to the GetMethod.
6818         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
6819         in .net 2.1, do not report errors here.
6821         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
6822         System.Runtime.CompilerServices.RequiredAttributeAttribute and
6823         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
6824         in .net 2.1.
6826         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
6827         of the type InternalsVisibleToAttribute before the first call
6828         to CoreLookupType which is allowed to fail (third boolean parameter
6829         to true). Because, during the resolution for a type that is not
6830         immediately found, we try to check if the type is not defined in
6831         a friend assembly, and to do so, we need the
6832         InternalVisibleToAttribute.
6834 2007-07-23  Miguel de Icaza  <miguel@novell.com>
6836         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
6837         feature that allows structs to be compared against null and inline
6838         the result as true or false.
6840         Notice that the same code is not permitted inside a generic block
6841         of code that would do:
6843         class Foo<T> where T : struct {
6844             bool Eval (T x)
6845             {
6846                  return x == null;
6847             }
6848         }
6850         It is only allowed if the type of T is not bound (no where
6851         clause).   In my opinion, this CSC 2 behavior is broken but people
6852         seem to be using it (IronRuby does, a few bug reports on bugzilla
6853         have it and some people have complained about it).
6855         All of the users that depend on this behavior have code that is
6856         very likely broken. 
6857         
6858         * report.cs (Warning, Error): make these take object arguments,
6859         not strings, as that allows us to take advantage of Format.
6861 2007-07-20  William Holmes  <billholmes54@gmail.com>
6863         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
6864           Left member variable for the Count.
6865         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
6866           MemberName.CountTypeArguments to avoid a NRE. 
6868         This code is contributed under the MIT X11 license
6870 2007-07-18  Marek Safar  <marek.safar@gmail.com>
6872         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
6874 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
6876         * doc.cs : generic method arguments are written as ``x while generic
6877           type arguments are `x. Combined with the previous change, fixed bug
6878           #79706.
6880 2007-07-18  Raja R Harinath  <rharinath@novell.com>
6882         Fix #82120
6883         * expression.cs (Binary.ResolveOperator): When converting
6884         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
6886 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
6888         * doc.cs : when T: or whatever x: is specified, it does not really
6889           check the doc comment's syntax correctness. Fixed bug #82006.
6891 2007-07-18  Marek Safar  <marek.safar@gmail.com>
6893         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
6894         LambdaExpression better.
6895         
6896         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
6897         
6898         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
6899         
6900         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
6901         as it can be generated.
6902         
6903         * expression.cs (Invocation.Error_InvalidArguments): Show correct
6904         modifiers.
6905         
6906         * lambda.cs (LambdaExpression): Refactored to share same code with
6907         AnonymousMethodExpression.
6908         
6909 2007-07-17  Marek Safar  <marek.safar@gmail.com>
6911         * anonymous.cs (MakeName): Include host name for easier debugging.
6912         (LambdaMethod): New class for lambda spcecific stuff.
6913         
6914         * attribute.cs: Set EmitContext return type.
6916         * class.cs: Set EmitContext return type.
6917         
6918         * codegen.cs (EmitContext): Return type cannot be null to stop messing
6919         with null/void meaning.
6920         
6921         * iterators.cs (ContainerType): Implemented.
6922         
6923         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
6924         
6925         * statement.cs (Return): Updated to lambda expressions.
6926         (Block.CloneTo): Parent can be null.
6927                 
6928 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6930         A fix for bug #81917
6931         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
6932         
6933         * class.cs (FixedField): Check whether field is in unsafe scope.
6935         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
6936         (FieldExpr.Emit): Fixed buffers cannot be volatile.
6938         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
6939         FieldExpr.
6940         
6941         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
6942                 
6943 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6945         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
6946         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
6947         from Report class.
6949 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6951         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
6952         
6953 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6955         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
6956         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
6957         
6958         * codegen.cs(EmitContext): Add ProbingMode flag.
6959         
6960         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
6961         
6962         * driver.cs: For now set both warning values.
6963         
6964         * ecore.cs (SimpleName): Name is readonly.
6965         (MethodGroup.OverloadResolve): One quick path for probing.
6966         
6967         * expression.cs (Unary): Set Oper r/o.
6968         (Binary): Set Oper r/o.
6969         (ParameterReference): Set few instance variables as r/o.
6970         (ParameterReference.DoResolveBase): Don't capture aruments when 
6971         the probing is on.
6972         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
6973         (Arglist): arguments are private.
6974         (SizeOf): type is private and r/o.
6975         (MemberAccess): arguments are private.
6977         * report.cs: Enhanced reporting on/off capabilities.
6978         
6979         * lambda.cs: Uses ec.IsInProbingMode.
6980         (ContextualReturn): Derives from return.
6981         
6982         * rootcontext.cs: For now set both warning values.
6983         
6984         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
6985         copy if one exists.
6986         (Return.Resolve): Don't die immediately.
6987         (Block.Resolve): Speed-up probing.
6988         (Block.CloneTo): Clone only child blocks.
6990 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
6992         * iterators.cs: reverted Miguel's latest change (r81925) as it
6993         breaks the build in System.
6995 2007-07-13  Miguel de Icaza  <miguel@novell.com>
6997         * iterators.cs (Yield.CheckContext): Check for the iterator type
6998         also here as we can call into Yield even in codepaths that are not
6999         directly checked by
7000         (MethodOrOperator is the only path that was checked).
7002         In addition to the standard check, use a more specific check for
7003         constructors to report a more verbose error. 
7005 2007-07-12  Miguel de Icaza  <miguel@novell.com>
7007         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
7008         report the warning and continue 
7010         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
7011         values on the stack on the call to Emit.   Use EmitStatement if
7012         possible, or using Emit + Pop if not possible.   Fixes #82064
7014 2007-07-12  Raja R Harinath  <rharinath@novell.com>
7016         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
7017         avoid try...finally in some cases.
7019 2007-07-10  Marek Safar  <marek.safar@gmail.com>
7021         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
7022         
7023         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
7024         instead of method. Re-use standard error handling.
7025         (ConstructorInitializer.Emit): Simplified.
7026         
7027         * delegate.cs: Updated after Invocation.EmitCall change.
7028         
7029         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
7030         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
7031         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
7032         method and don't permanently changing input arguments.
7033         (MethodGroupExpr): Introduced resolved best_candidate, when method group
7034         is resolved it has one of the candidates is the best one which is later
7035         used to emit. Removed a few unused method.
7036         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
7038         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
7039         (Binary.ResolveOperator): Ditto.
7040         (ConditionalLogicalOperator.DoResolve): Ditto.
7041         (Invocation): Uses method group.
7042         (Invocation.DoResolve): Simplified.
7043         (Invocation.EmitCall): Removed useless is_static.
7044         (Invocation.Emit): Delegate to method group.
7045         (Invocation.EmitStatement): Simplified.
7046         (New): Uses method group.
7047         (MemberAccess.DoResolve): Don't destroy original expression.
7048         
7049         * statement.cs (ForEach.Resolve): Use null for no method arguments.
7050         
7051 2007-07-04  Marek Safar  <marek.safar@gmail.com>
7053         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
7054         
7055         * anonymous.cs,
7056         * lambda.cs: Add custom error message type.
7058 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7060         * lambda.cs: Simplified little bit.
7061         
7062         * parameter.cs: Introduced ImplicitLambdaParameter.
7063         (Parameters.CreateFullyResolved): New factory instead of ctor.
7064         
7065         * anonymous.cs,
7066         * class.cs,
7067         * delegate.cs: Updated parameter creation.
7068         
7069 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7071         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
7072         arguments.
7073         
7074         * generic.cs: Synchronized with gmcs.
7075         
7076 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7078         * class.cs (Indexer): Check return type as soon as possible.
7079         
7080         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
7081         members too.
7082         
7083         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
7084         
7085         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
7086         
7087         * parameter.cs (Parameter): Use expression type when it is available.
7088         
7089         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
7090         method modifier for the first parameter only.
7092 2007-06-24  Marek Safar  <marek.safar@gmail.com>
7094         A fix for bug #81938
7095         * typemanager.cs (ChangeType): Fixed couple of char conversions.
7096         
7097         * constant.cs: Tide up an exception message.
7099 2007-06-22  Marek Safar  <marek.safar@gmail.com>
7101         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
7102         an uninitialized variable is used.
7103         
7104         * expression.cs (LocalVariableReference.DoResolve): Ditto.
7106 2007-06-22  Marek Safar  <marek.safar@gmail.com>
7108         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
7109         not found error handling.
7111         * expression.cs (ArrayCreation): Removed redundant fields and little bit
7112         simplified.
7113         (ArrayCreation.ResolveArrayElement): To be ready to customization.
7114         (ArrayCreation.DoResolve): Simplified.
7115         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
7116         its own resolve process.
7117         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
7119 2007-06-20  Marek Safar  <marek.safar@gmail.com>
7121         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
7122         more error details.
7123         
7124 2007-06-20  Marek Safar  <marek.safar@gmail.com>
7126         * cs-tokenizer.cs: Removed var related stuff.
7127         
7128         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
7129         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
7130         a type and a keyword at same time.
7131         
7132         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
7133         matches to "var".
7134         
7135         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
7136         implicitly typed arrays, more changes will follow.
7137         
7138         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
7139         
7140 2007-06-19  Marek Safar  <marek.safar@gmail.com>
7142         * ecore.cs (VarExpr): Removed Handled field.
7143         
7144         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
7145         build-in assign functionality.
7146         (ForEach.Resolve): Removed all implicitly typed local variable code and
7147         simplified.
7148         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
7149         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
7151 2007-06-18  Marek Safar  <marek.safar@gmail.com>
7153         * assign.cs: Removed implicitly typed local variable check.
7154         
7155         * expression.cs (LocalVariableReference.DoResolve): Add check for self
7156         referencing implicitly typed local variable.
7157         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
7158         variable here.
7159         
7160         * statement.cs (Fixed): Removed unsupported implicitly typed local
7161         variable code.
7163 2007-06-15  Marek Safar  <marek.safar@gmail.com>
7165         * decl.cs (MemberName): Moved all Unbound stuff to parser.
7167 2007-06-14  Marek Safar  <marek.safar@gmail.com>
7169         A fix for bugs #81855 and #76274
7170         * attribute.cs (AttachTo): Always set owner for global attributes to
7171         prefined owner.
7172         
7173         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
7174         usefull too.
7175         
7176         * cs-parser.jay: Assembly and module attributes must precede all other
7177         elements except using clauses and extern alias declarations.
7179 2007-06-13  Marek Safar  <marek.safar@gmail.com>
7181         A fix for bug #81748
7182         * cs-tokenizer.cs,
7183         * expression.cs: More checks for non ISO-1 features.
7185 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7187         A fix for bug #81807
7188         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
7189         present inside switch statement and it is required by nullable check.
7191 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7193         A fix for bug #81840
7194         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
7195         when type matching fails.
7196         
7197         * namespace.cs: Tiny error message change.
7199 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7201         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
7202         reporting. Added automatic property check.
7203         
7204         * class.cs: Updated after CheckAbstractAndExtern relocation.
7205         (AEventPropertyAccessor.GetSignatureForError): Customized.
7206         
7207 2007-06-11  Marek Safar  <marek.safar@gmail.com>
7209         * class.cs (DefineBaseTypes): Base type can be undefined.
7210         
7211         * ecore.cs (TypeLookup): Minor refactoring.
7212         (DoResolveAsTypeStep): Removed redundant check.
7214         * namespace.cs (Lookup): Removed redundant check.
7215                 
7216         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
7217         ResolveAsTypeTerminal step.
7218         (BootstrapCorlib_*): Simplified.
7219         (PopulateCoreType): Core types can be now external.
7221 2007-06-07  Marek Safar  <marek.safar@gmail.com>
7223         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
7224          verification only.
7225          (InferTypeArguments): Infers anonymous expression type arguments.
7226          (Compatible): Split to Compatible and InferTypeArguments. 
7227         
7228         * lambda.cs: Updated.
7230 2007-06-08  Marek Safar  <marek.safar@gmail.com>
7232         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
7234 2007-06-07  Raja R Harinath  <harinath@gmail.com>
7236         Fix #80477, cs0135-2.cs, cs0135-3.cs
7237         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
7238         names to the "known" variables list.
7239         (Block.CheckInvariantMeaningInBlock): Handle the fact the
7240         parameter names are also "known".
7241         (Block.CheckError136): Remove.
7242         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
7243         null.
7245 2007-06-07  Marek Safar  <marek.safar@gmail.com>
7247         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
7249 2007-06-06  Marek Safar  <marek.safar@gmail.com>
7251         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
7252         internal error not an user error.
7253          
7254         * expression.cs (IsApplicable): Refactored to make debugging easier.
7256         * support.cs: More tricks for non-mono runtimes.
7257         
7258         * typemanager.cs (CoreLookupType): Made public.
7259         (InitSystemCore): All linq specific stuff moved to linq.cs
7261 2007-06-05  Marek Safar  <marek.safar@gmail.com>
7263         * typemanager.cs (CSharpSignature): One more missing build-in types
7264         replacement.
7265         More tricks for non-mono runtime.
7267 2007-06-05  Raja R Harinath  <harinath@gmail.com>
7269         * statement.cs (Block.CheckError136_InParents): Remove.
7270         (Block.AddVariable): Use GetParameterInfo instead.
7271         (ToplevelBlock.ProcessArguments): Likewise.
7273 2007-06-04  Raja R Harinath  <rharinath@novell.com>
7275         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
7276         information too.
7277         (ToplevelBlock.GetParameterInfo): Split out of ...
7278         (ToplevelBlock.GetParameterRefernce): ... this.
7279         (ToplevelBlock.ParameterMap): Remove.
7280         * expression.cs (ParameterReference): Update to use
7281         ToplevelParameterInfo.
7283         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
7284         regression.
7286         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
7287         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
7289         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
7290         (ToplevelBlock.ProcessParameters) ... here.
7291         (ToplevelBlock..ctor): Invoke it.
7293         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
7294         new parameters.
7296         * statement.cs (IKnownVariable): New interface.
7297         (LocalInfo): Implement it.
7298         (ToplevelParameterInfo): New class.
7299         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
7300         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
7301         GetKnownVariableInfo.
7303 2007-06-03  Raja R Harinath  <harinath@gmail.com>
7305         Partly speed up CS0136 error checks.
7306         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
7307         'recurse' parameter.
7308         (Block.DoCheckError136): Only check errors in parameters.  Move
7309         local variable checks ...
7310         (Block.AddVariable): ... here, and ...
7311         (ToplevelBlock.ResolveMeta): ... here.
7313 2007-06-02  Raja R Harinath  <harinath@gmail.com>
7315         * statement.cs (Block.IsChildOf): Remove.
7317         * statement.cs (Statement.Clone): Move special case code ...
7318         (Block.CloneTo): ... here.
7320 2007-05-29  Raja R Harinath  <rharinath@novell.com>
7322         * statement.cs (ToplevelBlock.container): Remove field.  It's
7323         redundant with 'Parent'.
7324         (ToplevelBlock.ContainerBlock): Remove accessor.
7325         (ToplevelBlock..ctor): Update to changes.  Register anonymous
7326         child with parent here, ...
7327         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
7328         current_block.
7329         (start_anonymous): Don't save current_block.
7330         (top_current_block): Remove.
7332         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
7333         (Block.Resolve): Update to changes.
7334         (Block..ctor): Move setting of "correct" 'Toplevel'
7335         and 'Explicit' fields to ...
7336         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
7338 2007-05-27  Raja R Harinath  <harinath@gmail.com>
7340         Kill Block.Implicit
7341         * statement.cs (Block.Implicit): Remove.
7342         (Block): Update to changes.
7343         * flowanalysis.cs: Likewise.
7345         Mildly speed up CheckInvariantMeaningInBlock
7346         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
7347         Recursively call AddKnownVariable to all enclosing blocks.
7348         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
7349         Remove recursive calls.
7350         (Block): Update to changes.
7352         New ExplicitBlock invariants
7353         * statement.cs (Block.Explicit): New field.  It points to the
7354         immediately enclosing non-implicit block.
7355         (Block..ctor): Maintain the invariant.
7356         * cs-parser.jay: Take advantage of invariant.
7358         Introduce ExplicitBlock
7359         * statement.cs (ExplicitBlock): New.
7360         (ToplevelBlock): Derive from it.
7361         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
7362         sense of flag.
7363         (Block.Implicit): Update to changes.
7364         * cs-parser.jay: Update to changes.
7366         Remove unused field
7367         * codegen.cs (EmitContext.IsLastStatement): Remove.
7368         * statement.cs (Block.DoEmit): Update to changes.
7370 2007-05-25  Raja R Harinath  <rharinath@novell.com>
7372         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
7373         modifying current_block directly.
7375 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
7376         
7377         * class.cs: Implemented automatic properties (C# 3.0)
7378           Thanks to Marek for the help.
7380 2007-05-23  Raja R Harinath  <rharinath@novell.com>
7382         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
7383         variable as assigned, note also that all its components are
7384         assigned too.
7385         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
7387 2007-05-19  Marek Safar  <marek.safar@gmail.com>
7389         * anonymous.cs, class.cs: Emit Compiler generated attribute when
7390         member is marked as compiler generated.
7391         
7392         * decl.cs (MemberCore): Refactored ModFlags into property.
7394         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
7395         (Check): Check only accessibility modifiers.
7397 2007-05-18  Raja R Harinath  <rharinath@novell.com>
7399         Track all assignable slots in one bit array
7400         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
7401         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
7402         logic from VariableMap constructor here.  Use the same 'offset'
7403         variable that's later used for computing offsets of local
7404         variables.
7405         * flowanalysis.cs (UsageVector.parameters): Remove.
7406         (UsageVector): Update to changes.
7407         (VariableMap): Remove.
7409         Avoid creating ParameterMap in every block
7410         * statement.cs (Block.ParameterMap): Move ...
7411         (ToplevelBlock.ParameterMap): ... here.
7412         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
7413         only once.
7414         * flowanalysis.cs (FlowBranching.param_map): Remove.
7415         (FlowBranching.UsageVector): Update to changes.
7416         (FlowBranchingToplevel.CheckOutParameters): Likewise.
7418         * statement.cs (Block.CloneTo): Clone Toplevel field too.
7420         * expression.cs (ParameterReference): Distinguish between block
7421         where parameter was referenced and declared.
7423 2007-05-18  Marek Safar  <marek.safar@gmail.com>
7425         * flowanalysis.cs, statement.cs: Put back improved error handling.
7427 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
7428         
7429         * assign.cs:
7430         * expression.cs:
7431           Imporved object and collection initialization (C# 3.0).
7433 2007-05-15  Marek Safar  <marek.safar@gmail.com>
7435         A fix for bug #81380
7436         * expression.cs (Is.DoResolve): Only value types have constant `is'
7437         behaviour.
7439 2007-05-15  Raja R Harinath  <rharinath@novell.com>
7441         * statement.cs (ToplevelBlock.child): Remove.
7443 2007-05-15  Raja R Harinath  <harinath@gmail.com>
7445         Rationalize ResolveMeta: refactoring
7446         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
7447         out constant handling code into ...
7448         (Block.DoResolveConstants): ... this.
7450         Rationalize ResolveMeta: kill local_map
7451         * statement.cs (Block.local_map, Block.LocalMap): Remove.
7452         (Block.AssignableSlots): New.
7453         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
7454         for locals -- move code from VariableMap here.  Avoid unnecessary
7455         allocations.
7456         * flowanalysis.cs (FlowBranching.local_map): Remove.
7457         (FlowBranching..ctor): Use Block.AssignableSlots.
7458         (VariableMap): Remove unused constructors.
7460 2007-05-11  Raja R Harinath  <rharinath@novell.com>
7462         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
7464 2007-05-11  Marek Safar  <marek.safar@gmail.com>
7466         * typemanager.cs (IsFriendAssembly): Should not be called for building
7467         assembly.
7469 2007-05-09  Marek Safar  <marek.safar@gmail.com>
7471         * literal.cs (NullConstant): Print null in all cases.
7472         
7473         * expression.cs (Binary.ResolveOperator): Implemented delegate
7474          comparison based on C# 2.0 changes.
7476 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
7478         This code is contributed under the MIT X11 license
7479         
7480         The following enables support for several C# 3.0 language features:
7481         
7482         * cs-tokenizer.cs: Added support for the "var" keyword.
7483         
7484         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
7485           Added VarExpr class to facilitate type inferencing.
7486         
7487         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
7488           to support anonymous types.
7489         
7490         * assign.cs: Added support for type inferencing and initialization.
7491         
7492         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
7493         
7494         * expression.cs: Added implicit array support to ArrayCreation.
7495           Added 5 types and 1 interface:
7496           
7497           IInitializable                Implementing classes can inject initializing
7498                                         statements after object instantiation.
7499           
7500           Initializer                   Stores data for object initialization.
7501           
7502           AnonymousType                 An expression for anonymous types.
7503           
7504           AnonymousTypeParameter        Stores data about an anonymous type's field.
7505           
7506           NewInitialize                 An expression for object initialization.
7507           
7508           CollectionInitialize          An expression for collection initialization.
7509         
7510         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
7511           statements.
7513 2007-05-06  Marek Safar  <marek.safar@gmail.com>
7515         A fix for bug #81500
7516         * cs-tokenizer.cs: Add special handling for coalescing operator.
7518 2007-05-06  Marek Safar  <marek.safar@gmail.com>
7520         A fix for bug #81529
7521         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
7522         its value from base class until it is redefined.
7524 2007-05-02  Raja R Harinath  <rharinath@novell.com>
7526         Fix regression in cs0631-3.cs
7527         * cs-parser.jay (operator_declarator): Add opt_attributes to error
7528         fallback.  Make error fallback catch more cases.
7530 2007-05-01  Miguel de Icaza  <miguel@novell.com>
7532         * cs-parser.jay: Allow parameters in operator declarations to have
7533         attributes. 
7535 2007-04-27  Miguel de Icaza  <miguel@novell.com>
7537         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
7538         exists. 
7540         * lambda.cs (ContextualReturn.Resolve): An expression is valid
7541         inside the ContextualReturn, it does not have to be an
7542         ExpressionStatement. 
7544 2007-04-24  Miguel de Icaza  <miguel@novell.com>
7546         * lambda.cs (ContextualReturn.Resolve): if the return type is not
7547         set, set it.
7549 2007-04-23  Miguel de Icaza  <miguel@novell.com>
7551         * anonymous.cs (AnonymousContainer): split the virtual Resolve
7552         method in two methods: ResolveNoDefine and Resolve.
7554         ResolveNoDefine will stop just after ResolveTopBlock has been
7555         called.   
7557         Resolve will then continue by creating a method and issuing the
7558         call to method.Define ().
7560         (AnonymousMethod): Split and implement the new Resolve and
7561         ResolveNoDefine as well.
7563         * lambda.cs (LambdaExpression): Split the anonymous method
7564         resolution code into a separate routine (CoreCompatibilityTest)
7565         from DoCompatibleTest.
7567         (LambdaExpression.TryBuild): New method, this method tries to
7568         build the LambdaExpression with the given set of types to be used
7569         as the types for the various parameters of the lambda expression. 
7571         If the compilation succeed with the given types, the infered type
7572         of the Anonymous method is returned, otherwise null is returned.
7574 2007-04-23  Marek Safar  <marek.safar@gmail.com>
7576         A fix for bug #81414
7577         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
7579 2007-04-22  Miguel de Icaza  <miguel@novell.com>
7581         * cs-tokenizer.cs: Change various identifiers here from the
7582         camelCasing to the recommended Linux-like style for instance
7583         variables from the Coding Guidelines. 
7585 2007-04-19  Martin Baulig  <martin@ximian.com>
7587         * convert.cs
7588         (Convert.ImplicitReferenceConversionCore): Allow conversions from
7589         System.Enum to System.ValueType.
7591 2007-04-13  Martin Baulig  <martin@ximian.com>
7593         Rewrote implicit reference conversions.  We need to distinguish
7594         between implicit reference conversions (13.1.4) and implicit
7595         boxing conversions (13.1.5).
7597         According to the spec, there's an an implicit conversion
7598         "From a one-dimensional array-type S[] to IList<T> and base
7599         interfaces of this interface, provided there is an implicit
7600         reference conversion from S to T."  Note that this does not
7601         include boxing conversions.
7603         * convert.cs
7604         (Convert.ImplicitTypeParameterBoxingConversion): New method.
7605         (Convert.ImplicitReferenceConversion): Split into
7606         ImplicitReferenceConversionCore() and
7607         ImplicitBoxingConversionExist().
7608         (Convert.ImplicitReferenceConversionExists): Use the new
7609         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
7611 2007-04-12  Martin Baulig  <martin@ximian.com>
7613         * convert.cs (Convert.ImplicitReferenceConversion): Move the
7614         `TypeManager.null_type' checks up to the top of the method.
7616 2007-04-11  Marek Safar  <marek.safar@gmail.com>
7618         A fix for bug #81350
7619         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
7620         extension methods.
7622 2007-04-11  Martin Baulig  <martin@ximian.com>
7624         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
7625         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
7626         to make this work for generic classes; fixes #79561.
7628 2007-04-11  Martin Baulig  <martin@ximian.com>
7630         * expression.cs (As): Add support for nullable types; fixes #79371.
7632 2007-04-11  Martin Baulig  <martin@ximian.com>
7634         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
7635         `type.FullName' is null; fixes #80243.
7637 2007-04-11  Martin Baulig  <martin@ximian.com>
7639         * expression.cs (Invocation.IsApplicable): Don't modify the method
7640         if type inference succeeded, but the method was not applicable.
7641         Fixes #81250.
7643 2007-04-10  Marek Safar  <marek.safar@gmail.com>
7645         A fix for bug #81324
7646         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
7647         internal and external namespaces containers.
7649 2007-04-10  Martin Baulig  <martin@ximian.com>
7651         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
7652         TypeManager.DropGenericMethodArguments() so we also call
7653         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
7655 2007-04-10  Martin Baulig  <martin@ximian.com>
7657         * iterators.cs (Iterator.CreateIterator): Don't crash if
7658         `method.ReturnType' is null.  This happens if something went wrong
7659         while resolving that typ (we already reported an error in this case).
7661 2007-04-10  Martin Baulig  <martin@ximian.com>
7663         * expression.cs (New.DoResolve): Don't call CheckComImport() on
7664         generic interfaces; report the CS0144 directly.
7666 2007-04-10  Martin Baulig  <martin@ximian.com>
7668         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
7669         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
7671 2007-04-10  Martin Baulig  <martin@ximian.com>
7673         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
7675 2007-04-09  Raja R Harinath  <rharinath@novell.com>
7677         A better fix
7678         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
7679         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
7681         Fix #81338
7682         * statement.cs (For.Resolve): If resolution fails, use
7683         KillFlowBranching.
7685 2007-04-08  Marek Safar  <marek.safar@gmail.com>
7687         * anonymous.cs (MakeName): Make faster and zero-based.
7688         (VerifyExplicitParameterCompatibility): Back to mode where generic
7689         parameter is ignored.
7690         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
7692         * class.cs (EmitType): Method can emit another new method.
7694         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
7696         * driver.cs: Updated.
7698         * lambda.cs: Reuse predefined empty parameters.
7700         * parameter.cs: Updated
7702         * support.cs: Implemented InflateTypes.
7704         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
7705         (InitSystemCore): Introduced to isolate 3.0 dependencies.
7707 2007-04-03  Martin Baulig  <martin@ximian.com>
7709         Fix #80632.
7711         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
7712         version of TypeManager.IsOverride() which also works with generic
7713         types.  
7715 2007-04-03  Martin Baulig  <martin@ximian.com>
7717         Fix #81044.
7719         * convert.cs
7720         (Convert.ExplicitReferenceConversion): We need to cast when
7721         converting from IList<T> to S[].
7723 2007-04-01  Marek Safar  <marek.safar@gmail.com>
7725         * decl.cs (FindExtensionMethods): Consider all candidates with same name
7726         at this level.
7727         
7728         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
7730 2007-03-31  Marek Safar  <marek.safar@gmail.com>
7732         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
7733         argument and return type inferring.
7735         * codegen.cs (InferReturnType): Flag whether return can be inferred.
7736         (ReturnType): Turned to property.
7738         * statement.cs (Return): Implemented return type inferring.
7740         * support.cs (ReflectionParameters): Use local types if possible.
7742 2007-03-30  Raja R Harinath  <rharinath@novell.com>
7744         * flowanalysis.cs (FlowBranching.Reachability): Remove.
7745         (FlowBranching.UsageVector): Update to changes.
7747         Prepare to kill 'Reachability'
7748         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
7749         argument of constructor.
7751 2007-03-29  Raja R Harinath  <rharinath@novell.com>
7753         Prepare to kill 'Reachability'
7754         * flowanalysis.cs (UsageVector.is_unreachable): New.
7755         (UsageVector): Update to maintain 'is_unreachable' in parallel to
7756         'reachability', and verify they're consistent.
7758         Fix #81121
7759         * expression.cs (New.EmitStatement): Handle type parameters here too.
7761 2007-03-29  Martin Baulig  <martin@ximian.com>
7763         Fix #79148.
7765         * anonymous.cs
7766         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
7767         CompilerGeneratedClass.
7768         (ScopeInfo.EmitScopeInstance): Make this protected.
7769         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
7770         `ec.CurrentAnonymousMethod.Scope == Scope'.
7772         * statement.cs (Block.ScopeInfo): Make this a property.
7774 2007-03-27  Raja R Harinath  <harinath@gmail.com>
7776         Prepare to kill 'Reachability'
7777         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
7778         (FlowBranching.UsageVector.Reachability): Remove property.
7779         (FlowBranching.UsageVector.IsUnreachable): New property.
7780         (FlowBranching.UsageVector.ResetBarrier): New.
7781         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
7782         * codegen.cs, statement.cs: Update to changes.
7784 2007-03-27  Martin Baulig  <martin@ximian.com>
7786         Fix #81209.
7788         * decl.cs
7789         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
7790         generic types.
7792 2007-03-26  Raja R Harinath  <rharinath@novell.com>
7794         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
7795         instead of TriState.  Remove all mention of TriState.
7797         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
7798         replaced by a boolean.  Add boolean 'is_unreachable' field, check
7799         and maintain invariants.
7801 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7803         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
7805 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7807         * expression.cs: Stop using obsolete 2.0 opcodes.
7809 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7811         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
7812         one of the latests Martin's fixes.
7814 2007-03-23  Miguel de Icaza  <miguel@novell.com>
7816         * expression.cs: On BigEndian systems, swap the bytes, temporary
7817         solution until we get a new bitconverter class.
7819 2007-03-23  Martin Baulig  <martin@ximian.com>
7821         Fix #81158.
7823         * decl.cs (MemberCache.AddMembers): Add generic methods both as
7824         "Method" and "Method`1".  Normally, a cache lookup is done on the
7825         "Method" form (ie. without the generic arity), but this one makes
7826         lookups on the full form work as well.
7828 2007-03-22  Raja R Harinath  <rharinath@novell.com>
7830         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
7831         unused properties.
7833 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
7834         * class.cs: 
7835         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
7836         ordered_member_list, to TypeBuilder to store members to be defined
7837         in the order they were parsed in.
7838         - ordered_explicit_member_list contains all properties indexers
7839           and methods that are defined as explicit implementation of an
7840           interface or base class.
7841         - ordered_member_list contains all properties indexers and methods
7842           that are not defined as explicit implementation of an interface
7843           or base class.
7845         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
7846         functionality in these removed classes has been replaced with 
7847         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
7848         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
7850         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
7851         to CheckForDuplications inside GetMethod and SetMethod Define Method
7852         to handle method property and indexer name conflicts.
7854         Fixes #79434
7856         All code is contributed under the MIT/X11 license.
7858 2007-03-20  Martin Baulig  <martin@ximian.com>
7860         * class.cs (TypeContainer.Interfaces): Removed; they're now
7861         included in `TypeContainer.Types'.
7863 2007-03-20  Martin Baulig  <martin@ximian.com>
7865         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
7867         * class.cs (TypeContainer.CreateType): New public method.  This is
7868         now called before DefineType() to create the TypeBuilders.
7869         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
7870         has already been created by CreateType().
7871         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
7872         don't resolve our base classes here; this has been moved into
7873         DefineBaseTypes().  We're now called from CreateType().
7874         (TypeContainer.DefineBaseTypes): New private method; resolve our
7875         base classes here.  We're now called from DefineType().
7877         * rootcontext.cs
7878         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
7879         our types first to create all the TypeBuilders.  After that, call
7880         TypeContainer.DefineType() on all the types which'll resolve their
7881         base classes and setup the resolve order.
7883 2007-03-20  Martin Baulig  <martin@ximian.com>
7885         * class.cs (TypeContainer.Enums): Removed; they're now included in
7886         `TypeContainer.Types'.  
7888 2007-03-20  Martin Baulig  <martin@ximian.com>
7890         * class.cs
7891         (TypeContainer.DefineType): Don't call ResolveMembers() here.
7892         (TypeContainer.DoResolveMembers): Call DefineType() on our
7893         `compiler_generated' classes; moved here from DefineNestedTypes().
7895         * rootcontext.cs
7896         (RootContext.ResolveTree): Call ResolveMembers() on all
7897         TypeContainer's in the `type_container_resolve_order'.
7899 2007-03-19  Marek Safar  <marek.safar@gmail.com>
7901         * class.cs: Use corlib to handle InternalMethodImplAttribute.
7903 2007-03-17  Marek Safar  <marek.safar@gmail.com>
7905         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
7906         implementation flags.
7908 2007-03-17  Marek Safar  <marek.safar@gmail.com>
7910         * class.cs: More optimizations for type parameters.
7912 2007-03-15  Marek Safar  <marek.safar@gmail.com>
7914         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
7916         * ecore.cs, parameter.cs: More common code for both corlibs.
7918         * typemanager.cs (IsGenericMethod): Simplified.
7920 2007-03-15  Raja R Harinath  <rharinath@novell.com>
7922         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
7923         'returns'.
7924         * statement.cs, iterators.cs, lambda.cs: Update to changes.
7926         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
7927         unconditionally.  Simplify explanation.
7928         (Try.Resolve, Using.Resolve): Likewise.
7930 2007-03-15  Martin Baulig  <martin@ximian.com>
7932         Fix #80731.
7934         * decl.cs (DeclSpace): If we're a partial class, use our
7935         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
7937 2007-03-15  Raja R Harinath  <rharinath@novell.com>
7939         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
7940         'throws'.
7941         (FlowBranching.UsageVector): Update to changes.
7942         (FlowBranching.MergeSiblings): Likewise.
7943         * statement.cs: Likewise.
7945 2007-03-15  Martin Baulig  <martin@ximian.com>
7947         Fix #79302.
7949         * decl.cs
7950         (MemberCache): Added a special .ctor for type parameters.
7952         * typemanager.cs
7953         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
7954         `MemberCache'.  
7956 2007-03-09  Martin Baulig  <martin@ximian.com>
7958         * enum.cs (Enum): Make this a TypeContainer.
7959         (EnumMember): Derive from `Const'.
7961         * const.cs
7962         (Const.DoResolveValue): New protected virtual method; move most of
7963         the functionality of ResolveValue() here so we can override it in
7964         `EnumMember'.
7965         (Const.CreateConstantReference): Make this virtual.
7967         * class.cs (Kind): Add `Kind.Enum'.
7968         (TypeContainer.Emit): Don't emit the enums here; they're already
7969         in the `RootContext.typecontainer_resolve_order'.
7971         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
7972         here; they're already in the `typecontainer_resolve_order'.
7974         * ecore.cs (EnumConstant.ConvertImplicitly): Add
7975         TypeManager.DropGenericTypeArguments().
7977         * typemanager.cs
7978         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
7979         (TypeManager.IsEnumType): Likewise.
7980         (TypeManager.EnumToUnderlying): Likewise.
7981         (TypeManager.IsEqual): Add support for enums.
7983 2007-03-12  Raja R Harinath  <rharinath@novell.com>
7985         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
7986         DefaultParameterValueAttribute to be undefined, say if System.dll
7987         is not referenced.
7989 2007-03-11  Marek Safar  <marek.safar@gmail.com>
7991         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
7992         any mscorlib.
7994 2007-03-10  Marek Safar  <marek.safar@gmail.com>
7996         * class.cs, parameter.cs: Unified parameters verification.
7998 2007-03-08  Martin Baulig  <martin@ximian.com>
8000         * cs-parser.jay (constructor_header): Pass the location to the
8001         newly created TopLevelBlock.
8003 2007-03-07  Martin Baulig  <martin@ximian.com>
8005         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
8007 2007-03-06  Miguel de Icaza  <miguel@novell.com>
8009         * convert.cs (ExplicitReferenceConversionExists): Sync this method
8010         with the changes from David, fixes the build.
8012 2007-03-05  David Mitchell  <dmitchell@logos.com>
8014         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
8015         and its base interfaces to a one-dimensional array type S[],
8016         provided there is an implicit or explicit reference conversion
8017         from S to T.
8019 2007-03-03  Marek Safar  <marek.safar@gmail.com>
8021         * cs-tokenizer.cs: Implemented basic linq grammar.
8023         * driver.cs: Set linq lang version on demand.
8025 2007-02-26  Marek Safar  <marek.safar@gmail.com>
8027         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
8029 2007-02-25  Marek Safar  <marek.safar@gmail.com>
8031         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
8032         (Fixes #80455)
8034         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
8035         here.
8036         Check property and event extern attributes.
8038         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
8039         charset.
8041 2007-02-24  Marek Safar  <marek.safar@gmail.com>
8043         A fix for bug #80407
8044         * ecore.cs: Don't report ambiguity error when methods have same parent.
8046 2007-02-23  Marek Safar  <marek.safar@gmail.com>
8048         A fix for bug #80878
8049         * class.cs, cs-parser.jay: Event property can host anonymous methods.
8051 2007-02-22  Marek Safar  <marek.safar@gmail.com>
8053         * attribute.cs: Enable ExtensionAttribute presence test.
8055 2007-02-22  Marek Safar  <marek.safar@gmail.com>
8057         * class.cs: Warn about missing GetHashCode only when Equals is override.
8059         * decl.cs: Check accessibility of type arguments.
8061         * typemanager.cs: Correctly report nullable array.
8063 2007-02-20  Marek Safar  <marek.safar@gmail.com>
8065         * class.cs, report.cs: Capture more details when things go wrong.
8067 2007-02-20  Marek Safar  <marek.safar@gmail.com>
8069         A fix for bug #80650
8070         * cs-parser.jay: Anonymous container starts at constructor declaration
8071         and not at block beginning because it has to be usable in constructor
8072         initializer.
8074         * statement.cs: Use context location and not block one for error reporting.
8076 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8078         A fix for bug #78712
8079         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
8080         too.
8082 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8084         A fix for bug #80493 by Atsushi Enomoto
8085         * cs-parser.jay: Ignore invalid attribute target.
8087 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8089         * cs-tokenizer.cs: Ignore '\0' as white space character.
8091 2007-02-17  Miguel de Icaza  <miguel@novell.com>
8093         * cs-parser.jay: Add support for lambda expressions to the mcs
8094         compiler as well.
8096         * lambda.cs: Only clone when we are probing, not on the final call
8097         (Compatible is the final call). 
8099         * statement.cs (CloneContext): Introduce class to provide block
8100         remapping during clone.
8102         All statements Clone themselves now.
8104         (Clone): special handling for blocks, when we clone a block, we
8105         register the block inside this routine, as children of the block
8106         might trigger a lookup. 
8107         
8108         * expression.cs: Add support for CloneContext in all expressions. 
8109         
8110 2007-02-17  Marek Safar  <marek.safar@gmail.com>
8112         A fix for bug #80493
8113         * statement.cs: Report ambiguous warning when interfaces are not related.
8115 2007-02-15  Marek Safar  <marek.safar@gmail.com>
8117         C# 3.0 extension methods.
8119         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
8120         cannot be used directly.
8122         * class.cs (Class.Emit): Emit extension attribute if any class method
8123         is extension method.
8124         (Method.Define): Add basic extension method validation conditions.
8125         (Method.Emit): Emit extension attribute for method.
8127         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
8128         extension method exists. Currently we follow same approach as Microsoft
8129         does, emit even if a method or a class are private but this can change
8130         later.
8132         * cs-parser.jay: Add handling of `this' keyword in method parameters
8133         context.
8135         * decl.cs (DeclSpace.IsStaticClass): New property.
8136         (MemberCache.FindExtensionMethods): Looks for extension methods with
8137         defined name and extension type.
8139         * doc.cs: Updated after OverloadResolve changes.
8141         * driver.cs: Add new soft reference to System.Core.dll.
8143         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
8144         (ExtensionMethodGroupExpr): Represents group of extension methods.
8146         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
8147         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
8148         to MethodGroupExpr and made non-static for easier customization.
8149         (Invocation.DoResolve): Add extension method lookup when no standard
8150         method was found.
8151         (MemberAccess.DoResolve): Try extension methods if no member exists.
8153         * modifiers.cs: Add METHOD_EXTENSION modifier.
8155         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
8156         as well as candidate extension type.
8157         (ComputeNamespaces): When assembly constains extension methods registers
8158         them.
8159         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
8160         extension method lookup.
8161         (Namespace.LookupExtensionMethod): Looks for extension method in this
8162         namespace.
8163         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
8164         find a method which matches name and extensionType.
8166         * parameter.cs (Parameter): Add This modifer.
8167         (HasExtensionMethodModifier): New property.
8168         (Resolve): Add extension parameter check.
8169         (ModFlags): turned to property to exclude this modifier as it is not real
8170         parameter modifier.
8171         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
8173         * support.cs (ParameterData): Add ExtensionMethodType.
8174         (ReflectionParameters): Implemented ExtensionMethodType interface property.
8176         * typemanager.cs: Add type and ctor extension attribute type.
8178 2007-02-15  Miguel de Icaza  <miguel@novell.com>
8180         * report.cs (DisableErrors, EnableErrors): used to prevent error
8181         output when we are "trying" to compile various methods with
8182         different types. 
8184         * ecore.cs (Expression): Add Clone method that calls the virtual
8185         CloneTo method.  The current CloneTo method in Expression throws
8186         an exception so we can track down all the places where this must
8187         be implemented (not using abstract, because that would be a lot of
8188         up-front-work before we can start testing the implementation
8189         idea). 
8191         Important: we only need Clone capabilities for expressions created
8192         by the parser, as the expressions we will be cloning are
8193         expressions in the pre-resolved state.   This vastly simplifies
8194         the work required. 
8195         
8196         (SimpleName): Add CloneTo that does nothing.
8197         (EmptyCast): Add CloneTo.
8198         
8199         * expression.cs (Binary): Implement CloneTo.
8200         (Invocation.IsApplicable): Store the current ec in
8201         EmitContext.TempEc and restore it on return.  This is used so we
8202         do not have to sprinkle hundres of methods with an extra
8203         EmitContext, we know that the only user is the lambda expression
8204         ImplicitConversionExists code. 
8205         
8206         (Argument): Add Cloning capabilities.
8207         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
8208         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
8209         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
8210         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
8211         IndexerAccess): Add Clone capability.
8213         (LocalVariableReference, This): TODO: needs cloned Block mapping.
8215         (Argument): Add cloning capability.
8217         * assign.cs (Assign): Implement CloneTo.
8219         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
8220         
8221         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
8222         version by calling Convert with the EmitContext (that we are
8223         currently storing in ec, this is not great, but will do for now,
8224         to avoid passing EmitContext parameters to hundreds of functions
8225         that do not need them now).
8227         (SetExpression): Remove, it is not needed.
8228         
8229         (ContextualReturn): Implement CloneTo.
8231         * statement.cs (Statement): Implement cloning infrastructure,
8232         similar to expressions.
8234         (Block): Partial implementation of Clone for statements.
8236         (Return): Implement clone.
8237         
8238         * constant.cs (Constant.CloneTo): New method, does nothing.
8240         * codegen.cs (TempEc): Add a static EmitContext as a temporary
8241         solution, until we decide how to exactly do this.  
8242         
8243 2007-02-14  Marek Safar  <marek.safar@gmail.com>
8245         A fix for bug #80493
8246         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
8247         a property is override we need to use second accessor.
8249 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8251         A fix for bug #80418
8252         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
8253         methods.
8255 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8257         Another fix for bug #80749
8258         * pending.cs: Abstract class has priority over interfaces.
8260 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8262         Another fix for bug #80749
8263         * pending.cs: Abstract class has priority over interfaces.
8265 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8267         Another fix for bug #80749
8268         * pending.cs: Abstract class has priority over interfaces.
8270 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8272         Another fix for bug #80749
8273         * pending.cs: Abstract class has priority over interfaces.
8275 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8277         * class.cs Better error message.
8279         * driver.cs: Add shorter versions of -optimize option.
8281 2007-02-13  Martin Baulig  <martin@ximian.com>
8283         * class.cs (Constructor.Emit): Check the return value of
8284         ec.ResolveTopBlock() and return on error.
8286 2007-02-13  Raja R Harinath  <rharinath@novell.com>
8288         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
8289         message to fix error message regression.
8291 2007-02-12  Marek Safar  <marek.safar@gmail.com>
8293         * delegate.cs: Delegate creation expression cannot be of Nullable type.
8295 2007-02-12  Marek Safar  <marek.safar@gmail.com>
8297         A fix for bug #80749
8298         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
8299         its parent container.
8301         * class.cs (DefineFieldInitializers): Each initializer can has different
8302         resolve context.
8304         * const.cs: Updated.
8306 2007-02-11  Miguel de Icaza  <miguel@novell.com>
8308         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
8309         now all the heavy lifting to check that embedded statements or
8310         expressions have the right form is done in the ContextualReturn.
8312         (ContextualReturn): New class.  
8314         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
8315         method that can be invoked to report 201, so we do not replicate
8316         this everywhere.
8318         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
8319         
8320         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
8321         treating tabs as spaces. 
8323 2007-02-09  Marek Safar  <marek.safar@gmail.com>
8325         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
8326         * assign.cs: Use full implicit conversion for right side check.
8328 2007-02-09  Marek Safar  <marek.safar@gmail.com>
8330         * statement.cs (Switch): Switch over boolean type is not standardized.
8332 2007-02-08  Marek Safar  <marek.safar@gmail.com>
8334         A fix for bug #80755
8335         * decl.cs (FindBaseEvent): Don't use method cache for events.
8337 2007-02-07  Marek Safar  <marek.safar@gmail.com>
8339         * cs-parser.jay: Better syntax error handling.
8341         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
8342         instead of underlying type value.
8344 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8346         * driver.cs: Check define identifier before is registered.
8348         * namespace.cs: Use existing error message.
8350         * report.cs: New warning.
8352 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8354         A fix for bug #80742
8355         * expression.cs: Delegate Invoke method can be called directly.
8357 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8359         A fix for bug #80676
8360         * class.cs (IsEntryPoint): The Main method can have params modifier.
8362 2007-02-04  Miguel de Icaza  <miguel@novell.com>
8364         * parameter.cs (Parameter, Parameters): Add Clone method.
8366         * anonymous.cs (Compatible): Turn method into virtual method, so
8367         LambdaExpression can implement a different behavior.
8369         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
8370         out the basic checking here, so it can be used by
8371         LambdaExpressions.
8372         
8373         * lambda.cs: Introduce "Compatible" function that will do the
8374         heavy lifting.
8376 2007-02-02  Marek Safar  <marek.safar@gmail.com>
8378         * attribute.cs: Unified one error message.
8380         * class.cs (Class): Use type attributes and not properties to test static
8381         class.
8382         (IsEntryPoint): Don's pass local variable.
8384         * convert.cs: Removed duplicate check.
8386         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
8388         * driver.cs: Don't crash when soft reference does not exist.
8390         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
8391         (UsingEntry): Removed redundant allocation.
8393         * parameter.cs: Add fast path for type parameters.
8395         * support.cs: Don't allocate attribute when it's not used.
8397 2007-01-30  Miguel de Icaza  <miguel@novell.com>
8399         * anonymous.cs
8400         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
8401         this into a virtual method, so we can override it in LambdaExpression.
8403         * driver.cs: Improve diagnostics in case of failure. 
8405         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
8406         write a function that is slightly more complex and that parses:
8408         type identifier [, type identifier]* )
8410         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
8411         this expression:
8413                 (canEmpty ? i >= 0 : i > 0)
8415 2007-01-30  Raja R Harinath  <rharinath@novell.com>
8417         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
8418         exception on possibly valid code.
8420 2007-01-29  Raja R Harinath  <rharinath@novell.com>
8422         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
8423         Push/PopPosition.
8424         (parse_opt_type_arguments): Remove.  It's almost the same as
8425         parse_less_than.
8426         (parse_namespace_or_typename): Use parse_less_than.
8428 2007-01-28  Miguel de Icaza  <miguel@novell.com>
8430         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
8431         this bug took a few hours to find, because the state saved and
8432         restored by PushPosition and PopPosition was ignoring the state of
8433         parse_generic_less_than.
8435         I can also now remove the handling of OP_LT and OP_GT, this solves
8436         the big mistery.
8437         
8438         * cs-tokenizer.cs: store the location for the ARROW token, we use
8439         that in the parser.
8441         (PushPosition, PopPosition): save/restore also `current_token',
8442         restore `parse_generic_less_than' (was missing).
8444         (parse_opt_type_arguments): use parse_type, not
8445         parse_namespace_or_typename to parse types.
8447         * lambda.cs: Empty new file, will eventually have the lambda
8448         expression implementation.
8450         * lambda.test: used to test the internal tokenizer. 
8452         * report.cs (FeatureIsNotISO1): Rename from
8453         FeatureIsNotStandardized, because it was about the language level
8454         (1 vs 2) it was not about standarization.
8456         (FeatureRequiresLINQ): New.
8458         * support.cs (SeekableStreamReader): Only require that the reader
8459         is a TextReader, not a StreamReader, so we can plug StringReader. 
8461         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
8462         given position in the input stream the following tokens can be
8463         parsed as a type followed by an identifier.
8465         (is_punct): after a '(' if parse_type_and_parameter returns true,
8466         then return a special token OPEN_PARENS_LAMBDA which is used to
8467         avoid reduce/reduce errors in the grammar for the
8468         lambda_expression rules.
8470         (parse_type): implement a type parser inside the
8471         tokenizer, the parser only returns true or false depending on
8472         whether the input at a given position can be parsed as a type.
8474         (peek_token): new method used during type parsing.
8476 2007-01-28  Raja R Harinath  <rharinath@novell.com>
8478         Fix #80531
8479         * anonymous.cs (ScopeInfo.InflateParameters): New.
8480         (AnonymousContainer.Resolve): Use it to redirect types of
8481         delegate parameters.
8483 2007-01-27  Raja R Harinath  <rharinath@novell.com>
8485         Fix #80530
8486         * expression.cs (Error_InvalidArguments): Don't use two different
8487         messages for CS1503.  Use ExtraInformation and
8488         SymbolRelatedToPreviousError instead.
8490         Fix #80358
8491         * decl.cs (DeclSpace.initialize_type_params): Don't access
8492         'type_params' of a partial class directly.
8494 2007-01-26  Miguel de Icaza  <miguel@novell.com>
8496         * constant.cs: Removed a handful of out-of-range checks that were
8497         not necessary. 
8499 2007-01-25  Marek Safar  <marek.safar@gmail.com>
8501         * expression.cs (CheckUselessComparison): Add additional check for char
8502         constants.
8504         * namespace.cs: Fixed typo.
8506 2007-01-23  Miguel de Icaza  <miguel@novell.com>
8508         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
8509         gone, instead we inline the test, preventing the needless casts to
8510         longs, ulongs and doubles for the parameters, avoiding calls to
8511         methods that overchecked stuff, and instead inlined things
8512         nicely. 
8514 2007-01-20  Marek Safar  <marek.safar@gmail.com>
8516         * cs-parser.jay: Better parameter error handling.
8518 2007-01-17  Marek Safar  <marek.safar@gmail.com>
8520         A fix for bug #80368, #80522
8521         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
8522         whether array initializer contains constants only.
8523         (ArrayCreation.Emit): Use better formula to decide when
8524         are array initializers for static initialization.
8525         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
8526         have to emit even constants otherwise they are pre-initialized.
8528 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
8529             Raja R Harinath  <rharinath@novell.com>
8531         Fix emit order of 'get' vs. 'set'.
8532         * support.cs (Accessors): New.
8533         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
8534         Note the order in which accessors are declared in the source.
8535         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
8536         Refactored from Property.Define and Indexer.Define.
8537         (PropertyBase.DefineAccessors): New helper that calls the above in
8538         appropriate order as noted by the parser.
8539         (Property.Define, Indexer.Define): Update to changes.
8540         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
8542 2007-01-17  Raja R Harinath  <rharinath@novell.com>
8544         Fix cs0029-6.cs and gcs0029-2.cs (regression)
8545         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
8546         there's an implicit conversion from the current type to the target
8547         type before converting the underlying constant.
8549 2007-01-16  Marek Safar  <marek.safar@gmail.com>
8551         * const.cs (ResolveValue): Updated after constant conversion was made more
8552         generic.
8554         * constant.cs (GetAttributableValue): constant to object conversion is
8555         used for attributes only.
8556         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
8557         constant conversions.
8558         (LongConstant.ConvertImplicitly): Ditto.
8560         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
8561         (ImplicitConversionStandard): Handle constant conversion as extra step.
8562         It solves the issue when constant conversion was called indirectly like
8563         inside array initializer and constant folding was skipped.
8565         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
8566         this change.
8568         * statement.cs(ImplicitConversionStandard): Updated after constant
8569         conversion was made more generic.
8571 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
8573         * expression.cs (As.DoResolve): Use GenericConstraints instead of
8574         Constraints, solves the problem where the compiler incorrectly
8575         reported that a type parameter was not constrained to a class (Bug
8576         80518)
8578 2007-01-14  Marek Habersack  <grendello@gmail.com>
8580         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
8582 2007-01-14  Marek Safar  <marek.safar@gmail.com>
8584         A fix for bug #80368
8585         * assign.cs (FieldInitializer): New class implements field
8586         initializer statement.
8588         * attribute.cs: Update after FieldMember rename.
8590         * class.cs (PropertyBasedMember): New common class for property based
8591         types.
8592         (InterfaceMemberBase): New base class for all members which can be used as
8593         an interface members.
8594         (MethodCore): Moved really common code to InterfaceMemberBase.
8595         (Method.Define): Equal and GetHasCode detection is relevant for methods
8596         only.
8597         (MethodData.Define): Don't assume that public event implements an
8598         interface automatically.
8599         (MethodData.DefineMethodBuilder): Issue an error even if only extern
8600         modifier is used.
8601         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
8602         (FieldMember): Merged with FieldBase.
8603         (EventProperty.AEventPropertyAccessor): New specialization to check whether
8604         event extern modifier can be used.
8605         (EventField.EventFieldAccessor): Moved event field specific code here.
8606         (Event.AllowedModifiers): Even event can be extern.
8607         (Event.FindOutBaseMethod): New override specific to events.
8608         (Indexer.parameters): Reintroduce parameters because base class holds
8609         only properties common data.
8610         (Indexer.CheckForDuplications): Indexers are threated as methods so we
8611         need do extra parameters check.
8613         * const.cs: Update after FieldMember rename.
8615         * decl.cs (MemberCache.FindBaseEvent): New method.
8617         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
8618         to reflect that indexer is now derived from PropertyBased.
8620         * ecore.cs (GetMemberType): Made public.
8621         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
8622         obsolete event.
8624         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
8625         
8626         * typemanager.cs (CSharpSignature): Correctly print event accessors.
8627         (RegisterEvent): Removed.
8628         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
8629         (GetPrivateFieldOfEvent): Renamed to GetEventField.
8631 2007-01-11  Raja R Harinath  <rharinath@novell.com>
8633         Fix #80249
8634         * statement.cs (CollectionForeach.TryType): Prefer generic
8635         GetEnumerator over non-generic variant.  Fix code to follow comments.
8637 2007-01-09  Raja R Harinath  <rharinath@novell.com>
8639         Fix #80446
8640         * support.cs (ReflectionParameter): Don't use an invalid index on
8641         the generic parameter data.
8643 2007-01-08  Miguel de Icaza  <miguel@novell.com>
8645         * driver.cs: Just add a tiny bit of infrastructure.
8647 2007-01-02  Marek Safar  <marek.safar@gmail.com>
8649         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
8650         where field type is struct from current assembly.
8651         
8652         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
8653         it is possible.
8655 2007-01-02  Marek Safar  <marek.safar@gmail.com>
8657         A fix for bug #80381
8658         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
8659         the core types.
8661         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
8662         messages.
8663         (Namespace.LookupType): Always use core types from corlib when speficied.
8665         * report.cs: A new warning.
8667         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
8668         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
8669         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
8671         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
8672         (InitCoreTypes): Set expression type of object_type and value_type
8673         immediately after lookup.
8675 2007-01-01  Miguel de Icaza  <miguel@novell.com>
8677         * cs-tokenizer.cs: Accept Pc class characters (Connector
8678         Punctuation) as valid identifiers.  Fixes #78259
8680         * expression.cs (Invocation.DoResolve): Moved the check for the
8681         use of `this' for doing method calls to the Invocation resolution
8682         step, after overload resolution has taken place instead of doing
8683         the check at the low-level `This.DoResolve' level.
8685         The `This.DoResolve'(appens before overload resolution, so it has
8686         no way of knowing if the method that will be called will be
8687         instace or static, triggering an erroneous report for cs0188 (Bug
8688         78113).
8690         We now do the check for instance method invocations after we know
8691         what method will be called.
8693         (This.CheckThisUsage): Move the actual use of this structure
8694         checking into its own method and expose it. 
8696         * Everywhere that called Error_ValueCannotBeConverted: pass a new
8697         EmitContext.
8699         Exceptions: Null.ConvertImplicitly,
8700         Constant.ImplicitConversionRequired as there are too many call
8701         sites for passing the ec. 
8703         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
8704         EmitContext, if the value is null, then we do not try to provide
8705         the extra information from the error (If a userdefined conversion
8706         exists, as UserDefinedConversion requires a non null-EmitContext).
8708         Fixes: #80347
8710 2006-12-30  Raja R Harinath  <rharinath@novell.com>
8712         * flowanalysis.cs (MyBitVector): Document some invariants.
8713         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
8714         introduced below, and add a couple of others, 
8716 2006-12-30  Marek Safar  <marek.safar@gmail.com>
8718         * attribute.cs (GetMethodObsoleteAttribute): Uses new
8719         GetPropertyFromAccessor and GetEventFromAccessor.
8720         
8721         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
8722         overrides non-obsolete one.
8723         (Indexer.Define): Error message has been moved to the parser.
8725         * cs-parser.jay: Better syntax errors handling.
8727         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
8728         when an invocation has no arguments.
8730         * ecore.cs: Removed not used caching.
8732         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
8733         implementation.
8735         * report.cs: Add a new warning.
8737         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
8739         * typemanager.cs (enumeration_type): Removed.
8740         (CSharpSignature): Reuses IsSpecialMethod.
8741         (IsEqual): Hack for MS BCL.
8742         (GetPropertyFromAccessor): New method.
8743         (GetEventFromAccessor): New method.
8744         (IsSpecialMethod): Fixed to handle more cases.
8746 2006-12-30  Marek Safar  <marek.safar@gmail.com>
8748         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
8749         Made white spaces array static.
8751         * ecore.cs (RemoveGenericArity): Optimized.
8753         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
8754         10 times faster).
8755         (MyBitVector.initialize_vector): Simplified.
8757 2006-12-22  Miguel de Icaza  <miguel@novell.com>
8759         * ecore.cs: Am not entirely happy with this hack, but it seems to
8760         address the issue in 80257 (a small test case for
8761         CreativeDocs.NET). 
8763         I set the MethodGroupExpr.Type to an internal compiler type
8764         (itself in this case) to force the resolution to take place.   Why
8765         it does not take place with a null is beyond me.
8767 2006-12-20  Marek Safar  <marek.safar@gmail.com>
8769         A fix for bug #80288
8770         * expression.cs (ResolveOperator): Consider user defined conversion for
8771         logical and operator too.
8772         (EmitBranchable): Optimization for logical and when full constant folding
8773         could not be applied but one operand is constant.
8775 2006-12-19  Marek Safar  <marek.safar@gmail.com>
8777         * class.cs (GetClassBases): Write 5 times every day, will never use
8778         FullName for error reporting.
8780         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
8782 2006-12-19  Martin Baulig  <martin@ximian.com>
8784         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
8785         the symbol file info here.
8787 2006-12-18  Marek Safar  <marek.safar@gmail.com>
8789         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
8790         of `elseif' is taking then following sections are not taking.
8791         Fixes an issue reported on mono mailing list.
8793 2006-12-18  Marek Safar  <marek.safar@gmail.com>
8795         A fix for bug #80300
8796         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
8797         a caller is not taking.
8799 2006-12-18  Raja R Harinath  <rharinath@novell.com>
8801         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
8802         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
8803         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
8804         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
8805         * class.cs: Update to changes.
8807 2006-12-17  Marek Safar  <marek.safar@gmail.com>
8809         A fix for bug #79934
8810         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
8811         partial container.
8813         * class.cs (ResolveMembers): Register an iterator in current container and
8814         not in shared one.
8816 2006-12-16  Raja R Harinath  <rharinath@novell.com>
8818         Fix test-543.cs
8819         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
8820         satisfy a params annotated parameter.
8822 2006-12-16  Marek Safar  <marek.safar@gmail.com>
8824         A fix for bug #77014
8825         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
8826         paramters correctly and not rely on hacks in Parameters class.
8827         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
8828         at any possition.
8829         (Invocation.VerifyArgumentsCompat): Ditto.
8830         (Invocation.EmitArguments): Changed to correctly emit params arguments at
8831         any possition.
8833         * parameter.cs (HasParams): Don't assume that params is the last one.
8835         * support.cs (ReflectionParameters.ctor): Look for params attribute
8836         correctly.
8837         (ReflectionParameters.ParameterType): Removed hack when we returned last
8838         parameter for out of range parameters.
8839         (ParameterName, ParameterModifier): Ditto.
8841 2006-12-14  Marek Safar  <marek.safar@gmail.com>
8843         A fix for bug #79987
8844         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
8845         when assembly is not CLS compliant but type is. I have no idea why is this
8846         allowed.
8848         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
8850 2006-12-13  Miguel de Icaza  <miguel@novell.com>
8852         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
8853         in struct constructors, they are basically no-ops.
8855 2006-12-12  Marek Safar  <marek.safar@gmail.com>
8857         * cs-tokenizer.cs (Position): Save preprocessor status too.
8859 2006-12-12  Marek Safar  <marek.safar@gmail.com>
8861         A fix for bug #77794
8862         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
8864 2006-12-12  Marek Safar  <marek.safar@gmail.com>
8866         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
8867         Fixes #69299.
8868         (pp_expr): Report error for an invalid expression.
8869         (handle_preprocessing_directive): Simplified; add more error checking.
8871 2006-12-11  Marek Safar  <marek.safar@gmail.com>
8873         A fix for bug #74939
8874         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
8875         directives handling.
8877 2006-12-10  Marek Safar  <marek.safar@gmail.com>
8879         A fix for bugs #80093, and #75984
8880         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
8881         logic, it seems to me as it worked before "by coincidence".
8882         (xtoken): Simplified to use reworked handle_preprocessing_directive.
8883         (cleanup): Enabled endif check.
8885 2006-12-09  Marek Safar  <marek.safar@gmail.com>
8887         A fix for bug #80162
8888         * statement.cs (CollectionForeach.TryType): Generics and non-generics
8889         enumerators are never ambiguous.
8891 2006-12-08  Raja R Harinath  <rharinath@novell.com>
8893         Fix #80060
8894         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
8896 2006-12-06  Marek Safar  <marek.safar@gmail.com>
8898         A fix for bug #80144
8899         * class.cs (EventProperty.Define): Explicit implementation means
8900         that an even is used.
8902 2006-12-06  Marek Safar  <marek.safar@gmail.com>
8904         Fixes the operators implementation (part II)
8906         * cfold.cs (DoConstantNumericPromotions): Renamed to
8907         DoBinaryNumericPromotions and simplified.
8908         (BinaryFold): Couple of conversion fixes; simplified.
8910         * constant.cs, ecore.cs, literal.cs
8911         (ToType): Renamed to ConvertImplicitly.
8912         (Reduce): Renamed to ConvertExplicitly.
8914         * class.cs, convert.cs: Updated.
8916         * expression.cs: TryReduce doesn't throw an exception.
8918 2006-12-01  Marek Safar  <marek.safar@gmail.com>
8920         A fix for bug #80108
8921         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
8922         compatible.
8924 2006-11-30  Marek Safar  <marek.safar@gmail.com>
8926         Fixes unary operators implementation (part I)
8927         Also fixes #80026
8929         * cfold.cs (Error_CompileTimeOverflow): Made internal
8931         * const.cs (IConstant): Changed to use reference to constant and
8932         not constant itself.
8933         Updated IConstant implementations.
8935         * constant.cs (CreateConstant): New factory method.
8936         Updated IConstant implementation.
8938         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
8940         * ecore.cs: Updated to use CreateConstantReference.
8942         * enum.cs: Reflects IConstant changes.
8944         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
8946         * literal.cs (NullConstant): Change to be independently usable.
8948 2006-11-29  Martin Baulig  <martin@ximian.com>
8950         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
8951         we need to emit the scope initializer before calling the base .ctor.
8953         * anonymous.cs: Merged back from the new anonymous methods branch.
8954         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
8956         * expression.cs (ParameterReference.DoResolveBase): Create a
8957         "normal" ScopeInfo when capturing parameters rather than using the
8958         root scope; this makes things work with anonymous methods having
8959         parameters.
8961         * statement.cs
8962         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
8964 2006-11-22  Marek Safar  <marek.safar@gmail.com>
8966         A fix for bug #79987
8967         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
8968         check to a base class.
8969         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
8970         only when assembly has missing attribute.
8971         * report.cs: Update.
8973 2006-11-21  Marek Safar  <marek.safar@gmail.com>
8975         * cs-tokenizer.cs: Merged with gmcs version.
8977 2006-11-20  Marek Safar  <marek.safar@gmail.com>
8979         * cs-tokenizer.cs,
8980         * cs-parser.jay: Better error message when partial keyword is misplaced.
8982 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
8984         A fix for bug #79810
8985         report.cs: CS1058 only applies to 2.0 profile (gmcs).
8986         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
8987         a RuntimeWrappedException by default.
8989 2006-11-18  Marek Safar  <marek.safar@gmail.com>
8991         A fix for bug #79843
8992         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
8993         implementation.
8994         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
8996 2006-11-18  Marek Safar  <marek.safar@gmail.com>
8998         * driver.cs, namespace.cs: Uses faster IndexOf version.
9000 2006-11-17  Marek Safar  <marek.safar@gmail.com>
9002         A fix for bug #79941
9003         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
9004         operators.
9005         (Operator.Define): Implicit/Explicit operator of same type is duplicate
9006         even if internal name is different.
9007         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
9008         (UserDefinedConversion): Simplified as the operators cannot be internal.
9009         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
9010         conversions.
9011         (MethodLookup): Replaced EmitContext with parentType.
9012         * expression.cs: Updated.
9014 2006-11-09  Raja R Harinath  <rharinath@novell.com>
9016         * driver.cs (BadAssembly): Handle all the ugliness of
9017         DefineDynamicAssembly.
9019 2006-11-08  Raja R Harinath  <rharinath@novell.com>
9021         Address parts of #58244 -- most of what's left is in the runtime
9022         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
9023         CS1509 error checks, and handle them for all assembly loads, not
9024         just the first invocation.
9025         (LoadModule): Likewise.  Move handling of 'adder_method' ...
9026         * codegen.cs (AssemblyClass.AddModule): ... here.
9028 2006-11-02  Marek Safar  <marek.safar@gmail.com>
9030         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
9031         IEnumerable<T> is ambiguous.
9033 2006-10-31  Marek Safar  <marek.safar@gmail.com>
9035         A fix for bug #67689
9036         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
9037         GetEnumerator is ambiguous.
9039         * report.cs: Add new warning.
9041 2006-10-29  Marek Safar  <marek.safar@gmail.com>
9043         A fix for bug #78602
9044         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
9045         to protected member can be nested type.
9047 2006-10-28  Marek Safar  <marek.safar@gmail.com>
9049         A fix for bug #78965
9050         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
9051         to protected member must derive from current type.
9053 2006-10-27  Marek Safar  <marek.safar@gmail.com>
9055         assign.cs: Reuses error method.
9057         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
9058         instead of type for constants.
9059         (Expression.Error_ValueAssignment): Common error method.
9061         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
9062         for any assignment.
9064 2006-10-27  Marek Safar  <marek.safar@gmail.com>
9066         A fix for bug #79081
9067         * expression.cs (MemberAccess.DoResolve): Check nested type
9068         accessibility.
9070 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
9072         * doc.cs : nested delegates were not handled. Fixed bug #79754.
9074 2006-10-26  Marek Safar  <marek.safar@gmail.com>
9076         A fix for bug #76591
9077         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
9079 2006-10-26  Marek Safar  <marek.safar@gmail.com>
9081         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
9082         type forwarder of the same type multiple times.
9084 2006-10-26  Raja R Harinath  <rharinath@novell.com>
9086         Fix #78820
9087         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
9088         instance as an rvalue, even when we later resolve as an lvalue.
9090 2006-10-25  Martin Baulig  <martin@ximian.com>
9092         * anonymous.cs: Fix #79673.
9094 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
9096         A fix for bug #79666
9097         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
9098         ignored when is optimized (= default value) as its value is already set.
9100 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
9102         A fix for bug #79724
9103         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
9104         TypeContainer for type lookup.
9106 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
9108         A fix for bug #79231
9109         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
9110         * expression.cs (OverloadResolve): Always convert type name for
9111         an error message.
9112         (ResolveNamespaceOrType): Don't confuse a nested type with any 
9113         other member.
9115 2006-10-18  Martin Baulig <martin@ximian.com>
9117         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
9119 2006-10-17  Miguel de Icaza  <miguel@novell.com>
9121         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
9122         an int32, but requesting an int64 from the conversion
9124 2006-10-12  Martin Baulig  <martin@ximian.com>
9126         * anonymous.cs
9127         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
9128         
9129 2006-10-12  Martin Baulig  <martin@ximian.com>
9131         * statement.cs
9132         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
9134 2006-10-11  Miguel de Icaza  <miguel@novell.com>
9136         * convert.cs: Remove broken code: I was doing the "Existance"
9137         tests for Implicit conversions.
9139 2006-10-10  Miguel de Icaza  <miguel@novell.com>
9141         * convert.cs: Added one missing case in
9142         ImplicitStandardConversionExists uint64 to intptr.
9144         Fixes #59800
9145         
9146         * typemanager.cs (uintptr_type): another core known type.   
9148         * ecore.cs (OperatorCast): routine used to do cast operations that
9149         depend on op_Explicit.  We could change some of the Decimal
9150         conversions to use this.
9152         This one has a probe mechanism that checks both types for an op_
9153         which it coudl be used to eliminate two classes: CastToDecimal
9154         and CastFromDecimal.
9156         * convert.cs: Implement the conversions documented in #59800
9157         
9158 2006-10-10  Martin Baulig  <martin@ximian.com>
9160         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
9161         before RootScope.ResolveMembers().
9163         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
9164         `CurrentType' if appropriate.
9166 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
9168         A fix for bug #78568
9169         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
9170         when contains binary operators.
9171         * cs-parser.jay: Updated.
9173 2006-10-09  Martin Baulig  <martin@ximian.com>
9175         * delegate.cs
9176         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
9177         moved that into Define() and also do the other type parameter
9178         checks there.  Fixes #79094.  Added gtest-292.cs.
9180         * expression.cs
9181         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
9182         since that doesn't include type parameters; don't use `Ldelema'
9183         for type parameters.  Fixes #78980.  Added gtest-293.cs.
9185 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
9187         A fix for #77796
9188         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
9189         conversion is allowed.
9191 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
9193         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
9194         error reporting when no error occurs.
9196 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
9198         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
9199         does not exist.
9201 2006-10-06  Raja R Harinath  <rharinath@novell.com>
9203         Fix #79584
9204         * class.cs (DefineTypeBuilder): Check circular dependencies before
9205         setting the parent of the TypeBuilder.
9206         (CheckRecursiveDefinition): Don't use 'BaseType', since
9207         it may not be valid until after DefineTypeBuilder.  Use
9208         'base_type' instead.
9210 2006-10-04  Martin Baulig  <martin@ximian.com>
9212         Merged the Anonymous Methods patch.
9214         * anonymous.cs, iterators.cs: The new anonymous methods code.
9216         * statement.cs (Variable): New public abstract class.
9217         (LocalInfo.Variable): New public property.
9218         (LocalInfo.ResolveVariable): New public method.
9219         (Block.Flags): Add `IsIterator'.
9220         (Block.AddVariable): Improved the CS0136 check.
9221         (Block.AnonymousChildren): New public property.
9222         (Block.AddAnonymousChild): New public method.
9223         (ToplevelBlock): Update to use the new anonymous method framework.
9224         (ToplevelBlock.ctor): `container' is now a `Block' and not a
9225         `ToplevelBlock'; this is required to correctly implement the
9226         CS0136 check.
9227         (Fixed, Using): Use `TemporaryVariable' instead of directly
9228         creating the `LocalBuilder'.
9230         * parameter.cs (Parameter.ResolveVariable): New public method.
9231         (Parameters.ResolveVariable): Likewise.
9233         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
9235         * class.cs (TypeContainer): Replaced the `iterators' list and
9236         corresponding methods with a list of `CompilerGeneratedClass'es.
9237         (TypeContainer.ResolveMembers): New public method.
9238         (Method): `IIteratorContainer' has been replaced by
9239         `IAnonymousHost'.
9241         * expression.cs (VariableReference): New public abstract base
9242         class for `LocalVariableReference', `ParameterReference' and
9243         `This'.
9245         * codegen.cs (EmitContext): Removed `capture_context',
9246         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
9247         (EmitContext.EmitThis): Removed.
9249         * cs-parser.jay: Replace `iterator_container' with
9250         `anonymous_host'.       
9252 2006-10-04  Martin Baulig  <martin@ximian.com>
9254         * generic.cs (GenericMethod): Don't make this abstract.
9255         (Constraints.Clone): Added dummy implementation.
9257 2006-10-04  Raja R Harinath  <harinath@gmail.com>
9259         Fix #79577
9260         * namespace.cs (LookForAnyGenericType): Avoid nullref on
9261         'declspaces'.  Avoid allocating arrays willy-nilly.
9263         Fix #79553
9264         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
9265         cases out of the switch.
9267 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
9269         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
9270         message when non-generic type is used with the type arguments.
9271         * expression.cs: Updated.
9273 2006-09-28  Raja R Harinath  <rharinath@novell.com>
9275         Fix #79013
9276         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
9277         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
9278         Change semantics slightly.  Don't insist on having only one
9279         temporary EmptyExpression -- just throttle the creation of new ones.
9281         Fix #79451
9282         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
9283         non-interfaces too.  If no methods are found, don't try to create
9284         a MethodGroupExpr.
9286 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
9288         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
9289         generic type.
9291         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
9292         us produce better error message.
9294 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
9296         * expression.cs (Binary.ResolveOperator): Warn about a side effect
9297         of the `|' operator.
9299         * report.cs: A new warning added.
9301 2006-09-27  Martin Baulig  <martin@ximian.com>
9303         * generic.cs (GenericMethod): Don't make this abstract.
9305 2006-09-27  Martin Baulig  <martin@ximian.com>
9307         * report.cs
9308         (InternalErrorException): Added overloaded ctor taking a params array.
9310 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
9312         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
9313         Fixed the cases when same error was reported twice.
9315         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
9316         now report symbol information.
9318 2006-09-25  Martin Baulig  <martin@ximian.com>
9320         * class.cs: Completely unified with the gmcs version.
9322 2006-09-25  Martin Baulig  <martin@ximian.com>
9324         * typemanager.cs (TypeManager.IsNullableType): New public function.
9325         (TypeManager.IsNullableTypeOf): Likewise.
9326         (TypeManager.IsNullableValueType): Likewise.
9328         * class.cs (MethodCore): Added the `GenericMethod' argument from
9329         gmcs and also unified all classes derived from `MethodCore' with gmcs.
9331 2006-09-24  Raja R Harinath  <harinath@gmail.com>
9333         * convert.cs: Unify with gmcs version.
9335 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9337         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
9338         verify them as well.
9340         * report.cs: New warning.
9342 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9344         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
9345         for anonymous block with out argument.
9347 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9349         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
9350         not used private events only.
9352 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
9354         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
9356         * const.cs (Const.Define): Check for constant type.
9357         (Const.IsConstantTypeValid): Looks for valid constant types.
9359         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
9361         * ecore.cs (EmptyConstantCast): New common class for all constant based
9362         EmptyCast(s).
9364         * expression.cs (Is.DoResolve): Handle null constant especially.
9365         (New.DoResolve): Check for new void().
9366         (MemberAccess.DoResolve): Cope with all kind of nulls.
9368         * literal.cs (NullConstant): Uses EmptyConstantCast.
9369         (NullDefault): Based on EmptyConstantCast.
9370         (NullLiteral): Uses EmptyConstantCast.
9372         * statement.cs (Block.ResolveMeta): Check for constant type.
9374 2006-09-22  Martin Baulig  <martin@ximian.com>
9376         * delegate.cs, attribute.cs: Merged with the gmcs versions.
9378 2006-09-22  Raja R Harinath  <rharinath@novell.com>
9380         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
9381         not the null type.
9383         Fix part of #79451
9384         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
9385         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
9386         code slightly.
9388 2006-09-22  Martin Baulig  <martin@ximian.com>
9390         * ecore.cs: Merged with the gmcs version.
9392         * generic.cs (ConstructedType): New dummy class.
9393         (TypeArguments): Don't make this abstract.
9395         * typemanager.cs
9396         (TypeManager.IsGenericTypeDefinition): New method.
9397         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
9399 2006-09-22  Raja R Harinath  <rharinath@novell.com>
9401         * expression.cs (ComposedCast): Check for arrays of TypedReference
9402         before creating the type, not after.
9404 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
9406         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
9407         after ToType change.
9409         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
9410         when constant must be implicitly convertible.
9412         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
9414         * ecore.cs (NullCast): Derives from NullConstant.
9416         * expression.cs (Is.DoResolve): Removed useless variables.
9417         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
9418         (New.Constantify): Add enum support.
9419         (MemberAccess.DoResolve): Add warning when accessing null constant or
9420         variable.
9422         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
9423         property.
9425         * literal.cs (NullConstant): New abstract class with common
9426         functionality for all null specializations.
9427         (NullDefault): Represents default(X) when result can be
9428         reduced to null.
9429         (NullLiteral): Updated.
9431         * report.cs: Add new warning.
9433 2006-09-21  Martin Baulig  <martin@ximian.com>
9435         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
9437 2006-09-21  Martin Baulig  <martin@ximian.com>
9439         * generic.cs (GenericConstraints): New dummy class.
9440         (Constraints): Likewise.
9441         (TypeParameter): Likewise.
9442         (TypeParameterName): Likewise.
9443         (GenericMethod): Likewise.
9445         * typemanager.cs (TypeManager.GetGenericArguments): New method.
9447         * decl.cs: Merged with the gmcs version.
9449 2006-09-21  Raja R Harinath  <rharinath@novell.com>
9451         * generic.cs (TypeParameter): Implement IMemberContainer.
9452         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
9454         * rootcontext.cs: Unify with gmcs version.
9456         * report.cs: Unify with gmcs version.
9457         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
9458         from gmcs/generics.cs.
9459         * generics.cs (TypeParameter): New dummy class.
9461         * support.cs: Unify with gmcs version.
9463 2006-09-20  Raja R Harinath  <rharinath@novell.com>
9465         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
9466         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
9468         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
9469         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
9470         * mcs.exe.sources: Add generic.cs.
9472         * codegen.cs: Unify with gmcs version.
9474         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
9475         (EmitContext): Add GenericDeclContainer implementation.
9476         * decl.cs (MemberCore, DeclSpace): Likewise.
9477         * namespace.cs: Remove #ifdef GMCS_SOURCE.
9479         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
9480         MCS TypeManager has a corresponding dummy method.
9482 2006-09-19  Martin Baulig  <martin@ximian.com>
9484         * expression.cs: Completely merged with the gmcs version.
9486 2006-09-19  Martin Baulig  <martin@ximian.com>
9488         * expression.cs (Invocation): Merged with the gmcs version.
9489         (ArrayAccess.GetStoreOpcode): Likewise.
9491 2006-09-19  Martin Baulig  <martin@ximian.com>
9493         * typemanager.cs
9494         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
9495         (TypeManager.IsGenericMethodDefinition): Likewise.
9497 2006-09-19  Martin Baulig  <martin@ximian.com>
9499         * typemanager.cs
9500         (TypeManager.IsEqual): Moved the gmcs implementation here.
9501         (TypeManager.DropGenericTypeArguments): Likewise.
9502         (TypeManager.DropGenericMethodArguments): Likewise.
9503         (TypeManager.GetTypeArguments): Moved here from gmcs.
9504         (TypeManager.HasGenericArguments): Likewise.
9506 2006-09-19  Martin Baulig  <martin@ximian.com>
9508         * expression.cs (Binary): Merged with the gmcs version.
9510 2006-09-19  Martin Baulig  <martin@ximian.com>
9512         * expression.cs (Probe, As, Is): Merged with the gmcs version.
9514 2006-09-19  Martin Baulig  <martin@ximian.com>
9516         * typemanager.cs: Merged with the gmcs version.
9518 2006-09-16  Raja R Harinath  <rharinath@novell.com>
9520         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
9521         * driver.cs: Likewise.
9523 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
9525         A fix for #79401
9526         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
9527         only if parent type is class.
9528         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
9529         update.
9531 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
9533         * cs-parser.jay,
9534         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
9535         keywords are used.
9536         * typemanager.cs(CSharpName): Converts NullType to null.
9538 2006-09-15  Martin Baulig  <martin@ximian.com>
9540         * typemanager.cs
9541         (TypeManager.GetMethodName): Added mcs implementation.
9542         (TypeManager.IsEqual): Likewise.
9544         * ecore.cs
9545         (SimpleName.RemoveGenericArity): Added dummy implementation.
9547         * pending.cs: Merged with the gmcs version.     
9549 2006-09-15  Martin Baulig  <martin@ximian.com>
9551         * statement.cs: Merge with the gmcs version.
9553 2006-09-15  Martin Baulig  <martin@ximian.com>
9555         * statement.cs (Switch): Merge with the gmcs implementation
9556         (without nullables), which is newer.
9558 2006-09-15  Martin Baulig  <martin@ximian.com>
9560         * statement.cs (Block.Variables): Make this public.
9561         (ToplevelBlock.Parameters): Make this a property.
9562         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
9564 2006-09-15  Martin Baulig  <martin@ximian.com>
9566         * namespace.cs: Merge with the gmcs version.
9568 2006-09-15  Martin Baulig  <martin@ximian.com>
9570         * decl.cs (MemberName): Minor code cleanups.
9572 2006-09-15  Martin Baulig  <martin@ximian.com>
9574         * parameter.cs: Merge with the gmcs version.
9576 2006-09-15  Martin Baulig  <martin@ximian.com>
9578         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
9579         and an error in mcs.
9581 2006-09-15  Martin Baulig  <martin@ximian.com>
9583         * flowanalysis.cs: Merged from GMCS; added the generics code into
9584         a `GMCS_SOURCE' conditional so we can share this file.
9586 2006-09-08  Martin Baulig  <martin@ximian.com>
9588         * typemanager.cs (TypeManager.interlocked_type): New public field.
9589         (TypeManager.int_interlocked_compare-exchange): New public field.
9590         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
9591         enumerator types here and call InitGenericCoreTypes().
9592         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
9593         after calling InitEnumUnderlyingTypes().
9595         * rootcontext.cs
9596         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
9597         `classes_second_stage'. 
9599 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
9601         * assign.cs, ecore.cs, expression.cs: Share error message text.
9602         * class.cs (FieldMember.Define): Check for varible of static type.
9603         * driver.cs (LoadAssembly): Uses error output for errors.
9604         * statement.cs: Updated.
9606 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
9608         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
9609         type instance.
9611 2006-09-07  Martin Baulig  <martin@ximian.com>
9613         * driver.cs
9614         (MainDriver): Revert r62663 from Marek; see #70506 for details.
9616 2006-08-29  Miguel de Icaza  <miguel@novell.com>
9618         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
9619         
9620 2006-08-17  Miguel de Icaza  <miguel@novell.com>
9622         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
9623         #52019 and #79064, the use of the \uXXXX sequence in source code
9624         to represent unicode characters.
9626 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
9628         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
9629         support.
9630         * class.cs, ecore.cs, statement.cs: Merged to one error message.
9632 2006-08-13  Miguel de Icaza  <miguel@novell.com>
9634         * assign.cs: Catch attempts to assign to a method groups in += and
9635         report as 1656
9637 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
9639         A fix for #79056
9640         * cs-parser.jay: Don't destroy current array type by typeof of array's.
9642 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
9644         * class.cs (Method.Define): Issue a warning when generic method looks like
9645         an entry point.
9646         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
9647         as well.
9649 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
9651         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
9652         looking for ctor.
9653         * decl.cs (MemberCache.FindMembers): When container is interface we need to
9654         search all base interfaces as a member can be ambiguous.
9655         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
9656         Constructor member type filter. 
9657         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
9658         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
9659         reporting for returned memberinfos.
9660         * report.cs: Updated.
9661         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
9662         version to work on all runtimes.
9663         (TypeManager.RealMemberLookup): Removed members filtering.
9665 2006-08-08  Raja R Harinath  <rharinath@novell.com>
9667         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
9668         (PropertyExpr.EmitAssign): Likewise.
9669         * expression.cs (Indirection.EmitAssign): Likewise.
9670         (LocalVariableReference.EmitAssign): Likewise.
9671         (ParameterReference.EmitAssign): Likewise.
9672         (Invocation.EmitArguments): Likewise.
9673         (ArrayAccess.EmitAssign): Likewise.
9674         (IndexerAccess.EmitAssign): Likewise.
9675         (This.EmitAssign): Likewise.
9676         (ConditionalLogicalOperator.Emit): Likewise.
9678         Fix #79026
9679         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
9680         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
9681         leave it in after returning it.
9682         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
9684 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
9686         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
9687         message.
9689 2006-08-03  Raja R Harinath  <rharinath@novell.com>
9691         Fix cs0146-3.cs and cs0146-4.cs.
9692         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
9693         enclosing types don't depend on the current type.
9695 2006-08-02  Raja R Harinath  <rharinath@novell.com>
9697         Fix #77963
9698         * class.cs (TypeContainer.DoDefineMembers): Use
9699         FindBaseMemberWithSameName on Parent, since we're interested in
9700         whether we hide inherited members or not.
9701         (FindBaseMemberWithSameName): Make slightly more robust.
9703         Fix the non-generic testcase from #77396
9704         * decl.cs (DeclSpace.DeclContainer): Remove override.
9706         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
9707         declspaces for doppelgangers too.
9708         (UsingEntry): Implement IResolveContext.
9709         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
9710         'this' as the resolve context.
9711         (LocalAliasEntry): Likewise.
9713         Implement parts of #77403
9714         * roottypes.cs (RootDeclSpace): New.  Used to represent the
9715         toplevel declaration space.  Each namespace declaration introduces
9716         a "partial" root declaretion space.
9717         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
9718         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
9719         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
9720         from 'current_namespace.SlaveDeclSpace'.
9721         (namespace_declaration): Likewise.
9722         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
9723         check.  It can't happen now.
9724         * decl.cs (DeclSpace.LookupType): Likewise.
9725         * driver.cs (MainDriver): Sanity check.
9727 2006-08-01  Raja R Harinath  <rharinath@novell.com>
9729         * decl.cs (DeclSpace.FindNestedType): Remove.
9730         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
9731         LookupTypeContainer to get the container of the nested type.
9732         * class.cs (TypeContainer.FindNestedType): Make non-override.
9734 2006-07-31  Raja R Harinath  <rharinath@novell.com>
9736         * decl.cs (DeclSpace.PartialContainer): Move field from ...
9737         * class.cs (TypeContainer.PartialContainer): ... here.
9738         (TypeContainer.AddBasesForPart): New helper.
9739         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
9740         instead.
9741         * cs-parser.jay (current_class): Convert to DeclSpace.
9742         (struct_declaration, interface_declaration, class_declaration):
9743         Use AddBasesForPart instead of .Bases directly.
9744         * const.cs, iterators.cs: Update to changes.
9746 2006-07-28  Raja R Harinath  <rharinath@novell.com>
9748         * class.cs (TypeContainer.AddMemberType): Rename from
9749         AddToTypeContainer.
9750         (TypeContainer.AddMember): Rename from AddToMemberContainer.
9751         (AddTypeContainer): New.  Combine AddClassOrStruct and
9752         AddInterface.
9753         (AddPartial): Update.  Add 'is_partial' argument.
9754         * roottypes.cs: Update to changes.
9755         * cs-parser.jay (push_current_class): New helper for handling
9756         current_container and current_class.
9757         (struct_declaration, interface_declaration, class_declaration):
9758         Use it.
9760 2006-07-26  Raja R Harinath  <rharinath@novell.com>
9762         * roottypes.cs: Rename from tree.cs.
9764         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
9765         * tree.cs (Tree, ITreeDump): Remove types.
9766         * rootcontext.cs (tree, Tree): Remove fields.
9767         (root, ToplevelTypes): New.
9768         * *.cs: Update to rename.
9770         * tree.cs (Tree.RecordDecl): Remove.
9771         (RootTypes.AddToTypeContainer): Record the toplevel type in its
9772         namespace here.
9773         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
9775 2006-07-23  Raja R Harinath  <harinath@gmail.com>
9777         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
9778         DoFlowAnalysis and OmitStructFlowAnalysis here.
9779         (ec.With): Rename from WithUnsafe and generalize.
9780         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
9781         (ec.WithFlowAnalyis): New.
9782         * ecore.cs, expression.cs, statement.cs: Update.
9784 2006-07-22  Raja R Harinath  <harinath@gmail.com>
9786         * statement.cs (Block.ResolveMeta): Simplify slightly.
9788         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
9789         multiple boolean fields.  Convert InUnsafe, constant_check_state,
9790         check_state to flags.
9791         (CheckState, ConstantCheckState): Update.
9792         (InUnsafe): New read-only property.
9793         (FlagsHandle): Rename from CheckStateHandle and convert to handle
9794         arbitrary flags.
9795         (WithUnsafe): New helper similar to WithCheckState.
9796         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
9797         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
9799 2006-07-21  Raja R Harinath  <rharinath@novell.com>
9801         Make comparisons use the same IL irrespective of whether they're
9802         in a 'checked' or 'unchecked' context: one of the issues in #78899
9803         * codegen.cs (EmitContext.CheckState): Make read-only property.
9804         (EmitContext.ConstantCheckState): Likewise.
9805         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
9806         helper that implement a save/restore stack for CheckState
9807         values.  This is the only way to change check-state.
9808         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
9809         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
9810         (CheckedExpr.EmitBranchable): New forwarding method.
9811         (UnCheckedExpr): Likewise.
9812         * statement.cs (Block.ResolveMeta): Use WithCheckState.
9813         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
9814         (Checked.Resolve, checked.DoEmit): Likewise.
9816 2006-07-20  Miguel de Icaza  <miguel@novell.com>
9818         * anonymous.cs: Cache the resolved anonymous delegate, and return
9819         this so that the ResolveTopBlock is only triggered once, not
9820         twice.
9822         Currently we trigger ResolvetopBlock twice due to a first pass of
9823         argument check compatibility, and a second pass that does the
9824         actual resolution.   
9825         
9826 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
9828         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
9829         modifiers.
9830         * rootcontext.cs (Reset): Add helper_classes.
9832 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
9834         A fix for #78860
9835         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
9836         correctly.
9838 2006-07-13  Miguel de Icaza  <miguel@novell.com>
9840         * statement.cs (Lock): Handle expressions of type
9841         TypeManager.null_type specially.  Fixes #78770
9843 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
9845         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
9846         to an event.
9848 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
9850         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
9851         for accessors as well.
9852         * ecore.cs (EventExpr): Add AccessorTable.
9854 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
9856         A fix for #78738
9857         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
9858         for CS0122 where appropriate.
9859         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
9860         level attributes.
9861         (Filter): Assembly can be null in the case of top level attributes.
9863 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
9865         A fix for #78690
9867         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
9868         is done at global level.
9870 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
9872         A fix for #77002, Implemented TypeForwarder support.
9874         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
9875         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
9876         * typemanager.cs (): Add type_forwarder_attr_type.
9878 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
9880         * report.cs: Add CS0469 warning.
9882 2006-06-21  Martin Baulig  <martin@ximian.com>
9884         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
9885         the `try'-block, so we also report CS0016 etc. there.
9887 2006-06-21  Martin Baulig  <martin@ximian.com>
9889         * delegate.cs
9890         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
9892 2006-06-21  Martin Baulig  <martin@ximian.com>
9894         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
9895         also report CS1686 for parameters.
9897 2006-06-21  Martin Baulig  <martin@ximian.com>
9899         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
9900         instead of an error if the value is not implicitly convertible to
9901         the switch types; fixes #77964.
9903 2006-06-21  Raja R Harinath  <rharinath@novell.com>
9905         Fix #78673
9906         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
9907         FieldBuilder is null.
9909         Fix #78662
9910         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
9911         'left' and 'right' before error-checking.
9913 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
9915         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
9916         Fixed bug #78601.
9917         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
9918         (FieldExpr.DoResolve): likewise.
9919         (PropertyExpr.InstanceResolve): likewise.
9920         (EventExpr.InstanceResolve): likewise. 
9922 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
9924         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
9925         attribute applicable tests for attribute argument.
9927 2006-06-02  Raja R Harinath  <rharinath@novell.com>
9929         Fix #78079
9930         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
9931         (Binary.OverloadResolve_PredefinedIntegral): New.
9932         (Binary.OverloadResolve_PredefinedFloating): New.
9933         (Binary.OverloadResolve_PredefinedString): New.
9934         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
9935         Follow the standard more closely, and treat numeric promotions in
9936         terms of overload resolution.
9937         (Binary.CheckShiftArguments): Simplify.
9939 2006-06-01  Raja R Harinath  <rharinath@novell.com>
9941         * flowanalysis.cs (MyBitVector): Simplify representation.
9942         (MyBitVector.Clone): Avoid allocating BitArray.
9943         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
9944         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
9945         (*): Update.  Change all references to MyBitVector.And and
9946         MyBitVector.Or to &= and |=.
9948 2006-05-29  Raja R Harinath  <rharinath@novell.com>
9950         Fix cs0231-[34].cs.
9951         * cs-parser.jay (formal_parameter_list): Extend the pattern below
9952         to param arguments too.
9954 2006-05-26  Miguel de Icaza  <miguel@novell.com>
9956         * cs-parser.jay: Catch another parsing form for arglist being
9957         followed by other arguments.  Fixes #78313.
9959 2006-05-24  Raja R Harinath  <rharinath@novell.com>
9961         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
9962         checking of out parameters to ...
9963         (FlowBranchingToplevel.Merge): ... here.
9964         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
9965         set, propagate the origin upward, and only complain if there was
9966         no other error.
9967         (FlowBranchingException.AddContinueOrigin): Likewise.
9968         (FlowBranchingException.AddReturnOrigin): Likewise.
9969         (FlowBranchingException.AddGotoOrigin): Likewise.       
9971 2006-05-23  Raja R Harinath  <rharinath@novell.com>
9973         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
9974         unreachable, skip it.
9975         (FlowBranchingException.Merge): Always propagate jumps, even if
9976         the finally block renders subsequent code unreachable.
9978 2006-05-18  Raja R Harinath  <rharinath@novell.com>
9980         Fix #77601
9981         * statement.cs (Goto.Resolve): Move responsibility for resolving
9982         'goto' to FlowBranching.AddGotoOrigin.
9983         (Goto.SetResolvedTarget): New.  Callback to set the
9984         LabeledStatement that's the target of the goto.
9985         (Goto.DoEmit): Use Leave instead of Br when crossing an
9986         unwind-protect boundary.
9987         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
9988         LookupLabel and adjust to new semantics.
9989         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
9990         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
9991         Goto.SetResolvedTarget to update target.
9992         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
9993         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
9994         AddBreakOrigin & co.  Delay propagation until ...
9995         (FlowBranchingException.Merge): ... this.
9997         * statement.cs (Block.Resolve): Always depend on flow-branching to
9998         determine unreachability.  Kill workaround that originally emitted
9999         only one statement after an "unreachable" label (see infloop in
10000         test-515.cs).
10002         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
10003         This is still "wrong", but anything better would probably need a
10004         multi-pass algorithm.
10005         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
10006         usage vector.  Force current usage vector to be reachable, to
10007         optimistically signify backward jumps.
10008         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
10009         detected.
10010         (FlowBranchingLabeled.Merge): New.  If no backward jump was
10011         detected, return the original salted-away usage vector instead,
10012         updated with appropriate changes.  Print unreachable warning if
10013         necessary.
10014         * statement.cs (Block.Resolve): Don't print unreachable warning on
10015         a labeled statement.
10017 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
10019         * driver.cs: Pass filename without path to AssemblyBuilder's 
10020         AddResourceFile. Fixes bug #78407.
10022 2006-05-17  Raja R Harinath  <rharinath@novell.com>
10024         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
10025         * flowanalysis.cs (FlowBranchingLabeled): ... here.
10026         (FlowBranching.MergeChild): Overwrite
10027         reachability information from Labeled branchings too.
10029 2006-05-16  Raja R Harinath  <rharinath@novell.com>
10031         * statement.cs (Goto.Resolve): Merge jump origins here ...
10032         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
10034         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
10035         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
10036         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
10037         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
10038         here, ...
10039         * statement.cs (Goto.Resolve): ... not here.
10040         (Goto.Emit): Remove CS1632 check.
10042 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
10044         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
10045         error message.
10047 2006-05-11  Raja R Harinath  <rharinath@novell.com>
10049         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
10050         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
10051         (FlowBranchingException.Label): Likewise.
10053         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
10054         given value.
10055         (MyBitVector.Or): Use it to avoid losing information (Count).
10056         (FlowBranching.MergeOrigins): Likewise.
10058         * flowanalysis.cs (UsageVector.IsDirty): Remove.
10059         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
10060         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
10061         (UsageVector.ToString): Simplify.
10062         (UsageVector.MergeSiblings): Move here from ...
10063         (FlowBranching.Merge): ... here.
10064         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
10065         not a MyBitVector.
10067 2006-05-10  Raja R Harinath  <rharinath@novell.com>
10069         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
10070         null bitvector is treated as all-true.
10072         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
10073         (MyBitVector): Rationalize invariants.  'vector != null' implies
10074         that we have our own copy of the bitvector.  Otherwise,
10075         'InheritsFrom == null' implies all inherited bits are true.
10077 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
10079         * statement.cs (LocalInfo): Add IsConstant.
10080         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
10081         local variable for constants.
10083 2006-05-09  Raja R Harinath  <rharinath@novell.com>
10085         * flowanalysis.cs (MyBitVector.Empty): New.
10086         (MyBitVector): Don't allow InheritedFrom to be null.
10087         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
10088         (UsageVector, FlowBranching): Update to changes.
10090         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
10091         recursion.  The 'Parent == null' condition isn't sufficient for
10092         anonymous methods.
10093         (FlowBranching.AddBreakOrigin): Likewise.
10094         (FlowBranching.AddContinueOrigin): Likewise.
10095         (FlowBranching.AddReturnOrigin): Likewise.
10096         (FlowBranching.StealFinallyClauses): Likewise.
10097         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
10098         (FlowBranching.CheckOutParameters): Likewise.
10099         (FlowBranchingToplevel): Terminate all the above recursions here.
10100         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
10101         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
10103         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
10104         toplevel block.
10105         (FlowBranchingToplevel): New.  Empty for now.
10106         (FlowBranching.MergeTopBlock): Update.
10107         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
10108         branching for the anonymous delegate.
10109         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
10111         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
10112         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
10113         information at the start of the merge.  Reorganize.
10115 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10117         * class.cs (MethodData.Define): Method cannot implement interface accessor.
10119 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10121         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
10122         to newly introduced ctor.
10124         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
10125         message to one place.
10126         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
10127         global namespace.
10129 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10131         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
10133         * ecore.cs (Expression.ResolveAsConstant): Updated.
10135         * statement.cs (ResolveMeta): Updated.
10137 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
10139         * cs-parser.jay: __arglist cannot be used in initializer.
10141 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
10143         A fix for #77879
10144         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
10145         private types.
10147 2006-05-05  Raja R Harinath  <rharinath@novell.com>
10149         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
10150         (LabeledStatement): Add 'name' parameter.
10151         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
10152         (Block.AddLabel): Update to changes.
10153         * cs-parser.jay (labeled_statement): Likewise.
10155         * flowanalysis.cs (BranchingType.Labeled): New.
10156         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
10157         (FlowBranchingLabeled): New.  Does nothing for now, but will
10158         eventually handle 'goto' flows.
10159         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
10160         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
10161         that's terminated ...
10162         (Block.Resolve): ... here.
10164         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
10165         (UsageVector.MergeFinallyOrigins): Likewise.
10166         (FlowBranching.InTryOrCatch): Likewise.
10167         (FlowBranching.AddFinallyVector): Likewise.
10168         (FlowBranchingException): Update to changes.
10170         Fix #78290
10171         * statement.cs (Return.Resolve): Move error checking to ...
10172         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
10173         (FlowBranchingException): Handle return origins like break and
10174         continue origins.
10175         (FlowBranching.UsageVector.CheckOutParameters): Remove.
10177 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
10179         A fix for #76122
10180         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
10181         filter.
10183 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
10185         A fix for #77543
10186         * class.cs (MethodData.Define): Do public accessor check only when method
10187         implements an interface.
10189 2006-05-04  Raja R Harinath  <rharinath@novell.com>
10191         Remove special handling of 'break'
10192         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
10193         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
10194         (UsageVector.Break): Remove.
10195         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
10196         reachability.
10197         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
10199         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
10200         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
10202 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
10204         A fix for #75726
10205         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
10206         be the interface member.
10208 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
10210         A fix for #60069
10211         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
10212         for emitting small (int) values.
10214 2006-05-03  Raja R Harinath  <rharinath@novell.com>
10216         Fix #59427
10217         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
10218         control-flow passes through the 'finally' after merging-in all the
10219         control-flows from 'try' and the 'catch' clauses.
10221         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
10222         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
10223         always true at the only non-recursive entry point.
10224         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
10225         FlowBranchingBreakable.
10226         (FlowBranchingLoop): Remove.
10227         * statement.cs (Return.DoResolve): Update to changes.
10229         Fix #76471, #76665
10230         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
10231         (FlowBranching.CreateBranching): Handle it: create a
10232         FlowBranchingContinuable.
10233         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
10234         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
10235         except that it handles the 'continue' command.
10236         (FlowBranching.UsageVector.MergeOrigins): Rename from
10237         MergeBreakOrigins.
10238         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
10239         except that it overrides AddContinueOrigin.
10240         (FlowBranchingException): Override AddContinueOrigin, similar to
10241         AddBreakOrigin.
10242         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
10243         Create a new branching around the embedded statement.
10244         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
10245         control flow after the embedded statement.
10246         (Continue.Resolve): Move all error checking to AddContinueOrigin.
10248         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
10249         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
10250         FlowBranchingBreakable.
10251         (FlowBranchingSwitch): Remove.
10253         Fix test-503.cs
10254         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
10255         error reporting to ...
10256         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
10257         Rename from 'AddBreakVector'.  Add new location argument.  Return
10258         a bool indicating whether the 'break' crosses an unwind-protect.
10259         (FlowBranchingException.AddBreakOrigin): Add.
10260         (FlowBranchingException.Merge): Propagate 'break's to surrounding
10261         flowbranching after updating with the effects of the 'finally'
10262         clause.
10263         (FlowBranchingBreakable): New common base class for
10264         FlowBranchingLoop and FlowBranchingSwitch.
10266         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
10267         embedded statement.
10268         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
10270 2006-05-02  Raja R Harinath  <rharinath@novell.com>
10272         * statement.cs (Do.Resolve): If the loop is infinite, set the
10273         barrier.
10274         (While.Resolve, For.Resolve): Set a barrier after the embedded
10275         statement.  There's no direct control flow that goes from the end
10276         of the embedded statement to the end of the loop.
10277         * flowanalysis.cs (FlowBranching.Infinite): Remove.
10278         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
10279         above ensure that the reachability is correctly computed.
10281         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
10282         (UsageVector.MergeBreakOrigins): If the current path is
10283         unreachable, treat it as if all parameters/locals are initialized.
10284         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
10285         infinite loops before merging-in break origins.
10287         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
10288         (Reachability.Reachable): Split part into ...
10289         (Reachability.Unreachable): ... this.  Simplify.
10290         (Reachability.IsUnreachable): Use 'Unreachable' instead.
10292         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
10293         (Reachability.SetThrowsSometimes): Likewise.
10294         (FlowBranchingBlock.MergeTopBlock): Don't compare against
10295         TriState.Always, use corresponding property.
10296         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
10297         (Block.Resolve): Likewise.  Remove some redundant checks.
10299 2006-05-02  Raja R Harinath  <harinath@gmail.com>
10301         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
10302         (Reachability.Meet): Don't bother checking AlwaysThrows --
10303         barrier is always set.
10304         (FlowBranchingBlock.Merge): Likewise.
10306 2006-05-01  Raja R Harinath  <harinath@gmail.com>
10308         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
10309         checks for unreachable.
10311 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
10313         A fix for #77980
10314         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
10316         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
10317         whether field is really assigned.
10319 2006-04-30  Raja R Harinath  <harinath@gmail.com>
10321         * flowanalysis.cs (Reachability): Make 4-argument constructor
10322         private.
10323         (Reachability.Meet): Rename from 'And'.  Remove static variant.
10324         (Reachability.Always): Rename from the highly misleading
10325         'Reachability.Never'.
10326         (FlowBranching.Merge): Update to changes.  Mark an impossible
10327         situation with a 'throw'.
10328         (*): Update to changes.
10330 2006-04-29  Raja R Harinath  <harinath@gmail.com>
10332         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
10333         Remove 'Undefined'.
10334         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
10335         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
10336         (*): Update to changes.
10337         * statement.cs: Update to changes.
10339 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
10341         A fix for #78049
10342         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
10344 2006-04-28  Raja R Harinath  <harinath@gmail.com>
10346         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
10347         dummy UsageVector.
10349         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
10350         argument to two arguments: an usage-vector and a bool.  Move call
10351         to FlowBranching.Merge () ...
10352         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
10354         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
10355         handling of loop and switch reachability to ...
10356         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
10358 2006-04-27  Raja R Harinath  <harinath@gmail.com>
10360         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
10361         handling to FlowBranchingLoop.InLoop.
10362         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
10364 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
10366         A fix for #78115
10367         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
10368         anonymous method is allowed from AnonymousContainer here.
10370         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
10372 2006-04-24  Raja R Harinath  <rharinath@novell.com>
10374         Fix #78156
10375         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
10377 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
10379         A fix for #49011.
10380         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
10381         (DoubleConstant.Reduce): Ditto.
10383 2006-04-23  Raja R Harinath  <rharinath@novell.com>
10385         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
10386         Remove 'lvalue_right_side' argument.  Move parts to ...
10387         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
10388         (LocalVariable.DoResolveLValue): ... these.
10390 2006-04-21  Raja R Harinath  <rharinath@novell.com>
10392         Fix cs1655.cs
10393         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
10394         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
10395         (LocalVariableReference.DoResolveBase): Use it to implement new
10396         CS1655 check.
10397         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
10398         (Argument.Resolve): Simplify.  Move CS1510 check ...
10399         * ecore.cs (Expression.ResolveLValue): ... here.
10400         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
10401         (PropertyExpr.DoResolveLValue): Likewise.
10402         (FieldExpr.Report_AssignToReadonly): Likewise.
10403         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
10404         LValueMemberAccess or LValueMemberOutAccess on instance depending
10405         on it.
10406         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
10407         DoResolve as appropriate.
10409 2006-04-20  Raja R Harinath  <rharinath@novell.com>
10411         Fix #75800
10412         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
10413         implicit conversions on 'out' and 'ref' arguments.
10415         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
10416         improve clarity.  Remove dead code.
10418         Fix #66031
10419         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
10420         (Catch.Resolve): Resolve VarBlock if it exists.
10422 2006-04-19  Miguel de Icaza  <miguel@novell.com>
10424         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
10425         twice, this was some residual code, the enumerator was emitted
10426         properly in the two branche of if later.
10428 2006-04-19  Raja R Harinath  <rharinath@novell.com>
10430         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
10431         cast is never an lvalue.
10432         (Cast.DoResolve, Cast.ResolveRest): Combine.
10433         (Argument.Emit): Simplify slightly.  Move 'Expr is
10434         IMemoryLocation' check ...
10435         (Argument.Resolve): ... here.
10436         (Argument.Error_LValueRequired): Remove.  Inline into only user.
10438         Simplifications.  Fix cs0191-2.cs
10439         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
10440         CS1649 and CS1651 to ...
10441         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
10442         the actual selection of the error code and message to a lookup
10443         table.  Add a dummy return value to simplify callsites.
10444         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
10445         readonly fields of other instances of the same type.  Move CS0197
10446         warning from ...
10447         * expression.cs (Argument.Resolve): ... here.  Simplify code.
10448         Ensure that ec.InRefOutArgumentResolving is only set during LValue
10449         resolution of an out or ref argument.  The code simplification
10450         above uses this invariant.
10452 2006-04-18  Raja R Harinath  <rharinath@novell.com>
10454         Possibly fix #77752.  Fix cs1690-[4-7].cs.
10455         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
10456         CheckMarshallByRefAccess.  Drop parameter.
10457         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
10458         warning.
10459         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
10460         InstanceExpression.
10461         * report.cs (AllWarnings): Add CS1690.
10462         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
10463         for ref access too.
10464         (LocalVariableReference.DoResolveBase): Update.
10466 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10468         * class.cs (MethodOrOperator): Moved common parts from method class.
10469         detect obsolete attributes.
10470         (Method.Define): Simplified as it reuses code from base.
10471         (Constructor.ValidAttributeTargets): Fixed issue found during
10472         refactoring.
10473         (Destructor.ValidAttributeTargets): Fixed issue found during
10474         refactoring.
10475         (Operator): Finished refactoring set off by #78020. Operator class is now
10476         ordinary method class.
10478         * anonymous.cs: Updated.
10480         * decl.cs (DeclSpace): Add IsGeneric
10482 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10484         * class.cs (Constructor.Emit): Don't emit the attributes twice.
10486 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10488         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
10489         detect obsolete attributes.
10490         (Method.CreateEmitContext): Moved to MethodOrOperator.
10492 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10494         A fix for #78048.
10495         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
10496         customized exception to make crash detection easier.
10497         (MethodOrOperator): Started to work on new base class for methods and
10498         operators.
10499         (Method): Derives from MethodOrOperator.
10500         (Constructor.Emit): Emits its own attributes.
10501         (AbstractPropertyEventMethod.Emit): Ditto.
10502         (Operator): Derives from MethodOrOperator, will refactor fully in extra
10503         patch.
10504         (Operator.Emit): It's temporary more tricky than should be.
10505         
10506         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
10508         * report.cs (InternalErrorException): Add ctor with inner exception.
10510 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
10512         A fix for #76744.
10513         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
10514         only not visible.
10516 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
10518         A fix for #77916.
10519         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
10520         array.
10522 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
10524         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
10525         attribute is present and Guid not.
10526         (Interface.ApplyAttributeBuilder): Ditto.
10528         * attribute.cs: Add error message.
10530 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
10532         A fix for #78020.
10534         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
10535         sources (it's composite) so hold them in extra array as they are used in
10536         Emit phase only. It worked in the previous versions by mistake.
10537         (Attribute.Emit): Emit attribute for more owners when exist.
10539         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
10540         it has now different behaviour.
10542 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
10544         * constant.cs (Constant.IsDefaultInitializer): New method.
10546         * class.cs: Updated.
10548         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
10549         re-initialize default values. It saves KBs almost for every assembly.
10550         Thanks Zoltan for the idea.
10551         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
10552         (ArrayCreation.DoResolve): Resolve only once.
10553         (ArrayCreation.Emit): Emit static initializer only when it is faster.
10554         (ArrayCreation.GetAttributableValue): Cope with optimized values.
10556 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
10558         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
10559         From #77961.
10561 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
10563         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
10564         in an embedded statement too.
10566 2006-04-01  Raja R Harinath  <rharinath@novell.com>
10568         Fix #77958
10569         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
10571 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
10573         A fix for #77966.
10575         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
10576         was not specified.
10578         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
10580 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
10582         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
10583         phase.
10585         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
10586         LocalTemporary change.
10588         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
10589         TypeContainer.
10590         (ClassOrStruct.DefineFieldInitializers): Implemented static field
10591         initializers optimization.
10592         (ClassOrStruct.TypeAttr): Moved from modifiers.
10593         (Constructor.CheckBase): Don't crash when static ctor has parameters.
10594         (FieldBase.ResolveInitializer): Resolves initializer.
10595         (FieldBase.HasDefaultInitializer): New property.
10597         * cs-parser.jay: Removed message.
10599         * expression.cs (CompilerGeneratedThis): New specialization.
10601         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
10603 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
10605         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
10607 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
10609         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
10610         be now EnumConstants only.
10612 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
10614         * attribute.cs, driver.cs: Reset more caches.
10616 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10618         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
10620 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10622         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
10623         for easier reuse. Updated all overrides.
10624         (IntegralConstant): New base class for all integral constants.
10625         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
10626         of the constant range, report custom error.
10627         (UIntConstant.Reduce): Fixed uint conversion.
10629         * ecore.cs, literal.cs: Reduce updates.
10631 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10633         A fix for #75813.
10635         * class.cs (Constructor.Define): Removed extra if for default ctors.
10636         A patch from Atsushi Enomoto.
10638 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10640         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
10641         GetAttributableValue.
10643         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
10644         when required.
10646         * convert.cs (ImplicitConversionRequired): Error message moved to
10647         DoubleLiteral.
10649         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
10650         automatic implicit conversion of an output value.
10651         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
10653         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
10654         conversion.
10655         (TypeOf.GetAttributableValue): Add extra handling for object type.
10657         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
10658         special error message.
10660 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
10662         * class.cs (Constructor.Emit): Don't crash when struct ctor is
10663         InternalCall.
10664         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
10665         compatible with MS runtime.
10667 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
10669         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
10670         attribute arguments here.
10672         * class.cs (Indexer.Define): The check was moved to attribute class.
10674 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
10676         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
10677         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
10678         easier.
10680 2006-03-22  Raja R Harinath  <rharinath@novell.com>
10682         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
10683         mcs to keep code differences small.
10684         * attribute.cs (Attribute.GetParameterDefaultValue): New.
10685         * typemanager.cs (parameter_default_value_attribute_type): New.
10686         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
10687         CS1908 check.
10689 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
10691         * expression.cs (StringConcat.Append): Reverted back to no warning state.
10693 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
10695         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
10697         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
10698         the blocks too.
10700 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
10702         * doc-bootstrap.cs : fix build.
10704 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
10706         * expression.cs (StringConcat.Append): Issue a warning when empty string
10707         is going to append.
10709 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
10711         * assign.cs (CompoundAssign.ResolveSource): Removed.
10713         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
10714         clean up.
10716         * class.cs (TypeContainer.FindMethods): Removed.
10717         (TypeContainer.CheckMemberUsage): Made static.
10719         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
10721         * constant.cs (CheckRange): Removed unused type argument.
10722         (CheckUnsigned): Removed unused type argument.
10724         * cs-parser.jay: Updated after MemberAccess clean up.
10725         Uses Length for empty string test.
10727         * cs-tokenizer.cs: Uses Length for empty string test.
10728         (IsCastToken): Made static.
10729         (is_hex): Made static.
10730         (real_type_suffix): Made static.
10732         * decl.cs (SetupCache): Made static.
10733         (OnGenerateDocComment): Removed unused ds argument.
10735         * delegate.cs (VerifyDelegate): Removed unused argument.
10737         * doc.cs: Uses Length for empty string test.
10739         * driver.cs: Uses Length for empty string test.
10741         * enum.cs (IsValidEnumType): Made static
10743         * expression.cs (EnumLiftUp): Removed unused argument.
10744         (ResolveMethodGroup): Ditto.
10745         (BetterConversion): Ditto.
10746         (GetVarargsTypes): Ditto.
10747         (UpdateIndices): Ditto.
10748         (ValidateInitializers): Ditto.
10749         (MemberAccess.ctor): Ditto.
10750         (GetIndexersForType): Ditto.
10752         * flowanalysis.cs: (MergeFinally): Removed unused argument.
10754         * iterators.cs: Updated after MemberAccess clean up.
10756         * location.cs: Uses Length for empty string test.
10758         * namespace.cs: Uses Length for empty string test.
10760          * report.cs (CheckWarningCode): Made static.
10762         * statement.cs (LabeledStatement): Removed unused argument.
10764         * typemanager.cs (FilterNone): Removed.
10766 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10768         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
10769         obsolete.
10771         * class.cs: Updated.
10773 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10775         * cs-parser.jay.cs: __arglist is not allowed for delegates.
10777 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10779         A fix for #77822.
10781         * expression.cs (VerifyArgumentsCompat): Reverted to double error
10782         reporting, it's more tricky than I thought.
10784 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10786         A fix for #77816.
10788         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
10789         host container.
10790         (AnonymousMethod.ImplicitStandardConversionExists): New method.
10791         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
10792         Add more error reporting; Fixed issue with params.
10794         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
10796         * cs-parser.jay: AnonymousMethod requires host container.
10798         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
10800 2006-03-18  Raja R Harinath  <harinath@gmail.com>
10802         * class.cs: Change 'TypeContainer ds' constructor argument to
10803         'DeclSpace parent'.  Some classes were missed below due to
10804         different naming convention.
10806         * class.cs (MemberCore.Parent): Delete.  This makes the
10807         ParentContainer changes below enforceable by the compiler.
10809         Treat pointers to enclosing declaration space as 'DeclSpace', not
10810         'TypeContainer'.
10811         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
10812         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
10814         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
10815         of TypeContainer.
10816         (Block.AddThisVariable): Likewise.
10817         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
10818         (AbstractPropertyEventMethod.Emit): Likewise.
10819         (AbstractPropertyEventMethod.EmitMethod): Likewise.
10820         (GetMethod.Define, SetMethod.Define): Likewise.
10821         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
10822         (DelegateMethod.EmitMethod): Likewise.
10824         Fix regression test-partial-13.cs.
10825         Rationalize use of PartialContainer.  Ensure that the partial
10826         class semantics can be tied to type-correctness, i.e., any
10827         violation will cause a compile error.
10828         * class.cs, const.cs: Access all fields that belong to class
10829         TypeContainer via ParentContainer.  Arguments of EmitContexts and
10830         Resolve()-like functions still use 'Parent'.
10832         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
10833         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
10834         (PropertyMethod.CheckModifiers): Remove unused argument.
10835         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
10836         DeclSpace.
10838 2006-03-17  Raja R Harinath  <harinath@gmail.com>
10840         Make semantics of PartialContainer simpler.
10841         * decl.cs (DeclSpace.IsPartial): Remove.
10842         * class.cs (TypeContainer.IsPartial): Likewise.
10843         (TypeContainer..ctor): Set PartialContainer to point to self.
10844         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
10845         (TypeContainer.FindNestedType): Likewise.
10846         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
10848 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
10850         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
10852 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
10854         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
10855         classes.
10857 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
10859         * class.cs (Operator.Define): An error for base conversion was not
10860         reported correctly.
10862 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
10864         * iterator.cs : yield break is allowed in try statement which has
10865           catch clauses. Fixed bug #77767.
10867 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
10869         A fix for #77593, #77574.
10871         * class.cs (MethodCore.CheckBase): Another if for operator.
10873 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
10875         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
10876         were not resolved
10878         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
10879         (DelegateCreation.ImplicitStandardConversionExists): New method for just
10880         conversion test.
10881         
10882         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
10883         not needed.
10885         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
10886         Updated after another emitcontext usage was clean up. It should help us to
10887         synchronize with gmcs easier.
10889 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
10891         A fix for #77353.
10893         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
10894         (Event.Define): ditto
10895         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
10897         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
10898         Removed redundant code and set NewSlot for Invoke method too.
10900         * parameter.cs (Parameters.ctor): Add custom, type ctor.
10901         (Parameters.MergeGenerated): New method. Use this method when you merge
10902         compiler generated argument with user arguments.
10904 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
10906         * attribute.cs (ResolveAsTypeTerminal): Removed.
10908         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
10909         specialization for predefined types; 30% speed up.
10910         Finally placed obsolete check to right place.
10911         (Expression.ResolveType): Removed.
10913         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
10914         Updated after ResolveType was removed.
10916         * expression.cs (Cast.ctor): Check void cast.
10917         (Binary.ResolveAsTypeTerminal): Is never type.
10918         (Conditional.ResolveAsTypeTerminal): Is never type.
10920         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
10922 2006-03-01  Raja R Harinath  <rharinath@novell.com>
10924         Fix #77679.
10925         * expression.cs (ParameterReference.DoResolveBase): Change return
10926         type to bool.
10927         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
10928         Update.
10930         Fix #77628.
10931         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
10933         Fix #77642.
10934         * typemanager.cs (GetFullNameSignature): Don't nullref on
10935         protected accessors.
10937 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
10939         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
10940         these two separated members to simplify the code.
10941         (Attribute.Resolve): Refactored to use new fields and methods.
10942         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
10943         implemented obsolete attribute checking.
10944         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
10945         implemented obsolete checking again. It look line never ending quest ;-)
10946         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
10948         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
10950         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
10952         *class.cs (Property.Define): Add RegisterProperty call.
10954         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
10955         argument groups (only 2).
10957         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
10958         encoding expression to arguments.
10959         (Expression.ExprClassToResolveFlags): Just turned to property.
10961         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
10962         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
10963         optimized as well as implemented support for zero-length attributes.
10965         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
10966         Add caching of PropertyInfo's.
10968 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
10970         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
10971         error multiple times.
10973 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
10975         New partial class implementation.
10976         A fix for #77027, #77029, #77403
10978         * attribute.cs (Attributable): Made attributes protected.
10980         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
10981         the replacements of ClassPart and PartialContainer.
10982         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
10983         (TypeContainer.AddInterface): Ditto.
10984         (TypeContainer.AddPartial): The main method for partial classes. It checks
10985         for errors and merges ModFlags and attributes. At the end class is added to
10986         partial_parts list.
10987         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
10988         required here.
10989         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
10990         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
10991         from the rest of partial classes.
10992         (TypeContainer.GetClassBases): Simplified.
10993         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
10994         DefineType.
10995         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
10996         (TypeContainer.HasExplicitLayout): Uses Flags now.
10997         (PartialContainer): Removed.
10998         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
10999         (StaticClass): Was merged with Class.
11000         (Class.GetClassBases): class and static class bases are verified here.
11001         (Class.TypeAttr): Added static attributes when class is static.
11002         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
11003         (MemberBase): In some cases we need to call parent container for partial
11004         class. It should be eliminated but it's not easy now.
11006         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
11008         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
11009         partial classed to accumulate class comments.
11010         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
11012         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
11014         * driver.cs (MainDriver): Tree.GetDecl was removed.
11016         * modifiers.cs (Modifiers): Add partial modifier.
11018         * tree.cs (Tree.decl): Removed.
11019         (RootTypes): Started to use this class more often for root types
11020         specializations.
11022 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
11024         A fix for #77615
11026         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
11027         external interface does not have an attribute.
11029 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
11031         Another prerequisites for new partial classs implementation.
11032         
11033         * attribute.cs (Attribute.Equal): Implemented.
11034         (Attribute.Emit): Changed as attributes can be applied more than twice.
11035         (Attributes.Emit): Check for duplicate attributes here.
11037         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
11038         as a parameter, clean-up.
11040 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
11042         A fix for #77485
11044         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
11045         contains obsolete attribute check which can in some cases look for base
11046         type of current class which is not initialized yet.
11047         (TypeContainer.BaseType): Replacement of ptype.
11049         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
11051 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
11053         First of prerequisites for new partial classs implemention.
11054         
11055         * attribute.cs (Attributable): Extended by ResolveContext;
11056         Attributes finally have correct context for resolving in all cases.
11057         (AttachTo): Attribute owner is assigned here.
11059         * codegen.cs (IResolveContext): Introduce new interface to hold
11060         all information needed in resolving phase.
11061         (EmitContext): Implements IResolveContext; more clean-up needed here.
11062         
11063         * decl.cs (MemberCore): Implemented IResolveContext.
11065         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
11066         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
11067         parameter.cs, statement.cs, tree.cs, typemanager.cs:
11068         Refactored to use new IResolveContext instead of EmitContext; cleanup
11070 2006-02-06  Miguel de Icaza  <miguel@novell.com>
11072         * codegen.cs (EmitScopeInitFromBlock): check here the
11073         capture_context, there is no need to make two calls to the
11074         EmitContext. 
11076         * anonymous.cs: Add some debugging messages that might help me
11077         track other instances of this problem in the future (the
11078         regression of test 467).
11080         * cs-parser.jay: track the variable block, as we need to initalize
11081         any captured variables declared in this block for the "catch"
11082         portion of the "Try" statement.
11084         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
11085         scope initialization for captured variables. 
11087         Also, move the emit for the variables after the block location has
11088         been marked.
11090 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
11092         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
11094 2006-02-02  Miguel de Icaza  <miguel@novell.com>
11096         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
11097         commit yesterday, the initialization for the roots is necessary.
11098         What is not necessary is the scope activation.
11100 2006-02-02  Raja R Harinath  <rharinath@novell.com>
11102         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
11103         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
11104         CS0206 checks.
11105         (Argument.Resolve): Remove CS0206 checks.
11107 2006-02-01  Miguel de Icaza  <miguel@novell.com>
11109         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
11110         scopes for all the roots, the scopes will now be emitted when the
11111         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
11113         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
11114         code.  This reduces a lot of existing cruft.
11115         
11116         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
11117         that the ScopeInfo is generated as we enter the scope, not at the
11118         time of use, which is what we used to do before.
11120         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
11121         every time a Block is about to be emitted if we have a
11122         CaptureContext. 
11124 2006-02-01  Raja R Harinath  <rharinath@novell.com>
11126         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
11127         (Reset): Update.
11128         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
11130         * typemanager.cs (cons_param_array_attribute): Make private.
11131         (Reset): Set it to null.
11132         (InitCoreHelpers): Don't initialize it.
11133         (ConsParamArrayAttribute): New.  Initialize it as needed.
11134         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
11136 2006-01-31  Miguel de Icaza  <miguel@novell.com>
11138         * expression.cs: There might be errors reported during the
11139         selection of applicable methods.  If there are errors, do not
11140         continue execution as it will lead the compiler to crash.
11142 2006-01-30  Miguel de Icaza  <miguel@novell.com>
11144         * expression.cs: Member access is not allowed on anonymous
11145         methods.  Fixes #77402.
11147 2006-01-30  Raja R Harinath  <rharinath@novell.com>
11149         Fix #77401
11150         * cs-parser.jay (VariableDeclaration): Don't set
11151         current_array_type to null.
11152         (field_declaration, event_declaration, declaration_statement):
11153         Set it to null here.
11155 2006-01-28  Raja R Harinath  <harinath@gmail.com>
11157         * typemanager.cs (GenericParameterPosition): New.
11158         * doc.cs: Use it.
11160 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
11162         * doc.cs : To process "include" elements, first we should create
11163           another list than XmlNodeList, because it could result in node
11164           removal, which could result in that the XmlNodeList gives up
11165           yielding next node.
11167           (Also made code identical to gmcs again.)
11169 2006-01-25  Miguel de Icaza  <miguel@novell.com>
11171         * ecore.cs: Introduce an error report that we were not catching
11172         before, if not silent, we must report the error.  Gonzalo ran into
11173         it.
11175 2006-01-23  Miguel de Icaza  <miguel@novell.com>
11177         A fix for bug: #76957
11178         
11179         * iterators.cs (MoveNextMethod.CreateMethodHost): call
11180         ComputeMethodHost before creating the method, this is a new
11181         requirement. 
11183         * anonymous.cs (AnonymousContainer): Now we track all the scopes
11184         that this method references (RegisterScope).  The actual scope
11185         where the method is hosted is computed with the ComputeMethodHost
11186         before we create the method.
11188         Moved the Deepest routine here.
11190         (AnonymousContainer.ComputeMethodHost): New routine used to
11191         compute the proper ScopeInfo that will host the anonymous method.
11193         (ScopeInfo): Deal with multiple roots.  The problem was that we
11194         did not have a unique root where all ScopeInfos could be hanged
11195         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
11196         of roots.  
11198         Remove AdjustMethodScope which is now computed at the end.  Remove
11199         LinkScope which did a partial link, instead link all ScopeInfos
11200         before code generation from the new "LinkScopes" routine. 
11202         Simplify all the Add* routines as they no longer need to maintain
11203         the tree, they just need to record that they are using variables
11204         from a ScopeInfo.
11206         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
11207         routines to produce the forest of ScopeInfo trees.
11209         * class.cs (TypeContainer.AppendMethod): This is just like
11210         AddMethod, but ensures that an interface implementation method
11211         (IEnumerable.XXX) is not inserted at the beginning of the queue of
11212         methods, but at the end.
11214         We use this functionality to ensure that the generated MoveNext
11215         method in the iterator class is resolved/emitted before the
11216         enumerator methods created.   
11218         This is required because the MoveNext method computes the right
11219         ScopeInfo for the method.  And the other methods will eventually
11220         need to resolve and fetch information computed from the anonymous
11221         method. 
11223 2006-01-21  Raja R Harinath  <harinath@gmail.com>
11224             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
11226         Fix rest of #76995.
11227         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
11228         the 'aliases' hash.
11229         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
11230         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
11232 2006-01-18  Raja R Harinath  <rharinath@novell.com>
11234         Fix #76656, cs0231-2.cs.
11235         * cs-parser.jay (formal_parameter_list): Make error case catch
11236         more issues.
11237         (parenthesized_expression_0): Add CS1026 check.
11238         (invocation_expression): Remove unused { $$ = lexer.Location }.
11240 2006-01-17  Raja R Harinath  <rharinath@novell.com>
11242         Fix #76824.
11243         * cs-parser.jay (statement_expression): Don't list out the
11244         individual statement-expressions.  Convert syntax error into
11245         CS0201 check.
11247 2006-01-16  Raja R Harinath  <rharinath@novell.com>
11249         Fix #76874.
11250         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
11251         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
11252         CheckIntermediateModification.
11253         (FieldExpr.DoResolve): Add new two-argument version that
11254         allows us to resolve the InstanceExpression as an lvalue.
11255         The one-argument variant is now just a wrapper.
11256         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
11257         Resolve the lhs as an lvalue if the it has a value type.
11258         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
11259         from Assign.DoResolve.
11260         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
11261         resolved as an lvalue.
11262         (PropertyExpr.DoResolve): Update.
11263         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
11264         has a value type.  Move CS1612 check here from
11265         CheckIntermediateModification.
11266         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
11267         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
11268         'right_side' of a ResolveLValue on an 'out' argument.
11269         (EmptyExpression.LValueMemberAccess): New.  Used as the
11270         'right_side' of a propagated ResolveLValue on a value type.
11271         (LocalVariableReference.DoResolveBase): Recognize
11272         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
11273         Add CS1654 check.
11274         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
11275         EmptyExpression.Null.
11277 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
11279         * typemanager.cs : added IsGenericParameter(). In mcs it always
11280           return false.
11281         * doc.cs : for generic parameters, use GenericParameterPosition,
11282           not FullName.
11284 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
11286         * expression.cs: Fix Console.WriteLine ((this = x).foo);
11288 2006-01-12  Miguel de Icaza  <miguel@novell.com>
11290         This fixes the problem where we used ldfld instead of ldflda to
11291         load the "THIS" pointer on captured parameters, when THIS is a
11292         value type.  See bug #77205.
11293         
11294         * iterators.cs (CapturedThisReference.Emit): Pass false to
11295         EmitThis (we do not need the address).
11297         * codegen.cs (EmitThis): it needs to know whether we need the
11298         address of `this' or not.  This is used by value types.  
11300         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
11301         every other call passes false.
11303 2006-01-12  Raja R Harinath  <rharinath@novell.com>
11305         Fix #77221.
11306         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
11307         GetOverride.
11308         * expression.cs (Invocation.OverloadResolve): Update.
11309         (Invocation.DoResolve): Avoid double resolution of invocation.
11311 2006-01-11  Raja R Harinath  <rharinath@novell.com>
11313         Fix #77180.
11314         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
11315         unary negation of floating point types as 0-expr; negation cannot
11316         overflow in floating point types.
11318         Fix #77204.
11319         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
11320         on operands of 'void' type.
11322         Fix #77200.
11323         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
11324         and ExclusiveOr for boolean constants too.
11326 2006-01-09  Raja R Harinath  <rharinath@novell.com>
11328         Fix #75636.
11329         * expression.cs (Invocation.OverloadResolve): Replace reflected
11330         override methods with their base virtual methods, rather than
11331         skipping over them.
11332         * typemanager.cs (TypeManager.GetOverride): New.
11334 2006-01-05  Jb Evain  <jbevain@gmail.com>
11336         * class.cs (Property.Define, Indexer.Define): do not tag the
11337         properties as SpecialName | RTSpecialName.
11339 2006-01-04  Miguel de Icaza  <miguel@novell.com>
11341         * class.cs (MethodCore.IsDuplicateImplementation): This method was
11342         doing a low-level comparission of parameter types.  It was lacking
11343         a check for __argslist. 
11345 2005-12-30  Miguel de Icaza  <miguel@novell.com>
11347         * expression.cs (ParameterReference.DoResolveBase): Allow
11348         reference parameters if they are local to this block. 
11350         This allows the ref and out parameters of a delegate to be used in
11351         an anonymous method, for example:
11353         delegate void set (out int x);
11355         set s = delegate (out int x){
11356                 x = 0;
11357         };
11359         This is used by functionality introduced late in the C# language.
11360         
11361         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
11362         method that take ref and out parameters. 
11364         Fixes #77119 which was a late change in the spec.
11366 2005-12-23  Miguel de Icaza  <miguel@novell.com>
11368         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
11369         parent if its the same scope.  Fixes #77060.
11371 2005-12-21  Miguel de Icaza  <miguel@novell.com>
11373         * driver.cs: Report the case of no source files and no -out:
11374         argument provided.
11376 2005-12-20  Raja R Harinath  <rharinath@novell.com>
11378         Fix #77035.
11379         * expression.cs (ComposedCast.GetSignatureForError): Define.
11381 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
11383         Fix #76995
11385         * namespace.cs (NamespaceEntry): Add extern_aliases as a
11386         ListDictionary, to contain the ExternAliasEntry entries (in
11387         addition to the NamespaceEntry.aliases hashtable). This field is
11388         shared between the original entry and its doppelganger (bodyless 
11389         copy of it).
11390         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
11391         extern_aliases field.
11392         (NamespaceEntry.Lookup): Move the IsImplicit check after the
11393         lookup in extern_aliases.
11395 2005-12-16  Raja R Harinath  <rharinath@novell.com>
11397         Fix #77006.
11398         * class.cs (TypeContainer.Mark_HasEquals): New.
11399         (TypeContainer.Mark_HasGetHashCode): New.
11400         (ClassPart): Override them.
11401         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
11403         Fix #77008.
11404         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
11405         'parent' argument to the base constructor.
11407         Remove all mention of TypeContainer from decl.cs.
11408         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
11409         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
11410         (DeclSpace.DeclSpace): Likewise.
11411         (DeclSpace.DefineMembers): Remove unused argument.
11412         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
11413         debugging check -- we don't care if the debug code throws an
11414         InvalidCastException instead of an InternalErrorException.
11415         * class.cs (TypeContainer.DefineMembers): Update to changes.
11416         (TypeContainer.DoDefineMembers): Likewise.
11417         (TypeContainer.GetMethods): Likewise.
11418         (PropertyMember.Define): Likewise.
11419         (MemberBase.Parent): New property that forwards to
11420         MemberCore.Parent, but ensures that we get a TypeContainer.
11421         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
11422         (RootContext.PopulateTypes): Likewise.  Remove special case code
11423         for !RootContext.StdLib: DefineMembers is idempotent.
11425 2005-12-14  Miguel de Icaza  <miguel@novell.com>
11427         * convert.cs (ExplicitConversionCore): Check the return value from
11428         ExplicitConversionCore which can return null on failure.  Fixes #76914
11430 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
11432         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
11434 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
11436         * doc.cs : The search for referenced namespace was insufficient to
11437           get global one as it used to do. Fixed bug #76965.
11439 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
11441         * doc.cs : check name in cref in the last phase that whether it is
11442           namespace or not.
11444 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11446         * cs-tokenizer.cs : reverted the latest change: it somehow broke
11447           Mono.C5.
11449 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11451         * doc.cs : so it turned out that we cannot skip override check for 
11452           interface members. Fixed bug #76954.
11454 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11456         * cs-tokenizer.cs : fixed bug #75984:
11457           - #warning and #error should not be handled when the source line
11458             is disabled.
11459           - #line is not checked strictly when the source line is disabled.
11460           - #define and #undef is on the other hand checked strictly at any
11461             state.
11463 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
11465         * cs-tokenizer.cs : missing Location (actually, filename) in one of
11466           CS1027 report.
11468 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11470         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
11472         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
11473         event initializers.
11474         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
11475         (FieldBase.Initializer): Initializer is now optional.
11476         (EventField.Define): Only event field can have initializer.
11478         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
11480         * const.cs (Const): Reuse initializer.
11482         * cs-parser.jay: Updated after FieldBase changes.
11483         Added current_array_type to simplify array initializers.
11485         * ecore.cs (NullCast.IsDefaultValue): Implemented.
11487         * expression.cs, iterators.cs: Updated.
11489         * namespace.cs (NamespaceEntry): Made UsingFound private.
11491 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11493         * parameterCollection.cs: Obsolete, removed.
11494         * parser.cs: Obsolete, removed.
11496 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11498         Fix #76849.
11499         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
11501         * enum.cs (Enum.Define): Set obsolete context here.
11503 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
11505         * doc.cs :
11506           - FindDocumentedMember() now expects 1) paramList as null
11507             when "we don't have to check the number of parameters" and
11508             2) Type.EmptyTypes when "there is no arguments".
11509           - Introduced FoundMember struct to hold the exact type which was
11510             used to find the documented member (the above change broke
11511             test-xml-044; it might be better just to use DeclaringType than
11512             what MS does, like this change does, but it depends on usage.)
11514 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
11516         * doc.cs : documented member might be from DeclaringType for nested
11517           types. Fixed bug #76782.
11519 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
11521         * anonymous.cs: Have the param code handle leaving copies on the
11522         stack etc. Allows anonymous params to take part in the assignment
11523         code (++, +=, etc). Fixes bug #76550
11525         * expression.cs: Handle the prepare_for_load/leave_copy by passing
11526         it down to the anon code.
11528         * iterators.cs: Use dummy var here
11530         * codegen.cs: Handle new vars
11532 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
11534         Fix #76849.
11535         * class.cs (MethodData.Define): Set proper Obsolete context.
11537         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
11538         obsolete context.
11539         (FieldExpr.DoResolve): Ditto.
11541 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
11543         Fix #76849.
11544         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
11545         parent is not obsolete.
11547 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
11549         * doc.cs : (FindDocumentedMember) find parameterless members first
11550           and get CS0419 in the early stage. Fixed first case of bug #76727.
11552 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
11554         Fix #76859.
11555         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
11556         no error was reported.
11558         *expression.cs (Binary.DoResolve): left can be null.
11560 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
11562         Fix #76783.
11563         * class.cs (MethodData.Emit): Parameters should be labeled first.
11565 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
11567         Fix #76761.
11568         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
11570 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
11572         * attribute.cs (AreParametersCompliant): Moved to Parameter.
11574         * class.cs (MethodCore): Parameter clean up.
11575         (IMethodData): Added ParameterInfo.
11576         (MethodData): Parameter clean up.
11577         (Indexer.Define): Parameter clean up.
11579         * anonymous.cs,
11580         * codegen.cs,
11581         * cs-parser.jay,
11582         * decl.cs,
11583         * doc.cs,
11584         * ecore.cs,
11585         * flowanalysis.cs,
11586         * iterators.cs,
11587         * pending.cs,
11588         * statement.cs,
11589         * typemanager.cs: Parameter clean up.
11591         * delegate.cs (Define): Get rid of duplicated code.
11593         * expression.cs (ParameterReference): Removed useless parameters
11594         and simplified.
11595         (Invocation): Ditto.
11597         * parameter.cs (ParamsParameter): New class, params specialization.
11598         (ArglistParameter): Attemp to separate arglist.
11599         (Parameter): Refactored to be reusable and faster.
11600         (Parameter.Modifier): Made understandable.
11601         (Parameters): Changed to be used as a class for `this' assembly
11602         parameters. Refactored to use new specialized classes.
11604         * support.cs (ParameterData): Added Types property.
11605         (InternalParameters): Deleted.
11607 2005-08-20  Martin Baulig  <martin@ximian.com>
11609         Merging this patch from GMCS to fix #75867.
11611         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
11612         scope if we don't already have it.
11614 2005-11-17  Martin Baulig  <martin@ximian.com>
11616         * anonymous.cs
11617         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
11618         inherit the scope from our parent.  Fixes #76653.
11620 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11622         * doc.cs : the previous patch does not actually fix the bug.
11623           PropertyInfo override check is now implemented and really fixed it.
11624         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
11626 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11628         * doc.cs : apply "override filter" also to properties.
11629           Fixed bug #76730.
11631 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11633         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
11634           no need to check overrides. For classes, omit those results from 
11635           interfaces since they must exist in the class. Fixed bug #76726.
11637 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11639         * typemanager.cs : (GetFullNameSignature) differentiate indexers
11640           with different parameters. Fixed the second problem in #76685.
11642 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11644         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
11645           get expected 'protected' access in CheckValidFamilyAccess()).
11646           Fixed bug #76692.
11648 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11650         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
11651           Fixed bug #76705.  CS1569 was incorrectly commented out.
11653 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
11655         * doc.cs : use Invocation.IsOverride() to do real override check.
11656         * expression.cs : made Invocation.IsOverride() internal.
11658 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
11660         * doc.cs : use TypeManager.FindMembers() instead of (possible)
11661           TypeBuilder.FindMembers() and filter overriden base members out.
11662           Fixed bug #76990.
11664 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11666         * doc.cs : ref/out parameters are represented as '@' (instead of
11667           '&' in type FullName). Fixed bug #76630 (additionally crefs).
11669 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11671         * doc.cs : when there was no '.' in cref to methods in doc comment,
11672           then parameters were missing in the output. Fixed bug #76691.
11674 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11676         * driver.cs : don't output docs when there is an error.
11677           Fixed bug #76693.
11679 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11681         * doc.cs :
11682           Now it should detect indexers. Fixed primary concern in bug #76685.
11683           Fixed CS0419 message to not show the identical member signature in
11684           the message.
11686 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11688         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
11689           instead of Type.FindMembers() since it does not handle events.
11690           Fixed bug #71604.
11692 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
11694         * codegen.cs: Fixed typo (speficied -> specified).
11696 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
11698         Fix #76369.
11699         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
11701 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
11703         * attribute.cs: Changed error message.
11705         * cs-tokenizer.cs: One more check.
11707 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
11709         * statement.cs (Block.Resolve): Ignore empty statement.
11711 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
11713         * report.cs: Made error/warning methods more strict to avoid
11714         their misuse.
11716         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
11717         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
11718         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
11719         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
11721 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
11723         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
11724         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
11726         * class.cs (TypeContainer.IsComImport): New property.
11727         (Constructor.Define): Create proper ctor for ComImport types.
11729         * expression.cs (New.CheckComImport): Fixed.
11731 2005-11-07  Miguel de Icaza  <miguel@novell.com>
11733         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
11734         that a parameter has been captured does not mean that we do not
11735         have to do the rest of the processing.  This fixes the second part
11736         of #76592.  If there was another anonymous method capturing
11737         values in the past, the Scope would never be set for the second
11738         method that captured the same parameter.
11740         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
11741         properly manipulate the stack.   Second part of fix for #76592.
11743         * expression.cs (New): Add support for invoking "new" on
11744         interfaces that have been flagged with the ComImport attribute and
11745         the CoClass.  Fixes #76637 
11747         * statement.cs (Try.DoEmit): When a variable is captured, do not
11748         try to emit the vi.LocalBuilder variable as it has been captured.
11749         Create a temporary variable and store the results on the
11750         FieldBuilder.  Fixes #76642
11752 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
11754         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
11756         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
11758         * expression.cs (Binary.DoResolve): Added && optimalization.
11759     
11760         * typemanager.cs (AddUserType): Removed useless argument.
11762 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
11764         * statement.cs (Block.variables): Uses ListDictionary.
11766 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
11768         Fix #75969.
11769         * class.cs (PartialContainer.EmitType): Customized to emit
11770         security attributes.
11771         (ClassPart.ApplyAttributeBuilder): Transform security attribute
11772         for partial classes.
11774 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
11776         Fix #76599.
11777         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
11778         access has to be fixed.
11779         
11780         * typemanager.cs (IsUnmanagedType): Wrong common field type.
11782 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
11784         Fix #76590.
11785         * ecore.cs (NullCast.Reduce): Implemented.
11787         * expression.cs (ArrayCreation.CheckIndices): Correcly check
11788         constant type.
11789         
11790         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
11791         properly.
11792         (Foreach.Resolve): Catch null properly.
11794 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
11796         * cs-tokenizer.cs: Warning text fix.
11798         * driver.cs: AllWarningNumbers exposed on public interface.
11800         * report.cs (): Reviewed warning numbers.
11801         (IsValidWarning): Use binary search.
11803 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
11805         * driver.cs: Implemeted resource visibility.
11806         (Resources): New class for code sharing between /res: and
11807         /linkres:
11809 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
11811         Fix #76568.
11812         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
11813         folding.
11814         
11815         * convert (Convert.ImplicitReferenceConversion): NullCast holds
11816         contants only.
11817         
11818         * ecore.cs (NullCast): Child is contant only.
11819         
11820         * literal.cs (NullLiteral.Reduce): null can be converted to any
11821         reference type.
11823 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
11825         * driver.cs: Use Encoding.Default as default code page instead
11826           of ISO-28591.
11828 2005-10-27  Raja R Harinath  <rharinath@novell.com>
11830         Fix #76085.
11831         * expression.cs (Invocation.Error_InvalidArguments): Handle
11832         __arglist parameters.
11833         (Invocation.VerifyArgumentsCompat): Likewise.
11834         * support.cs (ReflectionParameters.GetSignatureForError): Print
11835         __arglist parameters.
11836         (InternalParamters.GetSignatureForError): Likewise.
11837         * parameter.cs (Parameters.GetSignatureForError): Likewise.
11839 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
11841         * attribute.cs (GetPropertyValue): Made public.
11843         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
11844         Resolve.
11845         Add new property WrapNonExceptionThrows to handle 2.0 assembly
11846         attribute.
11847         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
11848         is not defined.
11849         
11850         * driver.cs: Reflect method name change.
11851         
11852         * statement.cs (Try.Resolve): Warn when try has both general
11853         exception handlers.
11854         
11855         * typemanager.cs: runtime_compatibility_attr_type new predefined
11856         type.
11858 2005-10-26  Raja R Harinath  <harinath@gmail.com>
11860         Fix #76419.
11861         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
11862         treat it as an empty parameter list.
11864 2005-10-26  Raja R Harinath  <rharinath@novell.com>
11866         Fix #76271.     
11867         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
11868         ResolveAsTypeStep silent.
11869         * statement.cs (Block.AddConstant): Mark block as used.
11870         (Block.ResolveMeta): Avoid piling on error messages
11871         if a constant initializer resolution fails.
11873 2005-10-25  Raja R Harinath  <rharinath@novell.com>
11875         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
11876         Remove.
11877         (NamespaceEntry.VerifyAllUsing): New.
11878         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
11879         behaviour.  Delegates actual resolution of alias to ...
11880         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
11881         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
11882         Update.
11883         * driver.cs (Driver.MainDriver): Update.
11884         
11885         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
11886         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
11887         property.
11888         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
11889         Remove.
11890         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
11891         RootNamespace.DefineNamespacesForAll.
11893 2005-10-24  Raja R Harinath  <harinath@gmail.com>
11895         * typemanager.cs (assemblies, external_aliases, modules)
11896         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
11897         (ComputeNamespaces, GetRootNamespace): Remove extra staging
11898         overhead.  Move resposibility ...
11899         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
11900         * driver.cs, attribute.cs, codegen.cs: Update to changes.
11902 2005-10-23  Raja R Harinath  <harinath@gmail.com>
11904         * namespace.cs (RootNamespace.all_namespaces): Renamed from
11905         cached_namespaces.  Improve usage.
11906         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
11907         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
11908         Move from GlobalRootNamespace and simplify.
11909         (RootNamespace.Global): Make instance variable.
11910         (RootNamespace.RootNamespace): Add "alias name" parameter.
11911         (GlobalRootNamespace): Simplify drastically.
11912         (Namespace.Lookup): Don't use GetNamespace.
11913         * typemanager.cs (GetRootNamespace): Rename from
11914         ComputeNamespaceForAlias.
11915         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
11917 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11919         * anonymous.cs (AnonymousContainer): Don't crash when container
11920         doesn't exist.
11922 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11924         * expression.cs (Binary.DoResolve): Warn when comparing same
11925         values.
11927 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11929         Fix #76486.
11930         * expression.cs (Binary.DoResolve): It looks like there are no
11931         convetsion rules in enum context.
11933 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
11935         Add support for extern alias qualifiers.
11936         * typemanager.cs: Move some LookupTypeReflection code
11937         to namespace.cs, to have cleaner code. Added some methods
11938         to help us keep track of the extern aliased references.
11939         * driver.cs: Add suport for extern alias assemblies on command
11940         line and check for their warnings/errors. Also keep track of the
11941         extern aliased assemblies.
11942         * namespace.cs: Move the global functionality of Namespace
11943         to GlobalRootNamespace/RootNamespace. Now the global namespace
11944         is GlobalRootNamespace.Globa. Also the code moved from 
11945         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
11946         Finally added LocalAliasEntry (AliasEntry before) and
11947         ExternAliasEntry, to handle alias statements.
11948         * cs-parser.jay: Add support in the grammar for extern alias
11949         statement.
11950         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
11951         Update callings to Namespace (now in GlobalRootNamespace).
11953 2005-10-18  Raja R Harinath  <rharinath@novell.com>
11955         Fix #76371.
11956         * class.cs (TypeContainer.DefineType): Move updating of
11957         topological sort earlier in the code.
11958         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
11960 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
11962         Fix #76273.
11963         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
11964         
11965         * constant.cs (Constant.TryReduce): Moved from Cast class.
11966         (Reduce): Made little bit more OO and fixed missing conversions.
11967         
11968         * ecore.cs (Reduce): Implemented.
11969         (Binary.EnumLiftUp): New method to upgrade values to enum values.
11970         
11971         * literal.cs (Reduce): Implemented.
11972         
11973         * class.cs: Reverted Miguel's wrong commit.
11975 2005-10-14  Miguel de Icaza  <miguel@novell.com>
11977         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
11979 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
11981         * cs-parser.jay, expression.cs : CS0214 was missing error location
11982           for constants. Fixed bug #76404.
11984 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
11986         Fix #76370.
11987         * convert.cs (ExplicitConversionCore): Fixed object->enum
11988         conversion.
11990 2005-10-10  Raja R Harinath  <rharinath@novell.com>
11992         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
11993         InstanceExpression.
11994         (PropertyExpr.EmitCall): Likewise.
11995         * expression.cs (Invocation.EmitArguments): Handle case where
11996         arguments == null.
11997         (Invocation.EmitCall): Avoid allocating temporary variable if
11998         there are no arguments.
12000 2005-10-07  Raja R Harinath  <rharinath@novell.com>
12002         Fix #76323.
12003         * convert.cs (ImplicitConversionStandard): Move conversion of
12004         void* to arbitrary pointer types ...
12005         (ExplicitConversionStandard): .. here.
12006         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
12007         error to always print typenames.
12009 2005-10-07  Raja R Harinath  <rharinath@novell.com>
12011         * convert.cs (GetConversionOperator): Rename from
12012         GetConversionOperators.  Move operator selection code from ...
12013         (UserDefinedConversion): ... here.
12015 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
12017         * convert.cs (ExplicitConversionCore): Removed duplicate enum
12018         conversion.
12020 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
12022         * assign.cs (Assign.DoResolve): Error method changed.
12024         * cfold.cs (DoConstantNumericPromotions): Error method changed.
12025         
12026         * const.cs (ResolveValue): Reset in_transit immediately.
12027         
12028         * constant.cs: Error method changed.
12029         
12030         * convert.cs: Removed useless location parameter.
12031         (ExplicitNumericConversion): Don't do double enum check.
12032         (ExplicitConversionCore): Renamed from ExplicitConversion.
12033         (ExplicitUnsafe): Extracted from ExplicitConversion.
12034         (ExplicitConversion): Uses for error reporting.
12035         
12036         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
12037         error messages.
12038         (ResolveBoolean): Uses common error method.
12039         (CastToDecimal): Get rid of ec.
12040         (CastFromDecimal): Optimized.
12041         (ConvCast): Get rid of ec.
12042         
12043         * enum.cs (ResolveValue): Reset in_transit immediately.
12044         (Emit): Return after first error.
12045         
12046         * expression.cs: Convert changes.
12047         
12048         * literal.cs: Error method changed.
12049         
12050         * statement.cs: Error method changed.
12052 2005-10-03  Raja R Harinath  <rharinath@novell.com>
12054         * support.cs (SeekableStreamReader.Position): Don't error out when
12055         the requested position is just beyond the end of the current
12056         buffered data.
12058 2005-09-28  Raja R Harinath  <rharinath@novell.com>
12060         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
12061         try to keep in sync with the byte count of the underlying Stream.
12062         However, this limits us to a window size of 2048 characters: i.e.,
12063         the maximum lookahead of our lexer/parser can be 2048 characters.
12065 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
12067         Fix #76255.
12068         * driver.cs: Fix compilation files with full root path.
12070 2005-09-25  Miguel de Icaza  <miguel@novell.com>
12072         * report.cs (SymbolRelatedToPreviousError): Format the output so
12073         it does not use an open parenthesis that is never closed. 
12075         * driver.cs: Follow coding guidelines
12077 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
12079         Fix #72930.
12080         * const.cs (Const.ResolveValue): Check for assigning non-null
12081         value to reference type.
12083 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
12085         * anonymous.cs: Implemented ExprClassName.
12086         
12087         * assign.cs (Assign.DoResolve): Don't chrash when type is not
12088         delegate.
12089         
12090         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
12091         check.
12092         
12093         * class.cs (StaticClass.DefineContainerMembers): Report protected
12094         members as error.
12095         
12096         * codegen.cs: if(ed) PRODUCTION.
12097         
12098         * convert.cs (Error_CannotImplicitConversion): Better error
12099         distinction.
12100         
12101         * cs-parser.jay: More error checks.
12102         
12103         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
12104         
12105         * driver.cs (CSCParseOption): Enabled wrong option check.
12106         
12107         * ecore.cs (Expression.ExprClassName): Turned to property.
12108         (MemberExpr.CheckIntermediateModification): For checking boxed
12109         value types     modification.
12110         
12111         * statement.cs (Fixed.Resolve): Expression type must be
12112         convertible to fixed type.
12113         (CollectionForeach.GetEnumeratorFilter,TryType):
12114         Small refactoring for easier error checking.
12116 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
12118         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
12119         attributes.
12120         
12121         * class.cs (GeneratedBaseInitializer): New class for customization
12122         compiler generated initializers.
12123         (MemberBase.DoDefine): Check Obsolete attribute here.
12124         (FieldMember.DoDefine): Ditto.
12125         
12126         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
12127         constants.
12128         
12129         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
12130         (MemberCore.GetObsoleteAttribute): Removed argument.
12131         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
12132         (MemberCore.CheckObsoleteType): New helper.
12133         
12134         * delegate.cs,
12135         * enum.cs,
12136         * statement.cs: Updates after MemberCore changes.
12137         
12138         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
12139         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
12140         
12141         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
12142         obsolete attribute for compiler construct.
12143         (As.DoResolve): Cache result.
12144         
12145         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
12147 2005-09-26  Raja R Harinath  <rharinath@novell.com>
12149         Fix #76133.
12150         * expression.cs (This.VerifyFixed): In a value type T, the type of
12151         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
12152         value type R, 'this' is treated as a value parameter.
12154 2005-09-22  Miguel de Icaza  <miguel@novell.com>
12156         * statement.cs (Lock): Use the TemporaryVariable class instead of
12157         manually using local variables as those do not work when variables
12158         are captured.
12160         * ecore.cs: Moved the TemporaryVariable class from being a nested
12161         class inside Foreach to be a public class that can be employed in
12162         other places. 
12164 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
12166         * cs-parser.jay: interface_accessors replaced by
12167         accessor_declarations.
12169         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
12170         location.
12171         
12172         * statement.cs (GotoCase.Resolve): Convert null constant to
12173         null case.
12174         (SwitchLabel.ResolveAndReduce): Ditto.
12175         (SwitchLabel.NullStringCase): Custom null stamp.
12176         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
12177         
12178         typemanager.cs (CSharpSignature): Don't skip first argument
12179         for full names.
12181 2005-09-18  Miguel de Icaza  <miguel@novell.com>
12183         * driver.cs: Set InEmacs based on the environment variable EMACS. 
12185         * location.cs (InEmacs): in this mode, do not report column
12186         location as it confuses Emacs.
12188 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
12190         * cfold.cs, constant.cs, convert.cs, ecore.cs,
12191         expression.cs, iterators.cs, literal.cs: Store constants and
12192         literals location.
12193         
12194         * class.cs (MemberBase.ShortName): Pass location.
12195         
12196         * cs-parser.jay: Some location fixes.
12197         
12198         * ecore.cs (Expression.Location): Made virtual.
12200 2005-09-05  Miguel de Icaza  <miguel@novell.com>
12202         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
12203         if the underlying types are the same, otherwise we need to produce
12204         code that will do the proper cast.
12206         This was exposed by Marek's constant rewrite which produced
12207         invalid code for the call site:
12209         enum X : long { a }
12210         void Method (X v) {}
12212         Method ((X) 5)
12214         This fixes test-49.cs
12216 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
12218         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
12219           Type/Object should be allowed as well. Fixed bug #75968.
12221 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
12223         * expression.cs : (Binary.DoResolve): when one is enum constant and
12224           another is constant 0, then return enum one *as enum type*.
12225           Fixed bug 74846.
12227 2005-09-02  Raja R Harinath  <rharinath@novell.com>
12229         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
12230         internal.
12232         Fix #75941.
12233         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
12234         flow-branching for LocalVariableReferences in case we were invoked
12235         from a MemberAccess.
12236         * expression.cs (LocalVariableReference.VerifyAssigned): New.
12237         Carved out of ...
12238         (LocalVariableReference.DoResolveBase): ... this.
12239         (MemberAccess.Resolve): Do the check that was disabled during
12240         SimpleNameResolve.
12242 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
12244         * class.cs :
12245           (PartialContainer.Create): check abstract/sealed/static strictly
12246           but abstract/sealed can exist only at one side. Fixed bug #75883.
12248 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
12250         Fix #75945.
12251         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
12252         specified, don't default to UnmanagedType.I4.
12254 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
12256         * expression.cs : conditional operator should check possibly
12257           incorrect assign expression. Fixed bug #75946.
12259 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
12261         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
12262           Reverting the change. gmcs is much complex than mcs on this matter.
12264 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
12266         * cs-tokenizer.cs : To read another token ahead of the actual 
12267           consumption, use new SavedToken and cache token instead of moving
12268           back the stream with SeekableStreamReader (it seemed problematic).
12269         * cs-parser.jay,
12270           driver.cs : Thus use StreamReader directly.
12271         * support.cs : Thus removed SeekableStreamReader.
12273 2005-08-30  Raja R Harinath  <rharinath@novell.com>
12275         Fix #75934.
12276         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
12277         (ScopeInfo.EmitScopeType): Use it to construct field names from
12278         names of captured locals.
12280         Fix #75929.
12281         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
12282         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
12283         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
12284         (ExplicitConversion): Remove enum cases already handled by
12285         implicit conversion.  Move implicit conversion check to the beginning.
12286         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
12287         * expression.cs (ArrayCreation.EmitDynamicInitializers):
12288         Don't treat System.Enum as a struct.
12290 2005-08-30  Jb Evain  <jbevain@gmail.com>
12292         * attribute.cs: handles as expression in parameters.
12294 2005-08-30  Raja R Harinath  <rharinath@novell.com>
12296         Fix #75802.
12297         * class.cs (TypeContainer.VerifyClsName): Don't use a
12298         PartialContainer when verifying CLS compliance.
12299         (AbstractPropertyEventMethod): Set Parent here, ...
12300         (PropertyMethod): ... not here.
12302 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
12304         * attribute.cs : escaped attribute name should not be allowed to be
12305           resolved (e.g. @class as classAttribute). Fixed bug #75930.
12307 2005-08-29  Raja R Harinath  <rharinath@novell.com>
12309         Fix #75927.
12310         * convert.cs (ImplicitStandardConversionExists): Allow zero also
12311         when converting a long constant to unsigned long.
12312         * expression.cs (Invocation.OverloadResolve): Add sanity check to
12313         detect where IsApplicable and VerifyArgumentsCompat disagree.
12315 2005-08-29  Raja R Harinath  <rharinath@novell.com>
12316         and Carlos Alberto Cortez  <carlos@unixmexico.org>
12318         Fix #75848.
12319         * class.cs (TypeContainer.CanElideInitializer): New helper.
12320         (TypeContainer.EmitFieldInitializers): Use it to determine if we
12321         can safely emitting the initializer of a field.
12323 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12325         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
12326           allowed inside a switch (without loop). Fixed bug #75433.
12328 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
12330         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
12331         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
12333 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12335         * driver.cs : kinda reverting the default encoding changes (not exact 
12336           revert since I noticed that "codepage:reset" might not work fine).
12338 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12340         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
12341           Location. Now getter and setter store location correctly.
12342           (errors/cs0111-12.cs now reports the expected location.)
12344 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12346         * driver.cs : Use default encoding on the environment.
12347           Removed (now that) extra parameter for SeekableStreamReader.
12348         * support.cs : (SeekableStreamReader) third .ctor() argument for
12349           StreamReader is not required (always true). preamble size could
12350           be acquired in simpler and safe way.
12352 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
12354         * cs-parser.jay: report CS0642 at warning level 3
12355           and report CS0642 for an if else statement also
12356           fixes bug #74745. Patch by John Luke (and a bit
12357           modified by me).
12358           Removed extra CS0642 warning check for "while",
12359           "for" and "fixed".
12360         * statement.cs: In Block.Resolve(), CS0642 check
12361           is reimplemented to check a sequence of an empty
12362           statement and a block.
12364           Both fix bug #66777.
12366 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
12368         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
12369         detection until I fix it.
12370         
12371         * cs-tokenizer.cs: Changed error message.
12372         
12373         * cs-parser.jay: Fixed 2 error locations.
12374         
12375         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
12376         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
12377         properties.
12378         
12379         * enum.cs (GetSignatureForError): Fixed.
12380         
12381         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
12382         method detection.
12383         
12384         * class.cs,
12385         * typemanager.cs (RegisterProperty): Removed.
12386         
12387         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
12389 2005-08-24  Raja R Harinath  <rharinath@novell.com>
12391         Fix #75874.
12392         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
12393         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
12395 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12397         * expression.cs : tiny fix is required for not warning positive ulong.
12398           See test-441.cs.
12400 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12402         * expression.cs : add CS0652 check for constant and integral
12403           expression. Fixed bug #53974.
12405 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12407         * expression.cs : in DoNumericPromotions(), check if there is implicit
12408           conversion overload for string (to check CS0034). Fixed bug #52492.
12410 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12412         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
12414 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12416         * ecore.cs : report location when it is *not* Null.
12418 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12420         * codegen.cs,
12421           ecore.cs,
12422           flowanalysis.cs,
12423           expression.cs:
12424           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
12425           correctly. Fixed bug #75721.
12427 2005-08-23  Raja R Harinath  <rharinath@novell.com>
12429         * support.cs (SeekableStreamReader.Position): Avoid an expensive
12430         loop that performs 'min (pos, char_count)'.
12432         Fix #75862.
12433         * expression.cs (Unary.ResolveOperator): Don't discard implicit
12434         converted value in Operator.OnesComplement.
12436 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
12438         * anonymous.cs: If the anon method is pulled into a helper class,
12439         it needs to be `internal' not `private'. Fixes runtime behavior on
12440         msft. bug #75704
12442 2005-08-20  Martin Baulig  <martin@ximian.com>
12444         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
12445         scope if we don't already have it.
12447         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
12448         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
12449         fixes #75867.
12451 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
12453         Fix #75803
12454         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
12455         is a partial class.
12457 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
12459         The big constants rewrite
12460         Fix #75746, #75685 and more
12461         As a side effect saved 1MB for MWF ;-)
12462         
12463         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
12464         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
12465         enum based for corlib compilation.
12466         
12467         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
12468         subtractions.
12469         
12470         * class.cs (FixedField.Define): Use ResolveAsConstant.
12471         
12472         * const.cs (IConstant): Interface constants and enums.
12473         (Const.ResolveValue): New method for constant resolvning.
12474         (ExternalConstant): Constants from imported assemblies.
12475         
12476         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
12477         conversion; like enums.
12478         (Constant.ToType): Converts this constant to different type.
12479         (Constant.Increment): Adds 1.
12480         
12481         * convert.cs (ImplicitConversionRequired): Simplified.
12482         
12483         * cs-parser.jay: Create EnumMember directly.
12484         
12485         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
12486         
12487         * doc.cs (GenerateEnumDocComment): Removed.
12488         
12489         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
12490         (ConvertIntLiteral): Removed.
12491         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
12492         
12493         * enum.cs (EnumMember): Implement IConstant.
12494         (Enum.IsValidEnumConstant): Removed.
12495         (Enum.GetNextDefaultValue): Removed.
12496         (Enum.FindMembers): Updated.
12497         (Enum.GenerateDocComment): Iterate enum members.
12498         
12499         * expression.cs (Cast.TryReduce): Handle enums correctly.
12500         (New.Constantify): Made public.
12501         (MemberAccess.DoResolve): Removed contant specific if(s).
12502         
12503         * literal.cs (NullLiteral): Implement new abstract methods.
12504         
12505         * statement.cs (GotoCase.Resolve): Use new constant methods.
12506         (SwitchLabel.ResolveAndReduce): Use new constant methods.
12507         
12508         * typemanager.cs (LookupEnum): Removed.
12509         (IsEnumType): Fixed to work with corlib.
12510         (RegisterConstant): Removed.
12511         (LookupConstant): Removed.
12512         (GetConstant): Changed to work with IConstant.
12514 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
12516         * location.cs : Fixed overflown (>255) column number.
12518 2005-08-03  Raja R Harinath  <rharinath@novell.com>
12520         First cut of the qualified-alias-member feature.
12521         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
12522         token.
12523         * cs-parser.jay (DOUBLE_COLON): New token.
12524         (namespace_or_type_name): Add rule for recognizing
12525         qualified-alias-members.
12526         (primary_expression): Likewise.
12527         (element_access): Allow QualifiedAliasMember as a possible
12528         type-bearing expression.
12529         (local_variable_type, local_variable_pointer_type): Likewise.
12530         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
12531         aliases in the current and enclosing namespace declarations.
12532         (NamespaceEntry.UsingAlias): Add CS0440 warning.
12533         * decl.cs (MemberName.is_double_colon): New.
12534         (MemberName.MemberName): Add new constructor for alias-member.
12535         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
12536         * expression.cs (QualifiedAliasMember): New expression type.
12538 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12540         * location.cs : it borked when no argument was specified.
12542 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12544         * location.cs : tiny ToString() format fix.
12546 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12548         * statement.cs : oops, it was missing.
12550 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12552         A set of fixes for precise line/column location.
12554         * location.cs :
12555           "token" field now holds a file/line "delta", a line number offset 
12556           from the segment, and a column number. See also:
12557           http://lists.ximian.com/pipermail/mono-devel-list/2004-
12558           December/009508.html
12559           Removed static IsNull. Use instance IsNull property instead.
12560         * cs-tokenizer.cs :
12561           For some tokens it stores Location. For Identifier it stores
12562           LocatedToken which is a pair of string name and location.
12563           Column numbers are adjusted only at getChar().
12564         * report.cs :
12565           Use Location.ToString() for reporting (it now contains column).
12566         * cs-parser.jay :
12567           Largely modified to use LocatedToken instead of
12568           string (IDENTIFIER), and to acquire Location from some tokens.
12569         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
12570           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
12571           codegen.cs :
12572           Now MemberName holds Location. DeclSpace.ctor() receives Location
12573           as a parameter. Removed extra parameters to all derived classes.
12574           Replaced Location.IsNull() with instance property.
12575         * assign.cs, expression.cs :
12576           Added .ctor() overload that omits Location.
12577         * attribute.cs :
12578           Added "nameEscaped" flag that indicates the identifier was escaped
12579           in the source file. This fixes bug #57047.
12581 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
12583         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
12584         New method, looking for lo-case imported cls type.
12586         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
12587         here.
12589         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
12591         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
12593         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
12594         all_imported_types.
12595         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
12597         Optimized to save 3.5 MB for SWF compilation.
12599 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
12601         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
12602         (PartialContainer.Create): Moved logic AddToContainer.
12603         (PartialContainer.MarkForDuplicationCheck): Shares name.
12604         
12605         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
12606         place.
12607         
12608         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
12609         initialization.
12610         (Namespace.GetSignatureForError): New method.
12611         
12612         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
12613         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
12615 2005-08-01  Raja R Harinath  <rharinath@novell.com>
12617         Fix #75669.
12618         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
12619         member lookup rather than qualifier_type, since qualifier_type can
12620         be null.
12622 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
12624         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
12625         enum member.
12627 2005-07-31  Miguel de Icaza  <miguel@novell.com>
12629         * statement.cs: Copy the local exception into the exception
12630         captured local.  Fixes 75674
12632 2005-07-31  Raja R Harinath  <harinath@gmail.com>
12634         Fix #75658.
12635         * expression.cs (Invocation.OverloadResolve): Don't report error
12636         CS1501 if error CS1502 has been reported.
12637         (New.DoResolve): Delegate CS1501 reporting to
12638         Invocation.OverloadResolve.
12640         Fix #75656.
12641         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
12642         invariant-meaning-in-block property in an enclosing block if
12643         necessary.
12645 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
12647         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
12648         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
12649         (Switch.CheckSwitch): Just save 50kb for SWF.
12651 2005-07-27  Martin Baulig  <martin@ximian.com>
12653         * anonymous.cs (CaptureContext.AddField): Added
12654         `AnonymousContainer am' argument; compute its toplevel scope if
12655         it's not already computed.  Fixes #75649.
12657 2005-07-26  Raja R Harinath  <rharinath@novell.com>
12659         Fix #75628.
12660         * class.cs (Constructor.Emit): Reset block to null if the block
12661         resolve fails.
12663 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
12665         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
12667 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
12669         * class.cs (MethodData.Define): Check whether accessor implementing
12670         interface is public.
12672         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
12674 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
12676         Fix #57245
12677         * namespace.cs (LookupType): Moved same type check to...
12678         
12679         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
12680         with the same name.
12682 2005-07-21  Raja R Harinath  <rharinath@novell.com>
12684         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
12685         already found a typebuilder.
12686         * class.cs (MethodCore.IsDuplicateImplementation): Compare
12687         MemberNames, not strings.
12689         * const.cs (Error_ExpressionMustBeConst): 
12690         Rename from Error_EpressionMustBeConst.
12691         * const.cs, class.cs, statement.cd: Update.
12693 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
12695         Fix #65573
12697         * const.cs (Const.LookupConstantValue): Report missing contant expression
12698         everytime.
12699         (Error_EpressionMustBeConstant): Only one error method.
12701         * class.cs, statement.c: Updated.
12703 2005-07-20  Raja R Harinath  <rharinath@novell.com>
12705         * statement.cs (Block.Flags): Add back HasVarargs.
12706         (Block.flags): Make protected.
12707         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
12709         * typemanager.cs (types, typecontainers, user_types): Remove.
12710         (UserTypes, TypeContainers): Likewise.
12711         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
12712         (CleanUp, Reset): Update.
12713         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
12714         (GetNestedType): Use Type.GetNestedType.
12715         (CoreLookupType): Take two arguments, the namespace and the
12716         basename of the type.  Update to use the Namespace.Lookup
12717         mechanism.
12718         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
12719         (RealMemberLookup): Use IsNestedChildOf instead of playing with
12720         string concatenation and substring matches.
12721         * class.cs, enum.cs, delegate.cs: Update to changes.
12723 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
12725         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
12726         Expression and made virtual.
12728         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
12729         (ImplicitStandardConversionExists): Fixed `byte' typo ?
12731         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
12733         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
12734         error message.
12736         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
12737         change.
12739 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
12741         Fix #57707
12742         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
12743         AssemblyCultureAttribute is not used on executable.
12745         * rootcontext.cs,
12746         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
12748 2005-07-16  Raja R Harinath  <rharinath@novell.com>
12750         Fix #60638.
12751         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
12752         New.  Reports CS0252/CS0253.
12753         Mostly taken from preliminary patch by Duncak Mak.
12754         (Binary.DoResolveOperator): Store results of operator lookup.
12755         Use them to detect if we need to warn about unintended reference
12756         comparisons.
12758 2005-07-15  Raja R Harinath  <rharinath@novell.com>
12760         Fix #72969.
12761         * namespace.cs (Namespace.Lookup): Add back location parameter.
12762         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
12763         * delegate.cs, ecore.cs, expression.cs: Update to changes.
12765         * codegen.cs (EmitContext.DeclSpace): Make readonly.
12766         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
12767         (Namespace.LookupType): ... this.
12768         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
12769         of namespaces.
12770         * typemanager.cs (LookupTypeReflection): Remove buggy code that
12771         purported to handle pointers.
12772         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
12773         CoreLookupType.
12775 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
12777         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
12778         type as namespace.
12780 2005-07-15  Raja R Harinath  <rharinath@novell.com>
12782         * namespace.cs (Namespace.Lookup): Drop location parameter.
12783         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
12784         (NamespaceEntry.Lookup): ... this.
12785         (NamespaceEntry.Error_AmbiguousTypeReference):
12786         Move here from DeclSpace.
12787         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
12788         names ...
12789         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
12790         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
12791         Move to NamespaceEntry.
12792         * delegate.cs, expression.cs: Update to changes.
12794 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
12796         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
12797         CheckAttributeType and refactored.
12798         (Attribute.ResolvePossibleAttributeType): Changed to reuse
12799         ResolveAsTypeTerminal error handling.
12800         (ResolveAsTypeTerminal): Introduced because of global attributes extra
12801         handling.
12802         (GetSignatureForError): Print errors in same way.
12804         * class.cs,
12805         * codegen.cs: Reflect attribute GetSignatureForError change.
12807         * ecore.cs,
12808         * expression.cs: Add silent parameter to ResolveAsTypeStep.
12810         * namespace.cs (UsingEntry): Refactored to make fields private.
12812         * assign.cs,
12813         statement.cs: Error_UnexpectedKind has extra parameter.
12815 2005-07-14  Raja R Harinath  <rharinath@novell.com>
12817         * ecore.cs (IAlias): Remove.
12818         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
12819         that implement the interface.
12820         * namespace.cs (Namespace): Likewise.
12821         (Namespace.declspaces): Renamed from 'defined_names'.
12822         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
12823         DeclSpace instead of an IAlias.
12824         * tree.cs (Tree.AddDecl): Update.
12826 2005-07-12  Raja R Harinath  <rharinath@novell.com>
12828         * statement.cs (Block.Flags); Remove HasVarargs.
12829         (Block.HasVarargs): Move to ToplevelBlock.
12830         (Block.ThisVariable, Block.AddThisVariable): Likewise.
12831         (Block.Variables): Make protected.  Initialize variable hashtable
12832         if necessary.
12833         (Block.AddVariable): Update.
12834         (Block.Resolve): Update to changes.
12835         (ToplevelBlock.HasVarargs): New boolean.
12836         (ToplevelBlock.ThisVariable): Move here from Block.
12837         (ToplevelBlock.AddThisVariable): Likewise.
12838         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
12839         * expression.cs (This.ResolveBase): Update to changes.
12840         (ArglistAccess.DoResolve): Likewise.
12842 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
12844         Fix #75321
12845         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
12847         * class.cs (TypeContainer.VerifyMembers): Distinguish between
12848         not used and not used & assigned.
12849         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
12851 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
12853         Fix #75053
12854         * expression.cs (Is.DoResolve): null is never provided type.
12856 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
12858         Fix #52496
12859         * cs-parser.jay: Less strict event error rule to catch more errors.
12861 2005-07-08  Martin Baulig  <martin@ximian.com>
12863         Fix test-iter-10.cs - distinguish whether we `yield' in a property
12864         gettter (allowed) or setter (not allowed).
12866         * class.cs (Accessor): Implement IIteratorContainer.
12867         (Accessor.Yields): New public field.
12868         (PropertyBase.PropertyMethod.Define): Handle iterators on a
12869         per-accessor basis.
12871         * cs-parser.jay
12872         (get_accessor_declaration, set_accessor_declaration): Set the
12873         `yields' flag on the accessor, not the property.
12874         (property_declaration): Do the iterators check on a per-accessor
12875         basis and not for the whole property.
12877 2005-07-08  Martin Baulig  <martin@ximian.com>
12879         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
12880         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
12882 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
12884         Fix #74975
12885         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
12886         (ExtractSecurityPermissionSet): Cope with self referencing security
12887         attributes properly.
12889         * driver.cs (SetOutputFile): Made public property OutputFile.
12891 2005-07-07  Raja R Harinath  <rharinath@novell.com>
12893         Fix #75486.
12894         * class.cs (TypeContainer.first_nonstatic_field): Rename from
12895         has_nonstatic_fields.  Make into a FieldBase pointer.
12896         (TypeContainer.AddField): Add CS0282 check.
12897         (TypeContainer.EmitType): Update.
12899 2005-07-06  Miguel de Icaza  <miguel@novell.com>
12901         * cs-tokenizer.cs (consume_identifier): Do not create strings to
12902         compare if they start with __.
12904 2005-07-06  Raja R Harinath  <rharinath@novell.com>
12906         * statement.cs (Switch.SwitchGoverningType): Only look at
12907         UserCasts that don't need implicit standard conversions to one of
12908         the allowed switch types (Fixes test-322.cs).
12909         (LocalInfo.Resolve): Re-enable sanity-test.
12911 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
12913         * cs-tokenizer.cs (consume_identifier): Detect double undescores
12914         
12915         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
12916         
12917         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
12919 2005-07-06  Raja R Harinath  <rharinath@novell.com>
12921         Fix #75472.
12922         * ecore.cs (SimpleName.GetSignatureForError): Add.
12923         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
12924         (MemberAccess.GetSignatureForError): Add.
12926 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
12928         The big error and warning messages review.
12929         
12930         * anonymous.cs,
12931         * assign.cs,
12932         * attribute.cs,
12933         * class.cs,
12934         * codegen.cs,
12935         * convert.cs,
12936         * cs-parser.jay,
12937         * cs-tokenizer.cs,
12938         * decl.cs,
12939         * delegate.cs,
12940         * doc.cs,
12941         * driver.cs,
12942         * ecore.cs,
12943         * enum.cs,
12944         * expression.cs,
12945         * flowanalysis.cs,
12946         * iterators.cs,
12947         * literal.cs,
12948         * location.cs,
12949         * modifiers.cs,
12950         * namespace.cs,
12951         * parameter.cs,
12952         * pending.cs,
12953         * report.cs,
12954         * rootcontext.cs,
12955         * statement.cs,
12956         * support.cs,
12957         * tree.cs,
12958         * typemanager.cs: Updated.
12959         
12960         * class.cs: (MethodCore.SetYields): Moved here to share.
12961         (PropertyMethod.Define): Moved iterator setup here.
12962         
12963         * iterators.cs: Add orig_method to have full access to parent
12964         container.
12966 2005-07-05  Raja R Harinath  <rharinath@novell.com>
12968         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
12969         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
12970         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
12971         variable of struct type.
12972         * expression.cs (Unary.ResolveOperator): Update to change.
12973         (Indirection.VerifyFixed): Likewise.
12974         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
12975         (ParameterReference.VerifyFixed): Value parameters are fixed.
12976         (This.VerifyFixed): Treat 'this' as a value parameter.
12977         * statement.cs (LocalInfo.IsFixed): Remove.
12979 2005-07-01  Martin Baulig  <martin@ximian.com>
12981         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
12982         `ec.EmitThis ()' to get the correct scope.
12984 2005-07-01  Martin Baulig  <martin@ximian.com>
12986         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
12987         instance is a ParameterReference; fixes #75299.
12989 2005-07-01  Martin Baulig  <martin@ximian.com>
12991         Reverted Marek's latest patch (r46725):
12992         - it contains structural changes which are neither mentioned in
12993           the ChangeLog nor explained anywhere; for example the additional
12994           argument of EmitContext's and Iterator's .ctor's and the
12995           TypeContainer.DefineMembers() change.
12996         - structural changes like this should go in in seperate patches
12997           and not be hidden in a huge patch which just seems to affect
12998           warnings and errors.
12999           a big and hard to understand patch.
13000         - it breaks iterators and causes regressions, for instance in
13001           test-iter-03.cs.      
13003 2005-06-30  Raja R Harinath  <rharinath@novell.com>
13005         Fix #75412.
13006         * expression.cs (Indexers.map): Remove.
13007         (Indexers.Append): Filter out inaccessible setters and getters.
13008         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
13010         Fix #75283.
13011         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
13012         Refactored from ...
13013         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
13014         (FieldExpr.Emit, PropertyExpr.Emit): Update.
13015         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
13016         * expression.cs (Invocation.EmitCall): Add CS0120 check.
13018 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
13020         Fix #75322
13021         * class.cs (FieldBase.GetInitializerExpression): One more field
13022         for backup.
13024 2005-06-28  Miguel de Icaza  <miguel@novell.com>
13026         * pending.cs: Do not define a proxy if the base method is virtual,
13027         it will be picked up by the runtime (bug 75270).
13029 2005-06-08  Martin Baulig  <martin@ximian.com>
13031         The big Iterators rewrite :-)
13033         * iterators.cs: Rewrite this to use the anonymous methods framework.
13035         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
13036         before the TypeContainers; see 2test-21.cs.
13038         * class.cs
13039         (TypeContainer.DefineType): Don't create a new EmitContext if we
13040         already have one (this only happens if we're an Iterator).
13041         (TypeContainer.Define): Also call Define() on all our iterators.
13042         (Method.CreateEmitContext): Added support for iterators.
13044         * anonymous.cs
13045         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
13046         (AnonymousContainer.CreateMethodHost): Moved here from
13047         AnonymousMethod and made abstract.
13048         (AnonymousContainer.CreateScopeType): New abstract method.
13049         (AnonymousContainer.IsIterator): New public property.
13050         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
13051         get the ScopeTypeBuilder rather than manually defining it here. 
13052         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
13053         iterators here.
13055         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
13056         before RootContext.DefineTypes().
13058         * codegen.cs (EmitContext.RemapToProxy): Removed.
13059         (EmitContext.CurrentAnonymousMethod): Changed type from
13060         AnonymousMethod -> AnonymousContainer.
13061         (EmitContext.ResolveTopBlock): Protect from being called twice.
13062         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
13063         (EmitContext.EmitThis): Removed the iterators hacks; use the
13064         anonymous methods framework for that.
13066         * statement.cs
13067         (ToplevelBlock.Container): Make this a property, not a field.
13068         (ToplevelBlock.ReParent): New public method; move the
13069         ToplevelBlock into a new container.
13070         (Foreach.TemporaryVariable): Simplify.
13072 2005-06-05  Martin Baulig  <martin@ximian.com>
13074         * statement.cs (LocalInfo.CompilerGenerated): New flag.
13075         (Block.AddTemporaryVariable): New public method; creates a new
13076         `LocalInfo' for a temporary variable.
13077         (Block.EmitMeta): Create the LocalBuilders for all the temporary
13078         variables here.
13079         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
13080         non-iterator variables.
13082 2005-06-05  Martin Baulig  <martin@ximian.com>
13084         * statement.cs (Foreach.TemporaryVariable): Create the
13085         LocalBuilder in the Emit phase and not in Resolve since in some
13086         situations, we don't have an ILGenerator during Resolve; see
13087         2test-19.cs for an example.
13089 2005-06-04  Martin Baulig  <martin@ximian.com>
13091         **** Merged r45395 from GCS ****
13093         The big Foreach rewrite - Part II.
13095         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
13096         with `PropertyInfo ienumerator_getcurrent'.
13098         * codegen.cs (VariableStorage): Removed.
13100         * statement.cs
13101         (Foreach): Derive from Statement, not ExceptionStatement.
13102         (Foreach.CollectionForeach): New nested class.  Moved all the code
13103         dealing with collection foreach here.
13104         (Foreach.ForeachHelperMethods): Removed.
13105         (Foreach.TemporaryVariable): Implement IMemoryLocation.
13107 2005-05-23  Martin Baulig  <martin@ximian.com>
13109         * statement.cs (Try.DoResolve): Don't create a `finally' if we
13110         don't need to.  Fix #75014.
13112 2005-05-20  Martin Baulig  <martin@ximian.com>
13114         Merged r44808 from GMCS.
13116         * class.cs (TypeContainer.CircularDepException): Removed.
13117         (TypeContainer.DefineType): Removed the `InTransit' stuff.
13118         (TypeContainer.CheckRecursiveDefinition): Check for circular class
13119         (CS0146) and interface (CS0529) dependencies here.
13121 2005-06-21  Raja R Harinath  <rharinath@novell.com>
13123         * expression.cs (Invocation.EmitCall): Fix initialization
13124         'this_call' to reflect current behaviour.  Fix indentation.
13126         * convert.cs (FindMostEncompassedType): Add two trivial special
13127         cases (number_of_types == 0 || number_of_types == 1).
13128         (FindMostEncompasingType): Likewise.
13130 2005-06-17  Raja R Harinath  <rharinath@novell.com>
13132         Some cleanups preparing for the fix of #75283.
13133         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
13134         error testing.
13135         (EventExpr.InstanceResolve): Likewise.
13136         (EventExpr.DoResolve): Remove redundant checks.
13138 2005-06-10  Duncan Mak  <duncan@novell.com>
13140         * cs-tokenizer.cs (process_directives): New flag for controlling
13141         the processing of preprocessor directives.
13142         (x_token): After seeing a '#', return Token.NONE instead of going
13143         to handle_preprocessing_directive() when not processing
13144         directives. This avoids unnecessary processing during the token peek in
13145         is_punct().
13147         This fixes #74939.
13149         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
13150         the existing error reporting methods instead of Report.Error.
13152         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
13153         after Raja's rewrite.
13155 2005-06-08  Miguel de Icaza  <miguel@novell.com>
13157         * class.cs: Small fix.
13159 2005-06-08  Raja R Harinath  <rharinath@novell.com>
13161         Fix #75160.
13162         * class.cs (GetPartialBases): Fix return value check of
13163         part.GetClassBases.
13165 2005-06-07  Raja R Harinath  <rharinath@novell.com>
13167         Ensure that partial classes are registered in their enclosing
13168         namespace.  Initial part of fix of #75160.
13169         * tree.cs (Tree.RecordDecl): Add new namespace argument.
13170         Register declspace with namespace here, not in
13171         DeclSpace.RecordDecl.
13172         * cs-parser.jay: Pass namespace to RecordDecl.
13173         * class.cs (PartialContainer.Create): Likewise.
13174         (ClassPart.DefineType): New sanity-check.  Throws an exception if
13175         called.
13176         * decl.cs (Declspace.RecordDecl): Remove.
13177         * namespace.cs (NamespaceEntry.DefineName): Remove.
13179 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
13181         * rootcontext.cs: Reset TargetExt as well.
13183 2005-06-03  Raja R Harinath  <rharinath@novell.com>
13185         * ecore.cs (Expression.Resolve): Emit CS0654 error when
13186         -langversion:ISO-1.
13188 2005-06-02  Raja R Harinath  <rharinath@novell.com>
13190         Fix #75080, cs0119.cs.
13191         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
13192         of ...
13193         (Expression.Resolve): ... this.  Use it.  Remove bogus code
13194         allowing ExprClass.Type and ExprClass.Namespace for
13195         ResolveFlags.VariableOrValue.
13196         (Expression.Resolve) [1-argument variant]: Change default resolve
13197         flags based on language version.
13198         (Expression.Error_UnexpectedKind): Use a simple string array
13199         rather than an ArrayList.
13200         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
13201         not ExprClass.Type.
13202         (TypeOfVoid.DoResolve): Likewise.
13203         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
13204         flags argument -- it always has the same value.
13206 2005-05-31  Raja R Harinath  <rharinath@novell.com>
13208         Fix #75081.
13209         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
13210         Use it in the error message.
13211         * assign.cs, expression.cs, statement.cs: Update.
13213 2005-05-30  Raja R Harinath  <rharinath@novell.com>
13215         Fix #75088.
13216         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
13217         the "almostMatchedMember" case too.
13218         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
13219         that failed the accessibility checks to 'almost_match'.
13221 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
13223         * attribute.cs: Use internal MethodBuilder methods to set
13224         ExactSpelling and SetLastError on PInvoke methods, instead
13225         of passing them via charset.  Fixes #75060.
13227 2005-05-27  Raja R Harinath  <rharinath@novell.com>
13229         * parameter.cs (Parameter): Remove TODO comment.
13230         (Parameter.DefineParameter): Remove Location parameter.
13231         (Parameters.LabelParameters): Likewise.
13232         * class.cs (Constructor.Emit): Update to change.
13233         (MethodData.Emit): Likewise.
13234         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
13235         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
13237 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
13239         * parameter.cs,
13240           Removed Parameters.Location and added Parameter.Location instead.
13241           Removed Location parameter from Emit() and GetSignature().
13242         * anonymous.cs,
13243           class.cs,
13244           cs-parser.jay,
13245           delegate.cs,
13246           iterators.cs,
13247           statement.cs :
13248           Modified all related calls.
13250 2005-05-26  Raja R Harinath  <rharinath@novell.com>
13252         Improve user-defined conversion handling.
13253         * convert.cs (GetConversionOperators): Rewrite.  Return only the
13254         applicable operators.
13255         (AddConversionOperators): New.  Helper for GetConversionOperators.
13256         (FindMostEncompassedType, FindMostEncompassingType): Verify that
13257         there is only one most encompassed/encompassing type.
13258         (FindMostSpecificSource, FindMostSpecificTarget): Remove
13259         "applicable operator" handling.
13260         (UserConversion): Move cache here from GetConversionOperators.
13261         Directly cache the chosen operator, rather than the whole
13262         MethodGroup.
13263         (ExplicitNumericConversion): Fix buggy implementation of Decimal
13264         case.  Allow conversion of decimal to sbyte and byte too.
13265         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
13266         New static methods.  Used to avoid allocating EmptyExpressions in
13267         convert.cs.
13269 2005-05-24  Duncan Mak  <duncan@novell.com>
13271         * ecore.cs (CastFromDecimal): New class for casting a decimal to
13272         another class, used in Convert.ExplicitNumericConversion.
13273         (CastToDecimal): New class, similar to above, but casts to
13274         System.Decimal, used in Convert.ImplicitNumericConversion and also
13275         in explicit convesion from double/float to decimal.
13277         * convert.cs (ImplicitNumericConversion): Handle implicit
13278         conversions to System.Decimal.
13279         (ExplicitNumericConversion): handle explicit conversions to
13280         System.Decimal.
13282         This fixes #68711.
13283         
13284 2005-05-20  Miguel de Icaza  <miguel@novell.com>
13286         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
13287         know the type at this stage, just break through.   Fixes #75008 
13289 2005-05-19  Martin Baulig  <martin@ximian.com>
13291         * delegate.cs
13292         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
13293         to disable error reporting.
13295         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
13296         here since we don't want to report an error; see the new test-336.cs.
13298 2005-05-19  Raja R Harinath  <rharinath@novell.com>
13300         * statement.cs (ToplevelBlock.GetParameterReference)
13301         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
13302         Move here from class Block.
13303         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
13304         * expression.cs (ParameterReference.DoResolveBase): Likewise.
13306 2005-05-18  Martin Baulig  <martin@ximian.com>
13308         Fix #74978.
13310         * flowanalysis.cs
13311         (FlowBranching.Reachability): Add non-static public And() and Or()
13312         methods.
13313         (FlowBranchingSwitch): New class; do the `break_origins' thing
13314         like in FlowBranchingLoop.
13315         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
13316         reachability, not just locals and parameters.
13317         (FlowBranching.MergeChild): Remove some of the hacks for loop and
13318         switch; MergeBreakOrigins() now takes care of that.
13320 2005-05-18  Martin Baulig  <martin@ximian.com>
13322         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
13323         a loop and may leave it, reset the barrier; fixes #74974.
13325 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
13326         
13327         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
13328         is back.
13329         
13330         * cs-parser.jay: Catch more lexical errors.
13331         
13332         * report.cs: Add one more Error method.
13333         
13334         * rootcontext.cs,
13335         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
13337 2005-05-17  Martin Baulig  <martin@ximian.com>
13339         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
13340         #70970. 
13342 2005-05-16  Raja R Harinath  <rharinath@novell.com>
13344         Fix test-382.cs.  Emit values of decimal constants.
13345         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
13346         Carved out of ...
13347         (TypeContainer.AddField): ... this.
13348         (TypeContainer.EmitFieldInitializers): Allow the list of fields
13349         with initializers to include 'Const's.
13350         (ClassPart.RegisterFieldForInitialization): Forward to
13351         PartialContainer.
13352         * const.cs (Const.Const): Pass initializer to base class.
13353         (Const.Define): In case of decimal constants, register them for
13354         initialization in a static constructor.
13356 2005-05-14  Martin Baulig  <martin@ximian.com>
13358         * statement.cs (Block.Resolve): Correctly handle unreachable code;
13359         do not call ResolveUnreachable() on unreachable statements in
13360         here, see the comment in the source code.
13362 2005-05-13  Raja R Harinath  <rharinath@novell.com>
13364         Fix #74934.
13365         * expression.cs (BinaryResolveOperator): If one of the operands of
13366         an equality comparison is 'null' and the other is a pointer type,
13367         convert the null to a NullPointer.
13368         * convert.cs (ImplicitReferenceConversion): If the expression is a
13369         NullLiteral and the target type is a pointer type, return a
13370         NullPointer instead.
13371         (ImplicitConversionStandard): Likewise.
13373 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
13374         
13375         * cs-parser.jay: Set readonly context based on special constructs.
13376         
13377         * expression.cs (LocalVariableReference.DoResolveBase): Improved
13378         readonly variable error handling.
13379         
13380         * rootcontext.cs (EmitCode): Don't verify members when error
13381         occurred.
13382         
13383         * statement.cs (LocalInfo): Add reaodnly context information.
13384         (SetReadOnlyContext, GetReadOnlyContext): New methods.
13386 2005-05-13  Raja R Harinath  <rharinath@novell.com>
13388         * statement.cs (Block.Resolve): Revert change below.  Modify fix
13389         for #74041 to initialize 'resolved' to false only for explicit
13390         blocks.  Fixes #74873.
13392 2005-05-12  Raja R Harinath  <harinath@gmail.com>
13394         Fix #74920.
13395         * typemanager.cs (unmanaged_enclosing_types): New.
13396         (IsUnmanagedType): Avoid infloops by using
13397         'unmanaged_enclosing_types' to talk with recursive invocations.
13399 2005-05-13  Martin Baulig  <martin@ximian.com>
13401         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
13402         instance variable, not a local.  Fix #74873.
13403         (Block.ResolveUnreachable): Set it to true here.
13405 2005-05-11  Duncan Mak  <duncan@novell.com>
13407         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
13408         continuing to process for 'arg'.
13409         (handle_preprocessing_directive): Check the argument of the #endif
13410         directive and report error CS1025 if there are any trailing
13411         characters.
13413         According to the C# spec, having even whitespace after the #endif
13414         directive is illegal; however, because we call arg.TrimEnd ()
13415         beforehand, we have the same behavior as csc, allowing whitespace
13416         after the directive.
13418         Fixes #74892.
13420 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
13422         Fix #74863.
13423         
13424         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
13425         (Constructor.GetObsoleteAttribute): Implemented correctly.
13427 2005-05-10  Martin Baulig  <martin@ximian.com>
13429         * support.cs (ReflectionParameters.ParameterModifier): Use
13430         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
13431         and `ParameterAttributes.In'.  Fixes #74884.
13433 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
13435         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
13436         
13437         * expression.cs (Argument.GetParameterModifier): Turned to property.
13438         (Invocation.Error_InvalidArguments): Add more descriptive errors.
13439         
13440         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
13441         its C# equivalent.
13442         
13443 2005-05-09  Raja R Harinath  <rharinath@novell.com>
13445         Fix #74852.
13446         * decl.cs (MemberCache.AddMethods): Register override methods,
13447         rather than non-override methods.
13448         * typemanager.cs (RegisterOverride): New.
13449         (IsOverride): Update.
13451 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
13453         Fix #73105.
13454         
13455         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
13456         recursive declaration.
13457         
13458         * statement.cs (Block.ResolveMeta): Report any error in resolving.
13459         
13460 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
13462         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
13463         
13464         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
13466 2005-05-05  Raja R Harinath  <rharinath@novell.com>
13468         Fix #74797.
13469         * decl.cs (DeclSpace.FamilyAccessible): 
13470         Use TypeManager.IsNestedFamilyAccessible.
13472         Fix reopened #64812.
13473         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
13474         internal'.
13476 2005-05-04  Raja R Harinath  <rharinath@novell.com>
13477             Abin Thomas  <projectmonokochi@rediffmail.com>
13478             Anoob V E  <projectmonokochi@rediffmail.com>
13479             Harilal P R  <projectmonokochi@rediffmail.com>
13481         Fix #64812.
13482         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
13483         allow access to all static members.
13485 2005-05-04  Martin Baulig  <martin@ximian.com>
13487         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
13489 2005-05-04  Martin Baulig  <martin@ximian.com>
13491         Fix #74655.
13493         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
13494         section at the end; make things work if `default' is not the last
13495         section.        
13497 2005-05-04  Martin Baulig  <martin@ximian.com>
13499         Fix #70400.
13501         * statement.cs (Switch): Replaced the `got_default' field with a
13502         `default_section' one.
13503         (Switch.CheckSwitch): Set `default_section' here.
13504         (Switch.Resolve): If we're a constant switch and the constant is
13505         not found, use the default section.
13507 2005-05-03  Martin Baulig  <martin@ximian.com>
13509         * expression.cs (ArrayAccess.EmitGetLength): New public method.
13511         * statement.cs (Foreach.ArrayForeach): New nested class.
13512         (Foreach.TemporaryVariable): New nested class.
13513         (Foreach.EmitArrayForeach): Removed; this is now in the new
13514         ArrayForeach class.
13516 2005-05-03  Raja R Harinath  <rharinath@novell.com>
13518         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
13519         more conservative.
13520         (VerifyPendingMethods): Revert change below.
13522         * typemanager.cs (IsOverride, RegisterNonOverride): New.
13523         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
13524         that used to trigger warning -28.  Remove warning -28.
13525         * expression.cs (Invocation.OverloadResolve): Use
13526         TypeManager.IsOverride to distinguish override methods.
13528         Fix #74773.
13529         * pending.cs (VerifyPendingMethods): If a base type implements the
13530         requested interface, don't bother checking individual methods of
13531         the base type.  As a side-effect, this prevents the creation of
13532         unnecessary proxies.
13534 2005-05-02  Martin Baulig  <martin@ximian.com>
13536         Fix #70182.
13538         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
13539         Also `And' the locals if the old vector is null.
13540         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
13541         null; in this case we basically reset all the variables.        
13543 2005-05-02  Martin Baulig  <martin@ximian.com>
13545         Fix #74529.
13547         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
13548         Added `FlowBranching branching' argument; always `and' the
13549         variables instead of `or'ing them unless we're an infinite loop.
13551         * statement.cs (While.Resolve): Create a new sibling unless we're
13552         infinite.       
13554 2005-05-02  Martin Baulig  <martin@ximian.com>
13556         Fix #70140.
13558         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
13559         arguments; use it instead of creating a new TopLevelBlock.
13560         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
13561         our ConstructorInitializer.
13563         * statement.cs
13564         (TopLevelBlock.TopLevelBranching): New public property.
13565         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
13566         and create our `TopLevelBranching'.
13568         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
13569         anonymous method host, use `block.TopLevelBranching' rather than
13570         creating a new branching.
13572 2005-04-20  Miguel de Icaza  <miguel@novell.com>
13574         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
13575         a ScopeInfo, if any of the current children is a child of the new
13576         entry, move those children there.
13578 2005-04-30  Martin Baulig  <martin@ximian.com>
13580         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
13581         at the beginning of a SwitchSection.  Fix #73335.
13583 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
13585         Fix #74378
13586         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
13587         
13588         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
13589         (FieldExpr.DoResolve): Obsolete members are ignored for field
13590         initializers.
13591         
13592 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
13594         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
13595         of arrays detection.
13597         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
13598         verification.
13599         (Field.VerifyClsCompliance): Volatile fields are not compliant.
13601         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
13602         arrays report.
13604 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
13606         * cs-parser.jay: Use the prefered version of -unsafe in error
13607         message.
13609 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
13611         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
13612         circumstances.
13614 2005-04-20  John Luke  <john.luke@gmail.com>
13616         * driver.cs: fix typo in error message, --outout to --output
13618 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
13620         * codegen.cs (InRefOutArgumentResolving): New field.
13621         
13622         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
13623         fields outside contructor.
13624         
13625         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
13626         
13627 2005-04-19  Miguel de Icaza  <miguel@novell.com>
13629         * anonymous.cs (CaptureContext.EmitParameterInstance): The
13630         parameter code was not completed ever, so it was not as up-to-date
13631         as local variables.  Must finish it.
13633         The bug fix was to compare the Toplevel of the block, not the
13634         current block.  Thanks for Ben for pointing this out. 
13636 2005-04-19  Raja R Harinath  <rharinath@novell.com>
13638         * decl.cs (AddMethods): Use the declaring type of the problem
13639         method to determine if we want to squash a warning.
13641 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
13643         * attribute.cs: Removed debug output.
13645         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
13646         
13647         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
13648         Report.Stderr.
13649         
13650 2005-04-18  Raja R Harinath  <rharinath@novell.com>
13652         Fix #74481.
13653         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
13654         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
13655         all null comparisons against reference types.
13657 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
13659         Fix# 74565
13660         * class.cs (TypeContainer.CircularDepException) New nested
13661         exception class.
13662         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
13663         (TypeContainer.DefineType): Removed error, reset InTransit before
13664         exit.
13665         (Class.DefineType): Throw exception when is in Transit.
13666         Catch exception and report error.
13667         (Struct.DefineType): Throw exception when is in Transit.
13668         Catch exception and report error.
13669         (Interface.DefineType): Throw exception when is in Transit.
13670         Catch exception and report error.
13672         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
13673         handle nested exception handlers.
13675         * flowanalysis.cs (InTryWithCatch): New method, search for try with
13676         a catch.
13678         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
13679         InFinally and InCatch storage.
13681         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
13682         (Catch.Resolve): Set and Restore ec.InCatch.
13683         (Try.Resolve): Set and Restore ec.InFinally.
13684         (Try.HasCatch): True when try has catch.
13686 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
13688         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
13689           for the same event member, so exclude such cases from warning 419.
13690           Fixed bug #74633.
13692 2005-04-16  Miguel de Icaza  <miguel@novell.com>
13694         * expression.cs (Binary.ResolveOperator): Apply patch from John
13695         Luke to fix bug 59864: operators &, | and ^ on enumerations
13696         require that the same enum type on both sides.
13698         * driver.cs: Add warnings to old flag usage, this is to assist
13699         people who produce Makefiles and hope that the Makefiles will be
13700         used on Windows.
13702         * class.cs (TypeContainer.EmitType): Moved the definition of the
13703         special $PRIVATE$ field from the resolve phase to the Emit phase.
13704         During resolve we do not know if we are a struct with
13705         HasExplicitLayout, we know this only after the attributes for the
13706         type are emitted.
13708         Set the FieldOffset to zero on the dummy field that we create for
13709         the class.   Fixes 74590.
13711 2005-04-16  Raja R Harinath  <rharinath@novell.com>
13713         Fix #73834.
13714         * ecore.cs (PropertyExpr.resolved): New.
13715         (DoResolve): Use it to handle a case of double resolution here.
13716         Handle a case of identical-name-and-type-name.
13717         * expression.cs (ArrayCreation.CheckIndices): Avoid double
13718         resolution by storing the results of expression resolution back
13719         into the "probes" array.
13721 2005-04-15  Raja R Harinath  <rharinath@novell.com>
13723         Fix cs0208-7.cs and cs0208-8.cs.
13724         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
13725         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
13726         error reporting to point out the reason a struct is not unmanaged.
13728 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13730         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
13731           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
13733 2005-04-13  Raja R Harinath  <rharinath@novell.com>
13735         Fix #74528.
13736         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
13737         IdenticalNameAndTypeName here.
13738         (EventExpr.InstanceResolve): Likewise.
13740 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
13742         C# 2.0 DefaultCharSetAttribute implementation
13743         
13744         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
13745         which allows us to set GlobalNamespace for every resolve.
13746         (Attribute.ResolveArguments): Cut from Resolve.
13747         (Attribute.GetCharSetValue): Returns CharSet named argument.
13748         (Attribute.DefinePInvokeMethod): Gets default charset from
13749         module settings.
13750         (GlobalAttribute.ResolveAsTypeStep): Override.
13751         (GlobalAttribute.ResolveArguments): Override.
13752         
13753         * class.cs (TypeAttr): Is protected.
13754         
13755         * codegen.cs (ModuleClass.DefaultCharSet): New member.
13756         (ModuleClass.DefaultCharSetType): New memeber.
13757         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
13758         
13759         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
13760         charset from module.
13761         
13762         * delegate.cs (TypeAttr): Override.
13763         (Delegate.DefineType): Use this TypeAttr.
13764         
13765         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
13766         at very early stage (before types are defined) to resolve model
13767         module attributes. It will probably not work with corlib but it
13768         should be ok.
13769         
13770         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
13771         charset from module.
13772         
13773         * typemanager.cs (default_charset_type): New type.
13775 2005-04-13  Raja R Harinath  <rharinath@novell.com>
13777         * decl.cs (MemberCache.AddMethods): Don't warn if
13778         System.Object.Finalize has buggy MethodAttributes.
13780         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
13781         removed below.
13783 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13785         * doc.cs : detect ambiguous reference to overloaded members.
13786           Fixed bug #71603. MS 1.1 csc does not detect it.
13788 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13790         * doc.cs : delegates must not be referenced with parameters.
13791           Fixed bug #71605.
13793 2005-04-12  Miguel de Icaza  <miguel@novell.com>
13795         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
13797 2005-04-10  Miguel de Icaza  <miguel@novell.com>
13799         * driver.cs (MainDriver): Stop processing if the CLS stage found
13800         errors. 
13802         (CompilerCallableEntryPoint.InvokeCompiler): Always
13803         reset after execution;   Take a TextWriter argument for the
13804         output.
13806         * report.cs: Use the error stream instead of hardcoding stderr. 
13808 2005-04-09  Miguel de Icaza  <miguel@novell.com>
13810         * class.cs: Reduce code paths to test, too small of an
13811         optimization to make it worth the extra testing.  Always perform
13812         it. 
13814 2005-04-08  Raja R Harinath  <rharinath@novell.com>
13816         Fix #74510.
13817         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
13818         operators that had errors reported on them.
13820 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
13822         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
13823         argument types.
13824         (Attribute.Resolve): Add named argument type checking.
13825         
13826         * class.cs (FixedField.Define): Use IsPrimitiveType
13827         
13828         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
13829         
13830         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
13831         unsafe parameter types.
13832         
13833         * statement.cs (Using.ResolveExpression): Add better error description.
13834         
13835         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
13836         
13837 2005-04-08  Raja R Harinath  <rharinath@novell.com>
13839         Fix #74484.
13840         * attribute.cs (Attribute.GetAttributeUsage): Resolve
13841         AttributeUsageAttribute in the emitcontext of the attribute class,
13842         not in the emitcontext of the attributable entity it was attached to.
13843         * cs-parser.jay: Use 'current_class', not 'current_container',
13844         when creating a GlobalAttribute.
13846 2005-04-08  Alp Toker  <alp@atoker.com>
13848         * pending.cs: The fix to #58413 failed to compile methods implementing
13849         interfaces with/without params modifiers and vice versa, even though
13850         params modifiers aren't part of the signature. Make the modifier check
13851         less strict as in csc.
13853 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
13854             Anoob V E  <projectmonokochi@rediffmail.com>
13855             Harilal P R  <projectmonokochi@rediffmail.com>
13857         Fix #58413.
13858         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
13859         modifiers of pending methods.
13860         (PendingImplementation.PendingImplementation): Initialize it.
13861         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
13862         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
13863         with ParameterData.  Add check for modifiers.
13864         * class.cs (MethodData.Define): Update to changes.
13866 2005-04-07  Raja R Harinath  <rharinath@novell.com>
13868         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
13870 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
13872         * class.cs (PropertyMethod.Define): Check private accessor in abstract
13873         property.
13874         
13875         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
13876         
13877         * rootcontext.cs,
13878         * typemanager.cs: Registered RequiredAttributeAttribute.
13879         
13880 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
13882         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
13883         Warning CS0169 is back at level 3.
13884         (IMethodData.SetMemberIsUsed): New method.
13885         
13886         * decl.cs (IsUsed): New value; moved from FieldBase.Status
13887         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
13888         
13889         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
13891         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
13892         contants.
13893         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
13894         is used.
13895         
13896         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
13897         is used.
13898         
13899         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
13900         to avoid the problems with nested types.
13902 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
13903             Anoob V.E  <projectmonokochi@rediffmail.com>
13904             Harilal P.R  <projectmonokochi@rediffmail.com>
13905             Raja R Harinath  <rharinath@novell.com>
13907         Fix #73820.
13908         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
13909         attribute.
13910         * typemanager (GetConstructor): Make public.
13912 2005-04-05  John Luke  <john.luke@gmail.com>
13913             Raja R Harinath  <rharinath@novell.com>
13915         Fix #62232.
13916         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
13917         struct too.  Return false quicker in a few cases.
13918         (VerifyUnManaged): Use it.
13920 2005-04-05  Raja R Harinath  <rharinath@novell.com>
13922         Fix #74041.
13923         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
13924         not 'unreachable_seen'.
13926 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
13928         * attribute.cs (Attribute.GetValue): Removed unused.
13929         
13930         * codegen.cs (CodeGen.TrimExt): Removed unused.
13931         
13932         * cs-parser.jay (output): Removed unused.
13933         
13934         * cs-tokenizer.cs (hex_digits): Removed unused.
13935         
13936         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
13937         
13938         * expression.cs (Indirection.LoadExprValue): Removed unused.
13939         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
13940         
13941         * iterators.cs (Iterator.param_types): Removed unused.
13942         
13943         * statement.cs (Goto.block): Removed unused.
13944         (ToplevelBlock.did): Removed unused.
13945         (Switch.ResolveConstantSwitch): Removed unused.
13947 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
13949         * rootcontext.cs: Allow mcs to bootstrap with the compilation
13950         resetting thingy.
13952 2005-04-01  Raja R Harinath  <rharinath@novell.com>
13954         Fix #74232 and cs0208-3.cs.
13955         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
13956         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
13957         unmanaged type.  Don't use FieldBuilders when 't' is a
13958         TypeBuilder.  Use ModFlags and MemberType fields.
13959         * class.cs (MemberBase.member_type): Rename from MemberType.
13960         (MemberBase.MemberType): New property.  Determines member_type on
13961         demand.
13962         (MemberBase.DoDefine): Don't initialize MemberType here.
13963         (FieldMember.Define): Likewise.
13965 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
13967         Fix #74241
13968         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
13969         Attributes are emitted there.
13970         
13971 2005-04-01  Raja R Harinath  <rharinath@novell.com>
13973         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
13974         keyword in 'partial enum' too.
13975         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
13976         is not allowed).
13977         Report from Kamil Skalski <nazgul@omega.pl>.
13979         Fix #74309.
13980         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
13981         have partial containers too.
13983         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
13984         in block' checks to Block.CheckInvariantMeaningInBlock.
13985         * statement.cs (Block.GetKnownVariableInfo): Make private.
13986         (Block.IsVariableUsedInChildBlock): Remove.
13987         (Block.IsVariableUsedInBlock): Likewise.
13988         (Block.CheckInvariantMeaningInBlock): New.  Show location of
13989         conflicting declaration.
13990         (Block.AddVariable): Make error messages less long-winded and more
13991         specific.  Show location of conflicting declaration.
13992         * parameter.cs (Parameters.Location): New readonly property.
13994 2005-03-31  Raja R Harinath  <rharinath@novell.com>
13996         Clean up semantics of invoking ResolveMemberAccess.
13997         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
13998         can have an instance, ensure that we pass in a non-TypeExpression
13999         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
14000         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
14001         argument.  Update to changes and simplify.
14002         (FieldExpr.Emitinstance): Remove CS0120 check.
14003         (PropertyExpr.EmitInstance): Likewise.
14004         * expression.cs (Argument.Resolve): Likewise.
14005         (Invocation.DoResolve): Update to changes in semantics of
14006         InstanceExpression.
14008 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
14010         Fix #74241
14011         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
14012         customization.
14013         
14014         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
14016 2005-03-31  Raja R Harinath  <rharinath@novell.com>
14018         Fix difference in behaviour with commandline invocation.
14019         * driver.cs (Driver.Reset): New.
14020         (CompilerCallableEntryPoint): Call it.
14022         * statement.cs (If.Resolve): Avoid spurious "uninitialized
14023         variable" warnings if the boolean expression failed to resolve.
14025 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
14027         * attribute.cs: Fix the union of several permissions when some of them
14028         are unrestricted (so the result isn't an unrestricted permission set).
14029         Fix #74036.
14031 2005-03-30  Raja R Harinath  <rharinath@novell.com>
14033         * ecore.cs (MemberExpr): New class.  Convert from interface
14034         IMemberExpr.
14035         (MemberExpr.ResolveMemberAccess): Refactor and move here from
14036         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
14037         error checks.
14038         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
14039         (MethodGroupExpr.IsExplicitImpl): Remove.
14040         (Expression.GetFieldFromEvent): Remove.
14041         (SimpleName.MemberStaticCheck): Remove.
14042         (SimpleName.DoSimpleNameResolve): Update to changes.
14043         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
14044         (MemberAccess.IdenticalNameAndTypeName): Remove.
14045         (MemberAccess.error176): Move to MemberExpr.
14046         (MemberAccess.DoResolve): Update to changes.
14047         (BaseAccess.DoResolve): Likewise.
14049 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
14051         C# 2.0 Conditional attribute class implementation
14052         
14053         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
14054         Analyzes class whether it has attribute which has ConditionalAttribute
14055         and its condition is not defined.
14056         
14057         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
14058         (Class.IsExcluded): New method. Search for at least one defined
14059         condition in ConditionalAttribute of attribute class.
14061 2005-03-30  Raja R Harinath  <rharinath@novell.com>
14063         * ecore.cs (PropertyExpr): Derive from Expression, not
14064         ExpressionStatement.
14065         (PropertyExpr.EmitStatement): Remove.
14067 2005-03-29  Raja R Harinath  <rharinath@novell.com>
14069         Fix #74060.
14070         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
14071         internal field "value__" of an enum be private.  The examples for
14072         "value__" that I found on MSDN all used FieldAttributes.Private.
14074         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
14075         Don't mention IL method attribute names.
14077         Fix #47991.  Remove a TODO.
14078         * statement.cs (Block.Toplevel): Make into a field.
14079         (Block.Parameters): Move into ToplevelBlock.
14080         (Block.known_variables): Rename from child_variable_names.
14081         (Block.Block): Remove variants that take Parameters.  Initialize
14082         'Toplevel' with the immediately surrounding toplevel block.
14083         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
14084         LocalInfo parameter.
14085         (Block.GetKnownVariableInfo): New.
14086         (Block.IsVariableNameUsedInChildBlock): Update.
14087         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
14088         the block, even though it may not be in scope.
14089         (Block.AddVariable): Remove Parameters parameter.  Use
14090         Toplevel.Parameters instead.
14091         (Block.AddConstant): Remove Parameters parameter.
14092         (Block.GetParameterReference): Update to use Toplevel.Parameters.
14093         (Block.IsParamaterReference): Likewise.
14094         (Block.IsLocalParameter): Likewise.  Simplify a lot.
14095         (ToplevelBlock.Parameters): New.  Moved from Block.
14096         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
14097         initialize Parameters to a non-null value.
14098         * cs-parser.jay: Update to changes.
14099         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
14100         simple names that mean different things in the same block.  Use
14101         Block.IsVariableNameUsedInBlock.
14103 2005-03-28  Raja R Harinath  <rharinath@novell.com>
14105         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
14106         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
14107         GetTypeHandle.  It is possible for a reflected type to derive from
14108         a TypeBuilder (e.g., int[] derives from the TypeBuilder
14109         System.Array during mscorlib compilation).
14110         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
14111         contain a method_hash, don't create one either.  Don't create a
14112         deep copy of the base cache's method_hash.
14113         (MemberCache.SetupCache): Rename back from DeepCopy.
14114         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
14115         already initialized.  If we see an override function, add its
14116         underlying base virtual function to the member_hash too.
14118         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
14120 2005-03-26  Raja R Harinath  <harinath@acm.org>
14122         Fix #73038.
14123         * assign.cs (Assign.DoResolve): When the RHS of an assignment
14124         fails to resolve, ensure that the LHS is still resolved as an
14125         lvalue.
14127 2005-03-25  Raja R Harinath  <harinath@acm.org>
14129         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
14130         ec.ContainerType.
14131         (Enum.current_ec): Remove.
14132         (Enum.LookupEnumValue): Remove EmitContext argument.
14133         Just uses the one created during DefineType.
14134         (Enum.FindMembers): Update.
14135         * expression.cs (MemberAccess.DoResolve): Update.
14137 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
14139         * assign.cs (Assign.DoResolve): Check for CS1717 when
14140         source and target are same (uses Equals).
14142         * expression.cs (LocalVariableReference, ParameterReference,
14143         This): Implemented Equals, GetHashCode.
14145         * statement.cs (Block.GetParameterReference): Removed useless
14146         local variable.
14148 2005-03-22  Raja R Harinath  <rharinath@novell.com>
14150         Fix cs0128.cs
14151         * statement.cs (Block.AddVariable): Ensure that we skip implicit
14152         blocks before deciding whether the error is cs0136 or cs0128.
14154         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
14155         (using_alias_directive, using_namespace_directive): Pass
14156         MemberName, not an expression to Namespace.UsingAlias and
14157         Namespace.Using.
14158         (MakeName): Use the MemberName of the namespace.
14159         * namespace.cs (Namespace.MemberName): New.
14160         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
14161         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
14162         Likewise.
14163         * decl.cs (MemberName.Name): Make readonly.
14164         (MemberName.FromDotted): New "constructor".
14165         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
14166         (MemberCore.Name): Compute from MemberName on demand.
14167         (MemberCore.SetMemberName): Provide a way to change the
14168         MemberName.
14169         (MemberCore.AddToContainer): Don't take a fullname parameter.
14170         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
14171         fully qualified name of the container to the member name.
14172         (TypeContainer.AddToTypeContainer): Use a fully qualified name
14173         only if the type is a member of the root container.
14174         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
14175         MemberName.Left rather than searching for an embedded ".".
14176         (PartialContainer.CreatePart): Update to changes in RootContext.
14177         (MemberBase.ShortName): Turn into a property.  Use
14178         MemberCore.SetMemberName.
14179         (MemberBase.ExplicitInterfaceName): Remove.
14180         (MemberBase.UpdateMemberName): Remove.
14181         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
14182         (PropertyBase.SetMemberName): New override.
14183         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
14184         (Tree.GetDecl): New.
14185         (Tree.AllDecls): Rename from Decls.
14186         * attribute.cs, enum.cs, report.cs: Update to changes.
14187         * driver.cs (MainDriver): Use MemberName.FromDotted on
14188         RootContext.MainClass.
14190 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
14192         * class.cs (FixedField.Define): Check for CS1664 and more sanity
14193         checks.
14195         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
14197 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
14199         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
14200         property accessor modifiers.
14202         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
14203         fixed buffer attribute (CS1716).
14204         (PropertyMethod.HasCustomAccessModifier): When property accessor
14205         has custom modifier.
14207         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
14208         modifiers.
14209         (PropertyExpr.DoResolveLValue): Add CS0272.
14211 2005-03-17  Miguel de Icaza  <miguel@novell.com>
14213         * convert.cs: When converting to a pointer, use the proper Conv.U
14214         or Conv.I depending on the source data type.
14216         * cs-tokenizer.cs: Make the size for large decimal constants,
14217         fixes #72957.
14219 2005-03-17  Martin Baulig  <martin@ximian.com>
14221         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
14222         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
14224 2005-03-17  Martin Baulig  <martin@ximian.com>
14226         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
14227         to bool so we can return an error condition.
14228         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
14229         returned an error.
14231 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
14233         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
14234         attributes.
14236 2005-03-16  Raja R Harinath  <rharinath@novell.com>
14238         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
14239         Refactor to avoid traversing the list of assemblies, and to avoid
14240         string concatenation.
14241         * typemanager.cs (guid_attr_type): Remove.
14242         (negative_hits, pointers, references): Remove hashes.
14243         (type_hash): New.
14244         (GetConstructedType): New.  Uses type_hash to handle constructed
14245         types (arrays, references, pointers).
14246         (GetReferenceType, GetPointerType): Use it.
14247         (GetNestedType): New.  Uses type_hash to handle nested types of
14248         reflected types.
14249         (LookupType, LookupTypeDirect): Remove.
14250         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
14251         'types' hash and LookupTypeReflection directly.
14252         (params_string, params_object): Use GetConstructedType.
14253         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
14254         top-level types.
14255         (Namespace.Lookup): Use cached_types.
14256         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
14257         provided by old TypeManager.LookupType.
14258         * rootcontext.cs (MakeFQN): Remove.
14259         * decl.cs (DeclSpace.MakeFQN): Likewise.
14260         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
14261         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
14262         TypeManager.GetConstructedType.
14263         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
14265 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
14267         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
14268         indexers.
14270         * cs-parser.jay: Reports CS1527 for any namespace element.
14272         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
14273         Added CS0407.
14275         * expression.cs (ParameterReference.IsAssigned): Changed error to
14276         CS0269.
14277         (Error_WrongNumArguments): Moved CS0245 detection here.
14279         * statement.cs (Return.Resolve): Add CS1622 report.
14281 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
14283         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
14285 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
14287         * attribute.cs expression.cs: Get rid of some allocations.
14289 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
14291         * doc.cs : just eliminate the latest change.
14293 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14295         * doc.cs : commented out the latest change. It breaks xml-030.cs
14297 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14299         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
14300           fail. So invoke CreateType() in FindDocumentedType().
14302 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14304         * cs-tokenizer.cs : added IsKeyword().
14305         * doc.cs : Detect keyword incorrectly used as identifier.
14306           Allow identifiers prefixed by @.
14308 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
14310         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
14311         It caused exception in namespace resolving (again!).
14312         
14313         * class.cs (Class.ctor): Removed exit.
14314         (PropertyMethod.ctor): ditto.
14315         
14316         * codegen.cs (Codegen.Reset): Reset static data.
14317         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
14318         
14319         * cs-tokenizer.cs (Cleanup): Removed.
14320         
14321         * driver.cs (GetSystemDir): Rewrote to one line command.
14322         It caused problem with unloaded dynamic modules.
14323         (UnixParseOption): Removed Exit.
14324         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
14325         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
14326         Now can be mcs used as library.
14327         
14328         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
14329         empty location.
14330         
14331         * location.cs (Reset): Reset static data.
14332         
14333         * namespace.cs (Reset): Reset static data.
14334         
14335         * report.cs (Report.Reset): Reset static data.
14336         
14337         * rootcontext.cs (RootContext.Reset): Reset static data.
14338         
14339         * tree.cs (RootTypes.ctor): Use Location.Null
14340         
14341         * typemanager.cs (TypeManager.Reset): Reset static data.
14342         (CoreLookupType): Removed Exit.
14343         (TypeHandle.Reset): Reset static data.
14344         
14345 2005-03-10  Raja R Harinath  <rharinath@novell.com>
14347         Fix #73516.
14348         * typemanager.cs (ComputeNamespaces): Import namespaces from
14349         referenced modules too.
14351 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14353         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
14354         than '.'.
14356 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14358         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
14359         enclosing DeclSpace.  This ensures that a name-lookup populates
14360         more caches and there are fewer 'TypeExpression's.  Carve out
14361         nested type lookup into ...
14362         (LookupNestedTypeInHierarchy): ... this.
14364 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14366         Clean up a few partial-class semantics.  
14367         Fixes test-357.cs and cs1618-2.cs.
14368         * cs-parser.jay (struct_declaration): Use 'current_class' as
14369         parent of newly-created struct.  Remove call to Register ().
14370         Use 'pop_current_class' to complete handing the current struct.
14371         (interface_declaration): Likewise.
14372         (class_declaration): Likewise.
14373         (enum_declaration): Use 'current_class' as parent of newly created
14374         enum.
14375         (delegate_declaration): Likewise.
14376         (pop_current_class): New function.  This is used to handle closing
14377         up the 'current_class' and 'current_container', and pointing them
14378         to the enclosing class/container.
14379         (CSharpParser): Initialize 'current_class' too.
14380         * decl.cs (MemberCore): Add check for invariant: a partial
14381         container is not a parsed entity, and thus does not enclose any
14382         parsed members.
14383         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
14384         (DeclSpace.BaseTypeExpr): Use it.
14385         (DeclSpace.LookupType): Add check for invariant.
14386         * class.cs (TypeContainer): Add check for invariant: a nested
14387         class should have the same NamespaceEntry as its enclosing class.
14388         (TypeContainer.EmitFieldInitializers): Make virtual.
14389         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
14390         MemberCore.
14391         (TypeContainer.Register): Remove.
14392         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
14393         null.  Use TypeResolveEmitContext for resolving base types and
14394         interfaces.  Move initialization of Parts.TypeBuilder here from
14395         ...
14396         (TypeContainer.DefineNestedTypes): ... here.
14397         (PartialContainer): Take a Namespace not a NamespaceEntry.
14398         (PartialContainer.Create): Don't use Register.  Call the
14399         appropriate Add... function directly.
14400         (ClassPart): Take both the PartialContainer and the enclosing
14401         class as constructor arguments.
14402         (ClassPart.EmitFieldInitializers): Override.
14403         (ClassPart.PartFindNestedTypes): Remove.
14404         (FieldBase.GetInitializerExpression): Resolve the initializer
14405         expression in the emit context of the enclosing class.
14406         * tree.cs (RootTypes): Remove Register ().
14407         
14408 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
14410         * cs-parser.jay: Removed CS0134.
14411         
14412         * driver.cs: Removed CS1901.
14413         
14414         * expression.cs (SizeOf.DoResolve): Don't report CS0233
14415         for predefined types.
14417 2005-03-07  Duncan Mak  <duncan@novell.com>
14419         * codegen.cs (Save):  Catch UnauthorizedAccessException as
14420         well. Fixes bug #73454.
14422 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
14424         * cs-tokenizer.cs (xtoken): Add CS1035.
14425         
14426         * class.cs (MethodData.Define): Add CS0683.
14427         (FieldMember.ctor): Add CS0681.
14429 2005-03-07  Raja R Harinath  <rharinath@novell.com>
14431         * ecore.cs (SimpleName.DoResolve): Rename from
14432         SimpleName.DoResolveAllowStatic.
14433         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
14434         Pass 'intermediate' flag to MemberStaticCheck.
14435         (SimpleName.MemberStaticCheck): Skip "static check" only in case
14436         of "intermediate" lookups via MemberAccess.
14437         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
14438         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
14440 2005-03-07  Raja R Harinath  <rharinath@novell.com>
14442         Fix #73394.
14443         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
14444         slipped in because of variable names that are identical to a
14445         builtin type's BCL equivalent ('string String;', 'int Int32;').
14446         (PropertyExpr.EmitInstance): Likewise.
14448 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
14450         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
14451         
14452         * report.cs (warning_ignore_table): Made public.
14454 2005-03-04  Raja R Harinath  <rharinath@novell.com>
14456         Fix #73282.
14457         * class.cs (MethodData.Emit): Pass 'container' to
14458         container.GetObsoleteAttribute instead of 'container.Parent'.
14460 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
14462         * cs-parser.jay: Add 1534 error test.
14464         * iterators.cs (Yield.CheckContext): Add error 1629.
14465         (Iterator.ctor): Save unsafe modifier.
14466         (MoveNextMethod.DoEmit): Restore unsafe context.
14468         * namespace.cs (UsingAlias): Better error message.
14470 2005-03-03  Dan Winship  <danw@novell.com>
14472         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
14473         the warning message [#73219]
14475 2005-03-03  Raja R Harinath  <rharinath@novell.com>
14477         Fix compile with MCS 1.0.0.0.
14478         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
14479         w_restore to not depend on string constant folding.
14481 2005-03-03  Raja R Harinath  <rharinath@novell.com>
14483         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
14484         CS0246 check to users who passed 'silent = false'.
14485         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
14486         check.
14487         (SimpleName.SimpleNameResolve): Update.
14488         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
14489         (MemberAccess.IdenticalNameAndTypeName): Update.
14490         * doc.cs (FindDocumentedTypeNonArray): Update.
14492 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
14494         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
14495         * parameters.cs (ComputeAndDefineParameters): Remove.
14496         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
14497         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
14498         Use GetParameterInfo.
14500 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
14502         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
14504 2005-03-02  Raja R Harinath  <rharinath@novell.com>
14506         Unify DeclSpace.LookupType and DeclSpace.FindType.
14507         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
14508         is in charge of defining nested types on demand.
14509         (DeclSpace.LookupType): Use it when the current_type is a
14510         TypeBuilder.  Use LookupTypeDirect for reflected types.
14511         (DeclSpace.FindType): Remove.
14512         (DeclSpace.LookupInterfaceOrClass): Likewise.
14513         (DeclSpace.DefineTypeAndParents): Likewise.
14514         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
14515         DeclSpace.LookupType.
14516         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
14517         * typemanager.cs (LookupType): Simplify.
14518         (AddUserType): Remove type from negative_hits.
14519         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
14520         * class.cs (TypeContainer.FindMembers): Move handling of nested
14521         types ...
14522         (TypeContainer.FindMembers_NestedTypes): ... here.
14523         (TypeContainer.FindNestedType): Implement override.
14524         (ClassPart.FindNestedType): Delegate to PartialContainer.
14525         (ClassPart.PartFindNestedType): Looks up the nested types of the
14526         part alone.
14528 2005-03-02  Martin Baulig  <martin@ximian.com>
14530         * class.cs (TypeContainer.DoDefineMembers): We also need a default
14531         static constructor in static classes.
14533 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
14535         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
14536         sizeParamIndex is not specified.
14538 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
14540         Fix #73117
14541         * report.cs (WarningMessage.IsEnabled): Missing null check.
14543 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14545         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
14546         in the fields and not in the properties.
14548 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
14550         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
14551         fields as well.
14553 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14555         * attribute.cs: Small refactoring (improved robustness).
14556         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
14557         (ValidateGuid): Removed.
14558         (Resolve): Removed referenced to above mentioned.
14559         (GetAttributeUsage): Made private and changed to work without
14560         class assistance.
14561         (GetIndexerAttributeValue): Don't crash.
14562         (GetConditionalAttributeValue): Ditto.
14563         (GetClsCompliantAttributeValue): Ditto.
14564         (ExtractSecurityPermissionSet): All attributes exceptions are
14565         error 648.
14566         (GetPropertyValue): New helper.
14567         (GetMethodImplOptions): New method.
14568         (DefinePInvokeMethod): Reuse common code. Implemented handling of
14569         some missing properties.
14570         
14571         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
14572         (Method.ApplyAttributeBuilder): Updated.
14573         
14574         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
14575         exception.
14577 2005-02-28  Raja R Harinath  <rharinath@novell.com>
14579         Fix #73052.
14580         * report.cs (Report.SymbolRelatedToPreviousError): Handle
14581         non-simple types (array, pointer, reference).
14583 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14585         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
14587         * class.cs (MethodCore.IsDuplicateImplementation): Special error
14588         for operators.
14589         (Method.CheckBase): Catch wrong destructor here.
14590         (MethodData.Define): Add errors 550, 668.
14592         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
14594         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
14596         * pending.cs (VerifyPendingMethods): Add error 551.
14598         * typemanager.cs (CSharpName): Next error report helper.
14600 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
14602         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
14603         attributes. Removed useless attribute double check.
14604         It saves almost 2MBs for corlib.
14606 2005-02-25  Raja R Harinath  <rharinath@novell.com>
14608         Fix #72924.
14609         * statement.cs (ExpressionStatement.Resolve): Make robust to being
14610         called twice in case of error.
14612 2005-02-23  Chris Toshok  <toshok@ximian.com>
14614         Fix compiler portions of #72827.
14615         * statement.cs (Block.Emit): call Begin/EndScope on the
14616         EmitContext instead of the ILGenerator.
14618         * codegen.cs (EmitContext.BeginScope): new method, call
14619         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
14620         we have one.)
14621         (EmitContext.BeginScope): same, but EndScope and CloseScope
14623         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
14624         offset and call the superclass's OpenScope(int) with it.
14625         (SymbolWriter.CloseScope): get the current il
14626         offset and call superclass's CloseScope(int) with it.
14628 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
14630         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
14631         CS1677 for out and ref as well.
14633         * class.cs (Method.Define): Add error CS1599 detection.
14634         
14635         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
14636         
14637         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
14638         
14639         * delegate.cs (Delegate.Define): Add error CS1599 detection.
14640         
14641         * support.cs.cs (ModifierDesc): New helper method.
14643 2005-02-23  Raja R Harinath  <rharinath@novell.com>
14644             Abin Thomas  <projectmonokochi@rediffmail.com>
14645             Anoob V E  <projectmonokochi@rediffmail.com>
14646             Harilal P R  <projectmonokochi@rediffmail.com>
14648         Fix #57851, #72718.
14649         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
14650         MemberLookup (used for error reporting) actually returns a result.
14651         Fix error report number (122, not 112).
14653 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
14654             Anoob V E  <projectmonokochi@rediffmail.com>
14655             Harilal P R  <projectmonokochi@rediffmail.com>
14657         Fix #71134.
14658         * pending.cs (PendingImplementation.GetAbstractMethods):
14659         Find NonPublic members too.
14661 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
14663         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
14664         Fixed error 217.
14665         
14666         * class.cs (MethodCore.CheckMethodAgainstBase):
14667         Add error 239 report.
14669 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14671         Fix #68955.
14672         * expression.cs (Invocation.IsApplicable): Make public.
14673         (Invocation.IsParamsMethodApplicable): Likewise.
14674         * delegate.cs (Delegate.VerifyApplicability): Don't use
14675         Invocation.VerifyArgumentCompat for parameter applicability
14676         testing.  Use Invocation.IsApplicable and
14677         Invocation.IsParamsMethodApplicable.
14679 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
14681         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
14682         
14683         * class.cs (Operator.Define): Add error 217 report.
14684         
14685 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14687         * namespace.cs (UsingEntry.Resolve): Undo change below.
14689 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14691         Fix #72756.
14692         * ecore.cs (Expression.MemberLookupFailed): Add argument to
14693         disable the error message when the extended MemberLookup also
14694         fails.
14695         (Expression.MemberLookupFinal): Update.
14696         (SimpleName.DoSimpleNameResolve): Update.
14697         * expression.cs (MemberAccess.ResolveNamespaceOrType):
14698         Don't use MemberLookupFinal.
14699         (New.DoResolve): Update.
14700         (BaseAccess.CommonResolve): Update.
14702 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14704         Fix #72732.
14705         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
14706         occured previously, don't resolve again.
14708 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
14710         Fix #69949
14711         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
14712         argument. Call ResolveAttributeUsage for unresolved.
14713         when types doesn't match ctor arguments.
14714         
14715         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
14716         for nested attribute classes.
14717         (Class.attribute_usage): Removed.
14718         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
14719         for attribute class.
14720         
14721         * ecore.cs (IsAttribute): Removed.
14722         
14723         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
14724         
14725         * rootcontext.cs (RegisterAttribute): Removed, attributes are
14726         now normal types.
14727         (attribute_types): Removed.
14728         (EmitCode): Global attributes are emited as the latest.
14730 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
14732         * class.cs (EmitFieldInitializers): Don't emit field initializer
14733         for default values when optimilization is on.
14734         
14735         * constant.cs (Constant.IsDefaultValue): New property.
14736         
14737         * driver.cs: Add /optimize handling.
14738         
14739         * constant.cs,
14740         * ecore.cs,
14741         * literal.cs: Implement new IsDefaultValue property.
14742         
14743         * rootcontext.cs (Optimize): New field, holds /optimize option.
14745 2005-02-18  Raja R Harinath  <rharinath@novell.com>
14747         Fix crasher in re-opened #72347.
14748         * namespace.cs (Namespace.Lookup): Return null if
14749         DeclSpace.DefineType returns null.
14751         Fix #72678.
14752         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
14754 2005-02-18  Raja R Harinath  <rharinath@novell.com>
14756         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
14757         now returns null if it cannot resolve to an lvalue.
14758         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
14759         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
14760         returned null.  Remove check for SimpleName.
14761         (EventExpr.DoResolveLValue): New.
14762         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
14763         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
14764         error from ...
14765         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
14766         avoid CS0131 error.
14767         (Unary.ResolveOperator): Move CS0211 check ...
14768         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
14769         CS0131 error.
14770         (Unary.DoResolveLValue): Simplify.
14771         (AddressOf.DoResolveLValue): New.
14772         (ArrayAccess.DoResolveLValue): New.
14774 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
14776         * attribute.cs (Attribute.Resolve): Add arguments casting for
14777         when types doesn't match ctor arguments.
14779 2005-02-16  Raja R Harinath  <rharinath@novell.com>
14781         Fix parts of #63202.
14782         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
14783         lookup of operator in base type.  Ensure that all checks happen
14784         when the operator resolves to an "op_..." method.
14786 2005-02-15  Raja R Harinath  <rharinath@novell.com>
14788         Fix #71992.
14789         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
14790         'ignore_cs0104' parameter.  Pass it to ...
14791         (NamespaceEntry.Lookup): ... this.
14792         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
14793         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
14794         (TypeLookupExpression.DoResolveAsTypeStep): Update.
14795         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
14796         Update.  Request that cs0104 errors be ignored.
14797         (ComposedCast.ResolveAsTypeStep): Update.
14799 2005-02-14  Raja R Harinath  <rharinath@novell.com>
14801         Fix #59209.
14802         * expression.cs (Invocation.BetterFunction): Remove support for
14803         comparing virtual functions and their overrides.
14804         (Invocation.IsOverride): New.
14805         (Invocation.OverloadResolve): Don't consider 'override' functions
14806         during candidate selection.  Store them in a lookaside list.
14807         If the selected method is a 'virtual' function, use the list to
14808         find any overrides that are closer to the LHS type.
14810 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
14812         * expression.cs (New.DoResolve): Add complex core type reduction.
14813         (New.Constantify): Converts complex core type syntax like 'new int ()'
14814         to simple constant.
14815         
14816 2005-02-14  Raja R Harinath  <rharinath@novell.com>
14818         * decl.cs (EntryType.EntryType): New constructor to create an
14819         updated copy of a cache entry.
14820         (MemberCache.AddMethods): Use it.
14821         (MemberCache.ClearDeclaredOnly): Remove.
14822         (MemberCache.MemberCache): Update.
14824 2005-02-11  Miguel de Icaza  <miguel@novell.com>
14826         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
14827         variable.  This one is represents the actual low-level declaration
14828         of the method, as opposed to the semantic level `IsStatic'.   
14830         An anonymous method which is hosted into a static method might be
14831         actually an instance method.  IsStatic would reflect the
14832         container, while MethodIsStatic represents the actual code
14833         generated.
14835         * expression.cs (ParameterReference): Use the new MethodIsStatic
14836         instead of IsStatic.
14838         * anonymous.cs (AnonymousMethod.Compatible): Pass the
14839         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
14840         set on the current EmitContext. 
14842         * expression.cs (Cast): Overload DoResolveLValue so we can pass
14843         resolve our casted expression as an LValue.  This triggers the
14844         proper LValue processing that is later required by Assign.
14846         This fixes 72347.
14848         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
14850 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
14852         C# 2.0 Fixed buffer implementation
14854         * anonymous.cs: Update after RegisterHelperClass renaming.
14856         * attribute.cs (AttributeTester.fixed_buffer_cache):
14857         Cache of external fixed buffers.
14858         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
14859         implementation if field is fixed buffer else null.
14861         * class.cs
14862         (TypeContainer.AddField): Accept FieldMember instead of Field.
14863         (FieldBase.IsFieldClsCompliant): Extracted code from
14864         VerifyClsCompliance descendant customization.
14865         (FixedField): New class handles fixed buffer fields.
14866         (FixedFieldExternal): Keeps information about imported fixed
14867         buffer.
14868         (IFixedField): Make access to internal or external fixed buffer
14869         same.
14871         * cs-parser.jay: Add fixed buffer parsing.
14873         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
14874         buffer.
14876         * expression.cs (Indirection): Extended implementation to accept
14877         fixed buffer field.
14878         (PointerArithmetic.Emit): Get element from fixed buffer as well.
14879         (ElementAccess.MakePointerAccess): Get type as parameter.
14880         (DoResolve): Add fixed buffer field expression conversion.
14881         (DoResolveLValue): Ditto.
14882         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
14883         (ArrayPtr): Derives from FixedBufferPtr.
14884         (ArrayPtr.Emit): Add extra emit for array elements.
14886         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
14888         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
14889         for compiler generated types.
14890         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
14892         * statement.cs (Fixed): Refactored to be easier add fixed buffer
14893         and consume less memory.
14894         (Fixed.Resolve): Add fixed buffer case.
14896         * typemanager.cs (compiler_generated_attr_ctor,
14897         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
14898         (HasElementType): Add our own implementation to work on every
14899         runtime.
14901 2005-02-11  Miguel de Icaza  <miguel@novell.com>
14903         * anonymous.cs (CaptureContext): Track whether `this' has been
14904         referenced.   
14906         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
14907         only captured `this' if it was implicitly done (instance
14908         methods/variables were used). 
14910         * codegen.cs (EmitContext.CaptureThis): New method to flag that
14911         `this' must be captured.
14913 2005-01-30  Miguel de Icaza  <miguel@novell.com>
14915         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
14916         is null it means that there has been no need to capture anything,
14917         so we just create a sibling.
14919         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
14921         Just a partial fix.  The other half is fairly elusive.
14922         
14923 2005-02-10  Raja R Harinath  <rharinath@novell.com>
14925         Fix #52586, cs0121-4.cs.
14926         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
14927         and return a hashtable.
14928         (MemberCache.ClearDeclaredOnly): New.
14929         (MemberCache.MemberCache): Update to change.  Make a deep copy of
14930         the method_hash of a base type too.
14931         (MemberCache.AddMethods): Adapt to having a deep copy of the base
14932         type methods.  Overwrite entries with the same MethodHandle so
14933         that the ReflectedType is correct.  The process leaves in base
14934         virtual functions and their overrides as distinct entries.
14935         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
14936         matters since it was boxed in a ArrayList before.
14937         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
14938         modifier.
14939         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
14940         case of a virtual function and its override (choose the overload
14941         as better).
14942         (Invocation.OverloadResolve): Avoid 'override' members during
14943         'applicable_type' calculation.
14945 2005-02-09  Raja R Harinath  <rharinath@novell.com>
14947         Combine two near-redundant caches.
14948         * typemanager.cs (method_params): Rename from method_internal_params.
14949         (TypeManager.GetParameterData): New.  Replace
14950         Invocation.GetParameterData.
14951         (TypeManager.LookupParametersByBuilder): Remove.
14952         * expression.cs (Invocation.method_parameter_cache): Remove.
14953         (Invocation.GetParameterData): Remove.
14954         Update to changes.
14955         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
14956         Update to changes.
14958 2005-02-08  Raja R Harinath  <rharinath@novell.com>
14960         Fix #72015.
14961         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
14962         TypeManager.multicast_delegate_type is null, resolve it by looking
14963         up "System.MulticastDelegate".
14964         * rootcontext.cs (RootContext.ResolveCore): Simplify.
14966 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
14967             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
14968             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
14970         Fix cs0164.cs.
14971         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
14972         (LabeledStatement.AddReference): New.  Set 'referenced'.
14973         (Goto.Resolve): Use it.
14975 2005-02-05  John Luke  <john.luke@gmail.com>
14977         * driver.cs: remove duplicate -doc line in Usage ()
14979 2005-02-04  Raja R Harinath  <rharinath@novell.com>
14981         * location.cs (Location.AddFile): Fix CS2002 error report.
14983 2005-02-02  Martin Baulig  <martin@ximian.com>
14985         * delegate.cs (Delegate.DefineType): Report an internal error if
14986         TypeManager.multicast_delegate_type is null.  See bug #72015 for
14987         details.        
14989 2005-02-02  Raja R Harinath  <rharinath@novell.com>
14991         Fix a crasher in a variant of #31984.
14992         * const.cs (Constant.CheckBase): New override that defers the
14993         new-or-override check in case the base type hasn't been populated
14994         yet.
14995         (Constant.Define): Ensure the new-or-override check is performed.
14997 2005-02-01  Duncan Mak  <duncan@ximian.com>
14999         * const.cs (LookupConstantValue): Check that `ce' is not null
15000         before calling GetValue ().
15002 2005-02-01  Raja R Harinath  <rharinath@novell.com>
15004         Fix test-334.cs (#69519).
15005         * cs-parser.jay (using_alias_directive): Pass in an expression to
15006         NamespaceEntry.UsingAlias.
15007         (using_namespace_directive): Pass in an expression to
15008         NamespaceEntry.Using.
15009         (namespace_name): Don't flatten to a string.
15010         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
15011         (NamespaceEntry.AliasEntry.Resolve): Lookup using
15012         ResolveAsTypeStep.
15013         (NamespaceEntry.UsingEntry): Likewise.
15014         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
15015         changes.
15016         (NamespaceEntry.LookupForUsing): Remove.
15017         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
15018         names.
15019         (NamespaceEntry.Lookup): Remove support for dotted names.
15021 2005-02-01  Raja R Harinath  <rharinath@novell.com>
15023         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
15024         split into two.
15025         (NamespaceEntry.ImplicitParent): Compute on demand.
15026         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
15027         parallels the current.
15028         (NamespaceEntry.LookupForUsing): Use it.
15029         (NamespaceEntry.Lookup): If the current namespace-entry is
15030         implicit, don't search aliases and using tables.
15032 2005-02-01  Raja R Harinath  <rharinath@novell.com>
15034         Fix #31984.
15035         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
15036         BaseCache here.
15037         (TypeContainer.BaseCache): Compute on demand.
15038         (TypeContainer.FindMembers): Define constants and types if they're
15039         not already created.
15040         (FieldMember.Define): Move resetting of ec.InUnsafe before error
15041         check.
15042         * const.cs (Constant.Define): Make idempotent.
15044 2005-01-29  Miguel de Icaza  <miguel@novell.com>
15046         * pending.cs: Produce better code (no nops produced by using Ldarg
15047         + value).
15048         
15049         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
15050         i - 1' it should be arg + 1.
15052         Fixes bug #71819.
15054 2005-01-28  Raja R Harinath  <rharinath@novell.com>
15056         * attribute.cs (Attribute.CheckAttributeType): Make private
15057         non-virtual.
15058         (Attribute.ResolveType): Make virtual.
15059         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
15060         handling of RootContext.Tree.Types.
15062 2005-01-27  Raja R Harinath  <rharinath@novell.com>
15064         Update attribute-handling to use the SimpleName/MemberAccess
15065         mechanisms.
15066         * cs-parser.jay (attribute): Pass in an expression to the
15067         constructors of Attribute and GlobalAttribute.
15068         * attribute.cs (Attribute): Take an expression for the name.
15069         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
15070         passed in attribute name expression.
15071         (Attribute.CheckAttributeType): Use it.
15072         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
15073         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
15074         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
15075         argument to prevent error messages if the lookup fails.
15077 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
15079         * expression.cs (Indirection): Implemented IVariable interface
15080         to support indirection in AddressOf operator.
15081         (PointerArithmetic.Emit): Add optimalization for case where
15082         result can be precomputed.
15084 2005-01-26  Martin Baulig  <martin@ximian.com>
15086         * class.cs (TypeContainer.AttributeTargets): Return the correct
15087         AttributeTargets depending on our `Kind' instead of throwing an
15088         exception; fixes #71632.
15090 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
15092         Fix #71257
15093         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
15094         constant members.
15096 2005-01-25  Raja R Harinath  <rharinath@novell.com>
15098         Fix #71602.
15099         * expression.cs (MemberAccess.DoResolve): Don't complain with
15100         cs0572 when the LHS of a member access has identical name and type
15101         name.
15103 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
15105         Fix #71651, #71675
15106         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
15107         CreatePermission.
15108         Create custom PermissionSet only for PermissionSetAttribute.
15110 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
15112         Fix #71649
15113         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
15114         delegates in static class.
15116 2005-01-24  Martin Baulig  <martin@ximian.com>
15118         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
15119         merging an implicit block, just use its reachability.
15121         * statement.cs (Block.Resolve): Make the unreachable code check
15122         work wrt. implicit blocks; see test-337 from #63842.
15124 2005-01-21  Alp Toker  <alp@atoker.com>
15126         * cs-parser.jay: destructor_declaration's container is PartialContainer
15127         not Class when partial types are used, so use Kind prop instead of
15128         'is'.
15129         
15130 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
15132         * cs-parser.jay: Improve error reporting when an interface
15133         declares new types.
15135 2005-01-20  Dick Porter  <dick@ximian.com>
15137         * support.cs: SeekableStreamReader fix from Sandor Dobos
15138         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
15139         chars are read.  Fixes bug 70369.
15141 2005-01-20  Raja R Harinath  <rharinath@novell.com>
15143         * cs-parser.jay (catch_clause): Simplify current_block handling
15144         somewhat.
15146 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
15148         * convert.cs (ImplicitStandardConversionExists): Synchronize the
15149         code with ImplicitStandardConversion to handle the implicit
15150         conversion of method groups into valid delegate invocations. 
15152         The problem is that in parameter handling we were using this code
15153         path.  Fixes bug #64698
15155 2005-01-19  Raja R Harinath  <rharinath@novell.com>
15157         * cs-parser.jay: Fix several infelicities.
15158         - Avoid assigning to the parser value stack.  Code like 
15159           '$3 = null' is unclean.  Synthesize a value for the code block
15160           instead. 
15161         - Avoid using oob_stack for storing location information.  Use ...
15162         (_mark_): ... this.  New (empty) rule.  Saves the current location
15163         in $$.
15164         (foreach_statement): Avoid using oob_stack for current_block
15165         handling.  Use technique used in for_statement and
15166         using_statement.  Synthesize a value for the code block to store
15167         additional intermediate information.
15169 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
15171         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
15172         of a different type is only allowed to private fields of a
15173         containing type, not on fields of a base class.
15175         See test-174.cs and error cs0122-9.cs
15177 2005-01-13  Raja R Harinath  <rharinath@novell.com>
15179         Fix test-335.cs (bug #58126).
15180         * cs-parser.jay (argument): Split out non-expression parts of the
15181         rule into 'non_simple_argument'.
15182         (invocation_expression): Support parenthesized invocations with
15183         multiple arguments, and with single non-simple arguments.
15185 2005-01-13  Raja R Harinath  <rharinath@novell.com>
15187         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
15188         places.
15190 2005-01-12  Raja R Harinath  <rharinath@novell.com>
15192         Fix cs0038-1.cs, cs1640-6.cs.
15193         * ecore.cs (Expression.Resolve): Remove special-case for
15194         SimpleName in error-handling.
15195         (Expression.almostMatchedMembers): Relax access permission to
15196         protected.
15197         (Expression.MemberLookupFailed): Handle duplicates in
15198         almostMatchedMembers list.
15199         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
15200         * expression.cs (New.DoResolve): Report CS1540 for more cases.
15201         * typemanager.cs (GetFullNameSignature): Use the MethodBase
15202         overload if the passed in MemberInfo is a MethodBase.
15204 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
15206         Fix #70749
15207         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
15208         for non-CAS & merge permission sets properly.
15210 2005-01-11  Raja R Harinath  <rharinath@novell.com>
15212         Improve standard-compliance of simple name and member access 
15213         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
15214         * ecore.cs (FullNamedExpression): New abstract base class 
15215         for Namespaces and TypeExpressions.
15216         (ResolveFlags.SimpleName): Remove.
15217         (SimpleName): Remove support for dotted names.
15218         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
15219         DeclSpace.FindType and DeclSpace.LookupType.
15220         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
15221         (Expression.ExprClassName): Make member function.
15222         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
15223         a namespace.  Remove creation of dotted "SimpleName"s.
15224         (MemberAccess.DoResolve): Likewise.
15225         * decl.cs (DeclSpace.Cache): Make private.
15226         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
15227         (DeclSpace.FindType): Update.
15228         (DeclSpace.LookupType): Move here from RootContext.  Return a 
15229         FullNamedExpression.
15230         * namespace.cs (Namespace): Derive from FullNamedExpression
15231         so that it can be part of expression resolution.
15232         (Namespace.Lookup): Return an FullNamedExpression.
15233         (NamespaceEntry.LookupAlias): Lookup aliases only in current
15234         namespace.
15235         * rootcontext.cs (NamespaceLookup): Remove.
15236         (LookupType): Move to DeclSpace.
15237         * attribute.cs (CheckAttributeType): Update.
15238         * doc.cs (FindDocumentedType): Remove allowAlias argument.
15239         (FindDocumentedTypeNonArray): Likewise.
15241 2005-01-11  Raja R Harinath  <rharinath@novell.com>
15243         Fix cs0509.cs, cs1632.cs.
15244         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
15245         is the same as IsInterface.
15246         (TypeContainer.GetClassBases): Likewise.
15247         * statement.cs (LabeledStatement.ig): New field.
15248         (LabeledStatement.LabelTarget): Save ILGenerator which created the
15249         label.
15250         (LabeledStatement.DoEmit): Check that the label was created with
15251         the same ILGenerator.
15253 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
15255         Fix #71058
15256         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
15257         accessors to its properties.
15259         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
15260         from accessors to property.
15261         
15262 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
15264         Fix #70722
15265         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
15266         only for overrides.
15267         
15268 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
15270         * attribute.cs: Check for null and empty strings.  
15272         I have lost another battle to Paolo.
15274 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
15276         Fix #70942
15277         * class.cs (PropertyMethod): Set Parent field in ctors.
15278         (SetMethod.InternalParameters): Add unsafe switch hack.
15279         Override MarkForDuplicationCheck where it is appropriate.
15281         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
15282         It says whether container allows members with the same name.
15283         Base default is no.
15284         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
15285         Removed is_method parameter.
15287 2005-01-06  Duncan Mak  <duncan@ximian.com>
15289         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
15290         because the previous change led to incorrect reporting of CS1032
15291         ("Cannot define/undefine preprocessor symbols after first token in
15292         file"). Instead of using `tokens_seen' as the only flag that
15293         triggers CS1040, introduce `comments_seen'. This new flag is used
15294         to signify having seen comments on the current line, so it is
15295         unset after a newline.
15297 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
15299         * doc.cs : When searching for a type, find nested type too.
15300           This fixes bug #71040.
15302 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
15304         * doc.cs :
15305           - Warn missing member comment on those classes which also does not
15306             have doc comments. Fixed bug #71041.
15307           - Don't warn missing doc comment on default constructor.
15308             Fixed bug #71042.
15310 2005-01-06  Duncan Mak  <duncan@ximian.com>
15312         * cs-tokenizer.cs (xtoken): After handling traditional C-style
15313         comments, set `tokens_seen' to true. This allows us to detect
15314         misplaced preprocessor directives (i.e. not at the beginning of
15315         the a line, nor after whitespaces). In that case, report error
15316         CS1040. This fixes bug #56460.
15318         * cs-parser.jay (interface_member_declaration): Add checks for
15319         IsExplicitImpl, and report CS0541 error if an interface member is
15320         defined as an explicit interface declaration.
15322 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
15324         Fix #70817
15325         * class.cs (PropertyMethod): Set Parent field in ctors.
15326         (SetMethod.InternalParameters): Add unsafe switch hack.
15327         
15328         * decl.cs (MemberCore.Parent): Cannot be readonly.
15330 2005-01-06  Raja R Harinath  <rharinath@novell.com>
15332         * decl.cs (DeclSpace.ResolveType): Remove.
15333         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
15334         Merge in code from ...
15335         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
15336         * class.cs, enum.cs: Update to changes.
15338 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
15340         * anonymous.cs: Ensure that we init the scope of our parent if it
15341         has not been initialized yet.
15343 2004-12-30  Duncan Mak  <duncan@ximian.com>
15345         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
15346         if field.FieldBuilder is null. Fixes #70758.
15348         * convert.cs: Fixed some typos and updated some of the comments.
15349         (ImplicitStandardConversionExists):
15350         (TryImplicitIntConversion): If `target_type' is an interface and
15351         the type of `ic' implements this interface, return true or a new
15352         BoxedCast instead of null. This fixes #70468.
15354 2004-12-29  Duncan Mak  <duncan@ximian.com>
15356         * expression.cs (Argument.Emit): Check that Expr is
15357         IMemoryLocation before casting to it, and report CS1510 otherwise.
15359         This fixes #70402.
15361 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
15363         * statement.cs (Block.ThisVariable): remove the recursion here, to
15364         make the --profile more sane.
15366 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
15368         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
15369         assembly, by JB Evain.
15371 2004-12-17  Raja R Harinath  <rharinath@novell.com>
15373         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
15374           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
15375         "parent" refers to enclosing type/class.  "base" refers to superclass.
15377 2004-12-17  Raja R Harinath  <rharinath@novell.com>
15379         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
15380         Ensure that we only have GlobalAttributes.
15381         * attribute.cs (Attribute.Emit): Make non-virtual.
15382         (GlobalAttribute.Emit): Remove.
15383         (Attribute.Resolve): Make virtual.
15384         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
15385         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
15386         the argument. Don't create one.
15387         (Attribute.GetObsoleteAttribute): Likewise.
15388         (Attribute.GetClsCompliantAttributeValue): Likewise.
15389         * class.cs, decl.cs: Update to changes.
15391 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
15393         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
15394         
15395         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
15396         
15397         * statement.cs (Foreach.Resolve): Add error 186 report.
15399 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
15401         * expression.cs (Conditional.DoResolve): Add warning 429.
15402         
15403         * statement.cs (If.Resolve): Add warning 665.
15405 2004-12-16  Raja R Harinath  <rharinath@novell.com>
15407         New invariant: RootContext.Tree.Types.NamespaceEntry == null
15408         except when in the parser, and in GlobalAttribute.
15409         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
15410         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
15411         RootContext.Tree.Types.NamespaceEntry once work is done.
15412         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
15413         and resets RootContext.Tree.Types.NamespaceEntry.
15415 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
15417         * cs-parser.jay: Don't create a block for every variable.
15419 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
15421         * location.cs: Provide extra information.
15423         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
15424         variables from the captured environment, it is the ldarg_0.
15426 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
15428         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
15429         find a conclusion.
15430         
15431         * class.cs: Changed warning level for 169 to avoid developer
15432         displeasure from warning flooding. It will be changed back when they
15433         fix most of current BCL warnings.
15434         
15435         * RootContext.cs: Pushed default WarningLevel to 3.
15436         
15437         * statement.cs: Removed unused variable.
15439 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
15441         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
15442         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
15443         Add error 502 report.
15444         (StaticClass.DefineType): Add error 441 report.
15445         (Class.AllowedModifiersProp): New virtual property as temporary
15446         extension to AllowedModifiers.
15447         (Class.DefineType): Add error 418 report. Moved ModFlags check here
15448         to share implementation with StaticClass and don't call virtual
15449         methods from ctor.
15450         
15451         * driver.cs (MainDriver): Add error 1558 test.
15453         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
15454         report. Moved error 36 test here.
15456         * statement.cs (Throw.Resolve): Add error 724 report.
15458         * typemanager.cs: Add out_attribute_type core type.
15459         
15460 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
15462         * class.cs (TypeContainer.VerifyClsCompliance): Add error
15463         3018 report.
15464         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
15466         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
15467         3017 report.
15468         
15469         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
15471         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
15472         Add error 3023 report.
15473         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
15475         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
15476         implementation.
15478 2004-12-12  John Luke  <john.luke@gmail.com>
15480         * driver.cs (AddArgs): take -- into account when
15481         adding arguments, fixes bug 65710 
15483 2004-12-12  Martin Baulig  <martin@ximian.com>
15485         * expression.cs (Unary.TryReduceNegative): Added support for
15486         SByteConstant and ByteConstant.
15487         (Unary.Reduce): Check error values from TryReduceNegative().
15489 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
15491         * attributes.cs (Attribute.Resolve): Avoid multiple error report
15492         and report exception as error 182.
15494 2004-12-10  Raja R Harinath  <rharinath@novell.com>
15496         * driver.cs (Main): Fix message when there are warnings.
15498 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
15500         * delegate.cs: Fixed my fix from yesterday, sorry about that.
15502 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
15504         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
15505         Reduced number of warnings.
15506         
15507         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
15509 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
15511         * driver.cs: Removed message.
15513         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
15515 2004-12-08    <vargaz@freemail.hu>
15517         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
15519 2004-12-08  Martin Baulig  <martin@ximian.com>
15521         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
15522         instead of a CS3002 for properties and indexer.
15524 2004-12-08  Martin Baulig  <martin@ximian.com>
15526         * decl.cs (MemberName.ToString): Make this work again.
15528 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
15530         * attribute.cs (Resolve): Add error 591 detection.
15532         * class.cs (FieldMember.Define): Add error 1547 detection.
15533         (Indexer.Define): Add error 620 detection.
15534         (Operator.Define): Add error 590 detection.
15536         * ecore.cs: Missing argument for error 79.
15538         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
15539         detection.
15541 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
15543         Fix #70106
15544         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
15545         only.
15547 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
15549         * cs-parser.jay : handle doc comments on implicit/explicit operators.
15550           Some operator comments were suppressed.
15551         * doc.cs : Implicit/explicit operator name in doc comments are like
15552           "op_Explicit(type)~returnType", so added suffix handling.
15554 2004-12-07  Martin Baulig  <martin@ximian.com>
15556         * decl.cs
15557         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
15558         (MemberCore.GetClsCompliantAttributeValue): Likewise.
15559         (DeclSpace.ec): New protected field; store the EmitContext here.
15560         (DeclSpace.EmitContext): New public property; moved here from
15561         `TypeContainer'.
15562         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
15563         EmitContext.
15565         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
15566         (Enum.Emit): Don't create a new EmitContext.
15568         * delegate.cs (Delegate.DefineType): Always create the
15569         EmitContext.
15571         * iterators.cs (Iterators.DefineIterator): Create a new
15572         EmitContext and store it in `ec'.
15574 2004-08-24  Martin Baulig  <martin@ximian.com>
15576         * typemanager.cs
15577         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
15578         this for accessibility checks.
15579         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
15580         IsNestedFamilyAccessible.
15581         (TypeManager.IsSubclassOf): New method, do what the name actually
15582         says.   
15584 2004-12-06  Raja R Harinath  <rharinath@novell.com>
15586         Fix crash on cs0657-17.cs.
15587         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
15588         Use RootContext.Tree.Types, not 'new RootTypes ()'.
15589         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
15590         the case where the NamespaceEntry gets overwritten.
15592 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
15594         Fixed #69195, #56821
15595         * ecore.cs (ResolveBoolean): Tiny refactoring.
15597         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
15598         of right expression resolving when left is false constant and
15599         operator is LogicalAnd OR true constant and operator is LogicalOr.
15601         * statement.cs (ResolveUnreachable): Always reports warning.
15603 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
15605         * class.cs: Distinguish between 1721 and 1722 (just a little help
15606         for the programmer).
15608 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
15610         * delegate.cs: Only allow this on new versions of the language. 
15612 2004-12-02  Duncan Mak  <duncan@ximian.com>
15614         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
15615         Expression class.
15616         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
15617         here as a static method. Take an additional bool out parameter
15618         `must_do_cs1540_check' for signaling to InstanceResolve.
15619         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
15620         member field from PropertyExpr class and made it an argument of
15621         the method instead.
15622         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
15623         check for MarshalByRefObject, and report CS0122 instead of CS1540.
15624         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
15625         and `remove_accessor' as well as InstanceResolve: report CS0122
15626         where applicable.
15628         Fixes #70129.
15630 2004-12-03  Raja R Harinath  <rharinath@novell.com>
15632         Fix test-327.cs, test-328.cs, and put in early infrastructure
15633         for eventually fixing #52697.
15634         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
15635         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
15636         from other methods.
15637         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
15638         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
15639         (VerifyUsing, error246): Update.
15640         * rootcontext.cs (RootContext.NamespaceLookup): Just use
15641         'NamespaceEntry.LookupNamespaceOrType'.
15643 2004-12-03  Martin Baulig  <martin@ximian.com>
15645         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
15646         method as our child, call AnonymousMethod.Compatible() on it.
15648 2004-12-03  Raja R Harinath  <rharinath@novell.com>
15650         Disable XML documentation support in 'basic' profile.
15651         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
15652         Redirect XmlElement to System.Object.
15653         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
15654         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
15655         * mcs.exe.sources: Add doc-bootstrap.cs.
15656         * doc-bootstrap.cs: New file.  Contains empty stub implementation
15657         of doc.cs.
15659 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
15661         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
15662           comments are allowed.
15664 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
15666         * delegate.cs: Add checks for subtypes in paramaters and return values
15667         in VerifyMethod () to add support for Covariance/Contravariance
15668         in delegates.
15669         
15670 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
15672         * report.cs: Remove extra closing parenthesis.
15674         * convert.cs (Error_CannotImplicitConversion): If the name of the
15675         types are the same, provide some extra information.
15677         * class.cs (FieldBase): Use an unused bit field from the field to
15678         encode the `has_offset' property from the FieldMember.  This saves
15679         a couple of Ks on bootstrap compilation.
15681         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
15682         method as our child, return the AnonymousMethod resolved
15683         expression.
15685         * expression.cs (New.DoResolve): Allow return values from
15686         NewDelegate to also include AnonymousMethods.
15688         Fixes #70150.
15690 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
15692         Fix bug #70102
15693         * attribute.cs (Resolve): Improved implementation of params
15694         attribute arguments.
15696         * support.cs (ParameterData): Add HasParams to be faster.
15698 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
15700         all things are for /doc support:
15702         * doc.cs: new file that supports XML documentation generation.
15703         * mcs.exe.sources: added doc.cs.
15704         * driver.cs:
15705           Handle /doc command line option.
15706           Report error 2006 instead of 5 for missing file name for /doc.
15707           Generate XML documentation when required, after type resolution.
15708         * cs-tokenizer.cs:
15709           Added support for picking up documentation (/// and /** ... */),
15710           including a new XmlCommentState enumeration.
15711         * cs-parser.jay:
15712           Added lines to fill Documentation element for field, constant,
15713           property, indexer, method, constructor, destructor, operator, event
15714           and class, struct, interface, delegate, enum.
15715           Added lines to warn incorrect comment.
15716         * rootcontext.cs :
15717           Added Documentation field (passed only when /doc was specified).
15718         * decl.cs:
15719           Added DocComment, DocCommentHeader, GenerateDocComment() and
15720           OnGenerateDocComment() and some supporting private members for
15721           /doc feature to MemberCore.
15722         * class.cs:
15723           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
15724         * delegate.cs:
15725           Added overriden DocCommentHeader.
15726         * enum.cs:
15727           Added overriden DocCommentHeader and GenerateDocComment().
15729 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
15731         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
15732         unwrapping the enumeration values, chain to
15733         DoConstantNumericPromotions again, so we can promote things to the
15734         fundamental types (takes care of enums that are bytes, sbytes).
15736         Fixes bug #62054.
15738 2004-12-01  Raja R Harinath  <rharinath@novell.com>
15740         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
15741         Fix long-standing bug in type-lookup.  Use FindType instead of
15742         LookupType when ec.ResolvingTypeTree.
15743         (Attribute.ResolveType, Attribute.Resolve)
15744         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
15745         Update to changes.
15746         (Attributes.Search): Remove internal version.  Update.
15747         (Attributes.SearchMulti): Update.
15748         (Attributes.GetClsCompliantAttribute): Remove.
15749         (Attributes.GetIndexerNameAttribute): Remove.
15750         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
15751         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
15752         * class.cs (Indexer.Define): Likewise.
15754 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
15756         Fix bug #68790
15757         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
15758         MarshallByReference members access.
15760         * expression.cs: Use CheckMarshallByRefAccess;
15761         Better error CS0197 message.
15763         * report.cs: Print whole related error message.
15765 2004-11-30  Raja R Harinath  <rharinath@novell.com>
15767         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
15768         the current directory to help debugging.
15770 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15772         * class (GetClassBases): Better error 60 report.
15773         (EventProperty): Disabled warning 67 detection.
15775 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15777         Fix bug #60324
15778         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
15780         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
15781         precise values.
15783 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15785         Fix bug #49488
15786         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
15788         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
15790 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
15792         * attribute.cs (Attribute.Resolve): Refine error reporting and
15793         report a cs0117 if the identifier does not exist, to distinguish
15794         from 0617 which is a miss-use of the actual identifier.
15796         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
15797         between cs0070 and cs0079.
15799         * class.cs (MemberBase.DoDefine): When reporting a wrong
15800         accessibility level, we use MethodCore to compare instead of
15801         Method (this was a regression in some refactoring effort).
15803         So now we correctly report cs0056 again.
15805         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
15806         testing the target_type (which was known to be object_type) and
15807         not the source type (which is anonymous_method).
15809         Fixed reporting of error cs1660.
15811         * expression.cs (UserCast.Source): Expose the underlying cast.
15813         * statement.cs (Switch.SwitchGoverningType): Sort the list of
15814         allowed types to find a match to int32 first (most common).
15816         In addition, it ignores any ImplicitUserConversions that did an
15817         internal implicit conversion (as the switch statement allows only
15818         one integral conversion to exist).
15820         * class.cs (PartialContainer.Create): rename `name' to
15821         `member_name' for clarity.  Then replace the string calls with a
15822         call to MemberName.GetPartialName, as now using
15823         MemberName.ToString is an error (this is due to the side effects
15824         it had, that were fixed in the past).
15826         This will restore the error reporting on a number of partial class
15827         errors that were missusing this (and getting an exception as a
15828         results, which is now just a plain textual warning, because
15829         yyparse debug output would crash otherwise).
15831 2004-11-26  Raja R Harinath  <rharinath@novell.com>
15833         * Makefile (PROGRAM_INSTALL_DIR): Remove.
15835 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
15837         * rootcontext.cs (LookupType): Make sure to cache lookups that
15838         don't give us a negative result. This saves about 5% of corlib
15839         compilation time.
15841 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
15843         * report.cs (AbstractMessage.Print): messages are sent to stderr
15845         * class.cs (TypeContainer.GetClassBases): It is an error to have a
15846         non-interface in the list of interfaces (at this point, either
15847         parent was properly set, or a base class is being listed in the
15848         interfaces section).
15850         This flags error 1722, and resolves the crash from bug 69259.
15852 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
15854         * statement.cs (Using.EmitExpressionFinally): make this work right
15855         for valuetypes. Fixes 69926.
15857 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
15859         * const.cs (Const.ChangeType): Cope with the "0 literal can be
15860         converted to an enum" here, before we try to change the underlying
15861         type.  This code exists, but it is a different code path than the
15862         one used while encoding constants.
15864         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
15865         old bug: when converting from the null literal to a pointer,
15866         return an EmptyCast, not the NullLiteral.
15868         This fixes #69921, the recent null_type changes probably made this
15869         bug more prominent.
15871         (ImplicitReferenceConversionExists): In addition, resynchronized
15872         the code here, so it matches the same code in
15873         ImplicitReferenceConversionExists for the `from any class-type S
15874         to any interface-type T'.
15875         
15877 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
15879         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
15881 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
15883         * cs-parser.jay: Use verbosity accordingly. 
15885 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
15887         * expression.cs (Unary.ResolveOperator): Do not report warning;
15888         AddressOf reads from variable.
15889         
15890         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
15892 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
15894         Fix bug #69462
15896         * attribute.cs (Attributable): Removed CheckTargets.
15897         (Attributes.Emit): Explicit attribute targets are tested here.
15899         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
15900         not enabled for interfaces.
15902         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
15903         (GetAssemblyName): Ouch next bug there.
15905 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
15907         * expression.cs: Error 275 added.
15908         
15909 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
15911         Fix bug #69177 (Implemented decimal constant support)
15913         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
15914         (BinaryFold): Add DecimalConstant.
15916         * const.cs (Define): Decimal constant 
15917         (is not constant.
15918         (ChangeType): Add decimal type handling.
15919         (LookupConstantValue): Don't set value for decimal type but
15920         emit DecimalConstantAttribute. Needed for constant optimization.
15922         * constant.cs (ToDecimal): New method.
15923         (ConvertToDecimal): New method.
15924         (IntConstant): Implemented ConvertToDecimal.
15925         (DecimalConstant.Emit): Emit optimized version for decimals in
15926         int range.
15928         * expression.cs (ResolveOperator): Changed order of constant
15929         reduction to work correctly with native types which have
15930         overloaded operators.
15931         (ResolveMemberAccess): Extract constant value from attribute
15932         for decimal type.
15934         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
15936         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
15937         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
15938         (ChangeType): Decimal is special.
15939         (TypeToCoreType): Add decimal type.
15941 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
15943         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
15944         decimal types.
15946 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
15948         * class.cs (EventField.ApplyAttributeBuilder): Fix error
15949         test cs1667-5.cs.
15951 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
15953         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
15955         * pending.cs (PendingImplementation): Grab only interfaces.
15957 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
15959         * statement.cs (ForeachHelperMethods): Add location member and
15960         error 202 detection.
15962 2004-11-19  Raja R Harinath  <rharinath@novell.com>
15964         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
15965         automatically handled by executable.make.
15966         (PROGRAM): Make profile-specific.
15968 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
15970         * expression.cs (DoResolveBase): Fixed wrong warning for out
15971         variables.
15973 2004-11-18  Martin Baulig  <martin@ximian.com>
15975         Merged latest changes into gmcs.  Please keep this comment in
15976         here, it makes it easier for me to see what changed in MCS since
15977         the last time I merged.
15979 2004-11-17  Raja R Harinath  <rharinath@novell.com>
15981         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
15982         (TypeHandle.GetMemberCache): New.
15983         (TypeHandle.TypeHandle): Update.
15984         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
15985         (TypeManager.LookupParentInterfacesCache):
15986         Rename from LookupInterfaceCache.  Optimize slightly.
15987         (TypeManager.MemberLookup_FindMembers): Update.
15988         * decl.cs (MemberCache.MemberCache): Set Container to null in the
15989         multi-type variant.
15990         (AddCacheContents): Rename from AddHashtable.
15991         * class.cs (TypeContainer.parent_container): Remove.
15992         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
15993         (TypeContainer.DoDefineMembers): Don't initialize it.
15994         Update to name changes.
15995         
15996 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
15998         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
15999         that factors the code to check access modifiers on override.  
16001         (PropertyBase): Use the code here.
16003         Patch from Lluis S'anchez, fixes bug #69361.
16005 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
16007         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
16008         routine that is used to report the use of a captured variable
16009         whose address has been taken.
16011         There are two checks: one when variables are being captured and
16012         the other check is when the address of a variable is taken. 
16013         
16014         (because an anonymous methods might be resolved before *or* after
16015         the address has been taken) and 
16017         * expression.cs (Conditional.DoResolve): Remove the special
16018         casing that Martin added to trueExpr and falseExpr being both
16019         NullLiteral.  We get the right behavior now just by introducing
16020         the null_type into the compiler. 
16022         * convert.cs (ExplicitConversion): Change the code to use
16023         null_type instead of testing `expr is NullLiteral'.
16024         (ImplicitConversionStandard): use null_type too.
16025         (ImplicitReferenceConversionExists): use null_type too.
16026         (ImplicitReferenceConversion): use null_type too.
16028         * literal.cs: The type of `NullLiteral' is now null_type instead
16029         of object_type. 
16030         (Resolve): Set the type here.
16032         * typemanager.cs: Introduce null_type.
16034 2004-11-17  Martin Baulig  <martin@ximian.com>
16036         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
16037         direction, like FindMembers() does.  Fixes #69546, testcase is in
16038         test-315.cs.    
16040 2004-11-16  Martin Baulig  <martin@ximian.com>
16042         This is based on a patch from Marek Safar, see bug #69082.
16043         Fixes bugs #63705 and #67130.
16045         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
16046         method; create a MemberCache for an interface type and cache the
16047         result.
16049         * decl.cs (IMemberContainer.ParentContainer): Removed.
16050         (IMemberContainer.ParentCache): New property.
16051         (MemberCache.SetupCacheForInterface): Removed.
16052         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
16053         to create a cache for an interface's "parent".
16055         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
16056         interfaces too.
16058 2004-11-16  Martin Baulig  <martin@ximian.com>
16060         Merged back from gmcs; these changes already went into gmcs a
16061         couple of weeks ago.
16063         * typemanager.cs
16064         (TypeManager.AddUserType): Removed the `ifaces' argument.
16065         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
16066         `TypeExpr []'.
16067         (TypeManager.AddUserInterface): Removed.
16068         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
16069         `TypeExpr []'.
16070         (TypeManager.GetInterfaces): Likewise.
16071         (TypeManager.GetExplicitInterfaces): Likewise.
16073         * ecore.cs (TypeExpr.GetInterfaces): Removed.
16075         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
16076         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
16078 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
16080         * statement.cs: Avoid adding bools to a hashtable.
16082 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
16084         * expression.cs (Invocation.OverloadResolve): Flag error if we are
16085         calling an unsafe method from a safe location.
16087 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
16089         Fix #69167
16090         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
16092 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
16094         * namespace.cs (VerifyUsing): use GetPartialName instead of
16095         ToString. 
16097 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
16099         * statement.cs (Return.Resolve): Fix regression in typo: if
16100         `in_exc', we have to request a NeedReturnLabel, this was a typo
16101         introduced in the anonymous method check-in.  Fixes #69131.
16103         * Indexers were using the ShortName when defining themselves,
16104         causing a regression in the compiler bootstrap when applying the
16105         patch from 2004-11-02 (first part), now they use their full name
16106         and the bug is gone.
16108 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
16110         * driver.cs: Strip the path from the names of embedded resources. Fixes
16111         #68519.
16113 2004-11-04  Raja R Harinath  <rharinath@novell.com>
16115         Fix error message regression: cs0104-2.cs.
16116         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
16117         (AliasEntry.Resolve): Update.
16118         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
16119         'silent' flag.
16120         (RootContext.LookupType): Update.
16122 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
16124         * cs-parser.jay: Add support for handling accessor modifiers
16125         * class: Add support port accessor modifiers and error checking,
16126         define PropertyMethod.Define as virtual (not abstract anymore)
16127         * ecore.cs: Add checking for proeprties access with access modifiers
16128         * iterators.cs: Modify Accessor constructor call based in the modified
16129         constructor
16130 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
16132         * expression.cs (StringConcat): Handle being called twice,
16133         as when we have a concat in a field init with more than two
16134         ctors in the class
16136 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
16138         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
16139         special case explicit implementations, we should always produce
16140         the .property or .event declaration.
16141         
16142         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
16143         since it will not return correct data if people use this
16144         unresolved in the presence of using statements (see test-313).
16146         * class.cs (MethodData.Define): If we are an explicit interface
16147         implementation, set the method name to the full name of the
16148         interface plus the name of the method.  
16150         Notice that using the method.MethodName.GetFullName() does not
16151         work, as it will only contain the name as declared on the source
16152         file (it can be a shorthand in the presence of using statements)
16153         and not the fully qualifed type name, for example:
16155         using System;
16157         class D : ICloneable {
16158                 object ICloneable.Clone ()  {
16159                 }
16160         }
16162         Would produce a method called `ICloneable.Clone' instead of
16163         `System.ICloneable.Clone'.
16165         * namespace.cs (Alias.Resolve): Use GetPartialName.
16166         
16167 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
16169         * cs-parser.jay: Add error 1055 report.
16171 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
16173         * assign.cs (Assign.DoResolve): Only do the transform of
16174         assignment into a New if the types are compatible, if not, fall
16175         through and let the implicit code deal with the errors and with
16176         the necessary conversions. 
16178 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
16180         * cs-parser.jay: Add error 1031 report.
16182         * cs-tokenizer.cs: Add location for error 1038.
16184 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16186         * cs-parser.jay: Add error 1016 report.
16188 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16190         * cs-parser.jay: Add errors 1575,1611 report.
16192 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16194         * cs-parser.jay: Add error 1001 report.
16196 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16198         Fix #68850
16199         * attribute.cs (GetMarshal): Add method argument for
16200         caller identification.
16202         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
16203         agument for GetMarshal and RuntimeMissingSupport.
16205 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16207         * attribute.cs (ExtractSecurityPermissionSet): Removed
16208         TypeManager.code_access_permission_type.
16210         * typemanager.cs: Removed TypeManager.code_access_permission_type.
16212 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
16214         * expression.cs (LocalVariableReference.DoResolveLValue): Check
16215         for obsolete use of a variable here.   Fixes regression on errors
16216         cs0619-25 and cs0619-26.
16218 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
16220         Fix #62358, implemented security attribute encoding.
16222         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
16223         Tests permitted SecurityAction for assembly or other types.
16224         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
16225         data from SecurityPermissionAttribute to PermisionSet class.
16227         * class.cs (ApplyAttributeBuilder): Added special handling
16228         for System.Security.Permissions.SecurityAttribute based types.
16230         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
16231         special handling for System.Security.Permissions.SecurityAttribute
16232         based types.
16234         * enum.cs (ApplyAttributeBuilder): Added special handling
16235         for System.Security.Permissions.SecurityAttribute based types.
16237         * parameter.cs (ApplyAttributeBuilder): Added special handling
16238         for System.Security.Permissions.SecurityAttribute based types.
16240         * rootcontext.cs: Next 2 core types.
16242         * typemanager.cs (TypeManager.security_permission_attr_type):
16243         Built in type for the SecurityPermission Attribute.
16244         (code_access_permission_type): Build in type.
16246 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
16248         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
16249         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
16250         all of this information into
16251         EmitContext.EmitCapturedVariableInstance.
16252         
16253         * codegen.cs (EmitCapturedVariableInstance): move here the
16254         funcionality of emitting an ldarg.0 in the presence of a
16255         remapping.   This centralizes the instance emit code.
16257         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
16258         then emit a load of this: it means that we have reached the
16259         topmost ScopeInfo: the one that contains the pointer to the
16260         instance of the class hosting the anonymous method.
16262         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
16263         captures to the topmost CaptureContext.
16265 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
16267         * expression.cs (LocalVariableReference): Move the knowledge about
16268         the iterators into codegen's EmitCapturedVariableInstance.
16270 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
16272         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
16273         all code paths return a value from an anonymous method (it is the
16274         same as the 161 error, but for anonymous methods).
16276 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
16278         The introduction of anonymous methods in the compiler changed
16279         various ways of doing things in the compiler.  The most
16280         significant one is the hard split between the resolution phase
16281         and the emission phases of the compiler.
16283         For instance, routines that referenced local variables no
16284         longer can safely create temporary variables during the
16285         resolution phase: they must do so from the emission phase,
16286         since the variable might have been "captured", hence access to
16287         it can not be done with the local-variable operations from the runtime.
16288         
16289         * statement.cs 
16291         (Block.Flags): New flag `IsTopLevel' to indicate that this block
16292         is a toplevel block.
16294         (ToplevelBlock): A new kind of Block, these are the blocks that
16295         are created by the parser for all toplevel method bodies.  These
16296         include methods, accessors and anonymous methods.
16298         These contain some extra information not found in regular blocks:
16299         A pointer to an optional CaptureContext (for tracking captured
16300         local variables and parameters).  A pointer to the parent
16301         ToplevelBlock.
16302         
16303         (Return.Resolve): Catch missmatches when returning a value from an
16304         anonymous method (error 1662).
16305         Invoke NeedReturnLabel from the Resolve phase instead of the emit
16306         phase.
16308         (Break.Resolve): ditto.
16310         (SwitchLabel): instead of defining the labels during the
16311         resolution phase, we now turned the public ILLabel and ILLabelCode
16312         labels into methods called GetILLabelCode() and GetILLabel() that
16313         only define the label during the Emit phase.
16315         (GotoCase): Track the SwitchLabel instead of the computed label
16316         (its contained therein).  Emit the code by using
16317         SwitchLabel.GetILLabelCode ().
16319         (LocalInfo.Flags.Captured): A new flag has been introduce to track
16320         whether the Local has been captured or not.
16322         (LocalInfo.IsCaptured): New property, used to tell whether the
16323         local has been captured.
16324         
16325         * anonymous.cs: Vastly updated to contain the anonymous method
16326         support.
16328         The main classes here are: CaptureContext which tracks any
16329         captured information for a toplevel block and ScopeInfo used to
16330         track the activation frames for various local variables.   
16332         Each toplevel block has an optional capture context associated
16333         with it.  When a method contains an anonymous method both the
16334         toplevel method and the anonymous method will create a capture
16335         context.   When variables or parameters are captured, they are
16336         recorded on the CaptureContext that owns them, for example:
16338         void Demo () {
16339              int a;
16340              MyDelegate d = delegate {
16341                  a = 1;
16342              }
16343         }
16345         Here `a' will be recorded as captured on the toplevel
16346         CapturedContext, the inner captured context will not have anything
16347         (it will only have data if local variables or parameters from it
16348         are captured in a nested anonymous method.
16350         The ScopeInfo is used to track the activation frames for local
16351         variables, for example:
16353         for (int i = 0; i < 10; i++)
16354                 for (int j = 0; j < 10; j++){
16355                    MyDelegate d = delegate {
16356                         call (i, j);
16357                    }
16358                 }
16360         At runtime this captures a single captured variable `i', but it
16361         captures 10 different versions of the variable `j'.  The variable
16362         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
16363         recorded on a child.  
16365         The toplevel ScopeInfo will also track information like the `this'
16366         pointer if instance variables were referenced (this is necessary
16367         as the anonymous method lives inside a nested class in the host
16368         type of the method). 
16370         (AnonymousMethod): Expanded to track the Toplevel, implement
16371         `AnonymousMethod.Compatible' to tell whether an anonymous method
16372         can be converted to a target delegate type. 
16374         The routine now also produces the anonymous method content
16376         (AnonymousDelegate): A helper class that derives from
16377         DelegateCreation, this is used to generate the code necessary to
16378         produce the delegate for the anonymous method that was created. 
16380         * assign.cs: API adjustments for new changes in
16381         Convert.ImplicitStandardConversionExists.
16383         * class.cs: Adjustments to cope with the fact that now toplevel
16384         blocks are of type `ToplevelBlock'. 
16386         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
16387         insteda of standard blocks.
16389         Flag errors if params arguments are passed to anonymous methods.
16391         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
16392         `CurrentAnonymousMethod' which points to the current Anonymous
16393         Method.  The variable points to the AnonymousMethod class that
16394         holds the code being compiled.  It is set in the new EmitContext
16395         created for the anonymous method.
16397         (EmitContext.Phase): Introduce a variable and an enumeration to
16398         assist in enforcing some rules about when and where we are allowed
16399         to invoke certain methods (EmitContext.NeedsReturnLabel is the
16400         only one that enfonces this right now).
16402         (EmitContext.HaveCaptureInfo): new helper method that returns
16403         whether we have a CapturedContext initialized.
16405         (EmitContext.CaptureVariable): New method used to register that a
16406         LocalInfo must be flagged for capturing. 
16408         (EmitContext.CapturedParameter): New method used to register that a
16409         parameters must be flagged for capturing. 
16410         
16411         (EmitContext.CapturedField): New method used to register that a
16412         field must be flagged for capturing. 
16414         (EmitContext.HaveCapturedVariables,
16415         EmitContext.HaveCapturedFields): Return whether there are captured
16416         variables or fields. 
16418         (EmitContext.EmitMethodHostInstance): This is used to emit the
16419         instance for the anonymous method.  The instance might be null
16420         (static methods), this (for anonymous methods that capture nothing
16421         and happen to live side-by-side with the current method body) or a
16422         more complicated expression if the method has a CaptureContext.
16424         (EmitContext.EmitTopBlock): Routine that drives the emission of
16425         code: it will first resolve the top block, then emit any metadata
16426         and then emit the code.  The split is done so that we can extract
16427         any anonymous methods and flag any captured variables/parameters.
16428         
16429         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
16430         during this phase, the ILGenerator should not be used as labels
16431         and local variables declared here might not be accessible to any
16432         code that is part of an anonymous method.  
16434         Exceptions to this include the temporary variables that are
16435         created by some statements internally for holding temporary
16436         variables. 
16437         
16438         (EmitContext.EmitMeta): New routine, in charge of emitting all the
16439         metadata for a cb
16441         (EmitContext.TemporaryReturn): This method is typically called
16442         from the Emit phase, and its the only place where we allow the
16443         ReturnLabel to be defined other than the EmitMeta.  The reason is
16444         that otherwise we would have to duplicate a lot of logic in the
16445         Resolve phases of various methods that today is on the Emit
16446         phase. 
16448         (EmitContext.NeedReturnLabel): This no longer creates the label,
16449         as the ILGenerator is not valid during the resolve phase.
16451         (EmitContext.EmitThis): Extended the knowledge in this class to
16452         work in anonymous methods in addition to iterators. 
16454         (EmitContext.EmitCapturedVariableInstance): This emits whatever
16455         code is necessary on the stack to access the instance to a local
16456         variable (the variable will be accessed as a field).
16458         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
16459         EmitContext.EmitAddressOfParameter): Routines to support
16460         parameters (not completed at this point). 
16461         
16462         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
16463         will also remove the parameters.
16465         * convert.cs (Convert): Define a `ConstantEC' which points to a
16466         null.  This is just to prefity some code that uses
16467         ImplicitStandardConversion code and do not have an EmitContext
16468         handy.
16470         The idea is to flag explicitly that at that point in time, it is
16471         known that the conversion will not trigger the delegate checking
16472         code in implicit conversions (which requires a valid
16473         EmitContext). 
16475         Everywhere: pass new EmitContext parameter since
16476         ImplicitStandardConversionExists now requires it to check for
16477         anonymous method conversions. 
16479         (Convert.ImplicitStandardConversionExists): If the type of an
16480         expression is the anonymous_method_type, and the type is a
16481         delegate, we invoke the AnonymousMethod.Compatible method to check
16482         whether an implicit conversion is possible. 
16484         (Convert.ImplicitConversionStandard): Only do implicit method
16485         group conversions if the language level is not ISO_1.
16487         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
16488         MethodInfo for the Invoke method.  used by Delegate and
16489         AnonymousDelegate.
16491         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
16492         method conversions if the target type is a delegate.
16494         Removed extra debugging nops.
16496         (LocalVariableReference): Turn the `local_info' into a public
16497         field. 
16499         Add `prepared' field, the same hack used for FieldExprs to cope
16500         with composed assignments, as Local variables do not necessarily
16501         operate purely on the stack as they used to: they can be captured
16502         fields. 
16504         Add `temp' for a temporary result, like fields.
16506         Refactor DoResolve and DoResolveLValue into DoResolveBase.
16508         It now copes with Local variables that are captured and emits the
16509         proper instance variable to load it from a field in the captured
16510         case. 
16512         (ParameterReference.DoResolveBase): During the resolve phase,
16513         capture parameters if we are in an anonymous method.
16515         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
16516         anonymous method, use the EmitContext helper routines to emit the
16517         parameter reference.
16519         * iterators.cs: Set RemapToProxy to true/false during the
16520         EmitDispose class.
16522         * parameters.cs (GetParameterByName): New helper method. 
16524         * typemanager.cs (anonymous_method_type) a new type that
16525         represents an anonyous method.  This is always an internal type,
16526         used as a fencepost to test against the anonymous-methodness of an
16527         expression. 
16528         
16529 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
16531         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
16532         561 report.
16533         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
16535 2004-10-18  Martin Baulig  <martin@ximian.com>
16537         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
16538         `Type' directly, but call ResolveType() on it.
16539         (Catch.Resolve): Likewise.
16540         (Foreach.Resolve): Likewise.
16542 2004-10-18  Martin Baulig  <martin@ximian.com>
16544         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
16545         `Type' directly, but call ResolveType() on it.
16546         (Probe.DoResolve): Likewise.
16547         (ArrayCreation.LookupType): Likewise.
16548         (TypeOf.DoResolve): Likewise.
16549         (SizeOf.DoResolve): Likewise.
16551 2004-10-18  Martin Baulig  <martin@ximian.com>
16553         * expression.cs (Invocation.BetterFunction): Put back
16554         TypeManager.TypeToCoreType().
16556 2004-10-18  Raja R Harinath  <rharinath@novell.com>
16558         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
16559         the ResolveType.
16561 2004-10-18  Martin Baulig  <martin@ximian.com>
16563         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
16564         `Type' directly, but call ResolveType() on it.
16566 2004-10-18  Martin Baulig  <martin@ximian.com>
16568         * class.cs (FieldMember.Define): Don't access the TypeExpr's
16569         `Type' directly, but call ResolveType() on it.
16570         (MemberBase.DoDefine): Likewise.
16572         * expression.cs (New.DoResolve): Don't access the TypeExpr's
16573         `Type' directly, but call ResolveType() on it.
16574         (ComposedCast.DoResolveAsTypeStep): Likewise.
16576         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
16577         `Type' directly, but call ResolveType() on it.
16579 2004-10-17  John Luke  <john.luke@gmail.com>
16581         * class.cs (Operator.GetSignatureForError): use CSharpName
16583         * parameter.cs (Parameter.GetSignatureForError): Returns
16584         correct name even if was not defined.
16586 2004-10-13  Raja R Harinath  <rharinath@novell.com>
16588         Fix #65816.
16589         * class.cs (TypeContainer.EmitContext): New property.
16590         (DefineNestedTypes): Create an emitcontext for each part.
16591         (MethodCore.DoDefineParameters): Use container's emitcontext.
16592         Pass type array to InternalParameters.
16593         (MemberBase.DoDefine): Use container's emitcontext.
16594         (FieldMember.Define): Likewise.
16595         (Event.Define): Likewise.
16596         (SetMethod.GetParameterInfo): Change argument to EmitContext.
16597         Pass type array to InternalParameters.
16598         (SetIndexerMethod.GetParameterInfo): Likewise.
16599         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
16600         * delegate.cs (Define): Pass emitcontext to
16601         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
16602         array to InternalParameters.
16603         * expression.cs (ParameterReference.DoResolveBase): Pass
16604         emitcontext to GetParameterInfo.
16605         (ComposedCast.DoResolveAsTypeStep): Remove check on
16606         ec.ResolvingTypeTree.
16607         * parameter.cs (Parameter.Resolve): Change argument to
16608         EmitContext.  Use ResolveAsTypeTerminal.
16609         (Parameter.GetSignature): Change argument to EmitContext.
16610         (Parameters.ComputeSignature): Likewise.
16611         (Parameters.ComputeParameterTypes): Likewise.
16612         (Parameters.GetParameterInfo): Likewise.
16613         (Parameters.ComputeAndDefineParameterTypes): Likewise.
16614         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
16615         * support.cs (InternalParameters..ctor): Remove variant that takes
16616         a DeclSpace.
16617         * typemanager.cs (system_intptr_expr): New.
16618         (InitExpressionTypes): Initialize it.
16620 2004-10-12  Chris Toshok  <toshok@ximian.com>
16622         * cs-parser.jay: fix location for try_statement and catch_clause.
16624 2004-10-11  Martin Baulig  <martin@ximian.com>
16626         * report.cs: Don't make --fatal abort on warnings, we have
16627         -warnaserror for that.
16629 2004-10-07  Raja R Harinath  <rharinath@novell.com>
16631         More DeclSpace.ResolveType avoidance.
16632         * decl.cs (MemberCore.InUnsafe): New property.
16633         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
16634         with newly created EmitContext.
16635         (FieldMember.Define): Likewise.
16636         * delegate.cs (Delegate.Define): Likewise.
16637         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
16638         only if normal name-lookup fails.
16639         (TypeExpr.DoResolve): Enable error-checking.
16640         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
16641         (SizeOf.DoResolve): Likewise.
16642         (ComposedCast.DoResolveAsTypeStep): Likewise.
16643         (StackAlloc.DoResolve): Likewise.
16644         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
16645         (Block.Unsafe): New property.
16646         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
16647         (Unsafe): Set 'unsafe' flag of contained block.
16648         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
16649         (Fixed.Resolve): Likewise.
16650         (Catch.Resolve): Likewise.
16651         (Using.ResolveLocalVariableDecls): Likewise.
16652         (Foreach.Resolve): Likewise.
16654 2004-10-05  John Luke <john.luke@gmail.com>
16656         * cs-parser.jay: add location to error CS0175
16658 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
16660         * ecore.cs (Expression.Constantity): Add support for turning null
16661         into a constant.
16663         * const.cs (Const.Define): Allow constants to be reference types
16664         as long as the value is Null.
16666 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
16668         * namespace.cs (NamespaceEntry.Using): No matter which warning
16669         level is set, check if this namespace name has already been added.
16671 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
16673         * expression.cs: reftype [!=]= null should always use br[true,false].
16674         # 67410
16676 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
16678         Fix #67108
16679         * attribute.cs: Enum conversion moved to 
16680         GetAttributeArgumentExpression to be applied to the all
16681         expressions.
16683 2004-10-01  Raja R Harinath  <rharinath@novell.com>
16685         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
16686         * class.c (TypeContainer.DefineType): Flag error if
16687         base types aren't accessible due to access permissions.
16688         * decl.cs (DeclSpace.ResolveType): Move logic to
16689         Expression.ResolveAsTypeTerminal.
16690         (DeclSpace.ResolveTypeExpr): Thin layer over
16691         Expression.ResolveAsTypeTerminal.
16692         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
16693         Refactor code into NestedAccess.  Use it.
16694         (DeclSpace.NestedAccess): New.
16695         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
16696         argument to silence errors.  Check access permissions.
16697         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
16698         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
16699         (Cast.DoResolve): Likewise.
16700         (New.DoResolve): Likewise.
16701         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
16702         (TypeOf.DoResolve): Likewise.
16704         * expression.cs (Invocation.BetterConversion): Return the Type of
16705         the better conversion.  Implement section 14.4.2.3 more faithfully.
16706         (Invocation.BetterFunction): Make boolean.  Make correspondence to
16707         section 14.4.2.2 explicit.
16708         (Invocation.OverloadResolve): Update.
16709         (Invocation): Remove is_base field.
16710         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
16711         (Invocation.Emit): Likewise.
16713 2004-09-27  Raja R Harinath  <rharinath@novell.com>
16715         * README: Update to changes.
16717 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
16719         * cs-parser.jay: Reverted 642 warning fix.
16721 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16723         Fix bug #66615
16724         * decl.cs (FindMemberWithSameName): Indexer can have more than
16725         1 argument.
16727 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16729         * expression.cs (LocalVariableReference.DoResolveLValue):
16730         Do not report warning 219 for out values.
16731         (EmptyExpression.Null): New member to avoid extra allocations.
16733 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16735         * cs-parser.jay: Fix wrong warning 642 report.
16737         * cs-tokenizer.cs (CheckNextToken): New helper;
16738         Inspect next character if is same as expected.
16740 2004-09-23  Martin Baulig  <martin@ximian.com>
16742         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
16743         (Convert.ImplicitReferenceConversionExists): Likewise.
16745 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16747         * class.cs (Operator.Define): Add error 448 and 559 report.
16749 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16751         * class.cs (MemberBase.IsTypePermitted): New protected
16752         method for checking error CS0610.
16754 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16756         * class.cs (TypeContainer.HasExplicitLayout): New property
16757         Returns whether container has StructLayout attribute set Explicit.
16758         (FieldMember): New abstract class for consts and fields.
16759         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
16760         (Field): Reuse FieldMember.
16762         * const.cs (Const): Reuse FieldMember.
16764         * rootcontext.cs: EmitConstants call moved to class.
16766 2004-09-22  Martin Baulig  <martin@ximian.com>
16768         Thanks to Peter Sestoft for this bug report.
16770         * expression.cs (Conditional): If both the `trueExpr' and the
16771         `falseExpr' is a NullLiteral, return a NullLiteral.
16773 2004-09-22  Martin Baulig  <martin@ximian.com>
16775         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
16776         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
16777         for the "get_Current" call.
16779 2004-09-22  Martin Baulig  <martin@ximian.com>
16781         Marek and me just fixed one of our oldest bugs: #28562 :-)
16783         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
16785         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
16786         we're an EnumConstant, just return that.
16787         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
16788         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
16789         to get the value which'll actually be written into the attribute.
16790         However, we have to use GetValue() to access the attribute's value
16791         in the compiler.        
16793 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16795         * constant.cs (Constant.IsNegative): New abstract property
16796         IsNegative.
16798         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
16799         (StackAlloc.DoResolve): Reused IsNegative.
16801 2004-09-21  Martin Baulig  <martin@ximian.com>
16803         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
16804         if we're used in an iterator, we may be called from different
16805         methods.
16807         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
16808         we actually have an exception block.
16810 2004-09-20  John Luke <jluke@cfl.rr.com>
16812         * class.cs, cs-parser.jay: Improve the error report for 1520:
16813         report the actual line where the error happens, not where the
16814         class was declared.
16816         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
16817         Pass location information that was available elsewhere.
16819 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
16821         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
16822         runtime to delay sign assemblies.
16824 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
16826         * cs-parser.jay: Do not report the stack trace, this is barely
16827         used nowadays.
16829 2004-08-22  John Luke  <john.luke@gmail.com>
16831         * driver.cs : check that a resource id is not already used
16832         before adding it, report CS1508 if it is, bug #63637
16834 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
16836         * ecore.cs: Removed dead code.
16838 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
16840         * class.cs: Do not report warning CS0067 on the interfaces.
16842 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
16844         * cs-parser.jay: Add error 504 report.
16846 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
16848         * rootcontext.cs: WarningLevel is 4 by default now.
16850         * statement.cs (Fixed.Resolve): Do not null
16851         VariableInfo.
16853 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
16855         Fixed bug #55780
16856         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
16857         deep search when property is not virtual.
16858         (PropertyExpr.ResolveAccessors): Make one call for both
16859         accessors.
16861 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16863         Fixed bug #65766
16864         * statement.cs: Error 152 report constains also location.
16866 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16868         Fixed bug #65766
16869         * const.cs: Explicitly set constant as static.
16871 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16873         Fixed bug #64226
16874         * cs-parser.jay: Add error 1017 report.
16876 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16878         Fixed bug #59980, #64224
16879         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
16881         * typemanager.cs (IsSpecialMethod): Simplified
16883 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16885         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
16886         condition with better params.
16888 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16890         Fixed bug #65238
16891         * attribute.cs (Resolve): Property has to have both
16892         accessors.
16894 2004-09-14  Martin Baulig  <martin@ximian.com>
16896         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
16898 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16900         Fixed bug #61902
16901         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
16902         called and is obsolete then this member suppress message
16903         when call is inside next [Obsolete] method or type.
16905         * expression.cs: Use TestObsoleteMethodUsage member.
16907 2004-09-14  Martin Baulig  <martin@ximian.com>
16909         * cs-parser.jay: Sync a bit with the GMCS version.
16911 2004-09-14  Martin Baulig  <martin@ximian.com>
16913         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
16914         (CSharpParser.yacc_verbose_flag): New public field.
16916         * genericparser.cs: Removed.
16918 2004-09-14  Raja R Harinath  <rharinath@novell.com>
16920         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
16922 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
16924         * class.cs (MethodCore.CheckBase): Fix bug #65757.
16926 2004-09-10  Martin Baulig  <martin@ximian.com>
16928         Backported my MemberName changes from GMCS into MCS.
16930         - we are now using a special `MemberName' class instead of using
16931         strings; in GMCS, the `MemberName' also contains the type
16932         arguments.
16934         - changed the grammar rules a bit:
16935           * the old `member_name' is now a `namespace_or_type_name':
16936             The rule is that we use `namespace_or_type_name' everywhere
16937             where we expect either a "member name" (GetEnumerator) or a
16938             "member name" with an explicit interface name
16939             (IEnumerable.GetEnumerator).
16940             In GMCS, the explicit interface name may include type arguments
16941             (IEnumerable<T>.GetEnumerator).
16942           * we use `member_name' instead of just `IDENTIFIER' for
16943             "member names":
16944             The rule is that we use `member_name' wherever a member may
16945             have type parameters in GMCS.       
16947         * decl.cs (MemberName): New public class.
16948         (MemberCore.MemberName): New public readonly field.
16949         (MemberCore.ctor): Take a `MemberName' argument, not a string.
16950         (DeclSpace): Likewise.
16952         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
16953         * enum.cs (Enum.ctor): Likewise.
16955         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
16956         MemberName.     
16957         (AliasEntry.ctor): Take a MemberName, not an Expression.
16958         (AliasEntry.UsingAlias): Likewise.
16960         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
16961         (IMethodData.MemberName): Changed type from string to MemberName.
16962         (MemberBase.ExplicitInterfaceName): Likewise.
16963         (AbstractPropertyEventMethod.SetupName): Make this private.
16964         (AbstractPropertyEventMethod.ctor): Added `string prefix'
16965         argument; compute the member name here.
16966         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
16967         on the `member.MemberName' and the `prefix'.
16969         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
16970         not `type_name'.
16971         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
16972         thus, we get a `MemberName' instead of a `string'.  These
16973         declarations may have type parameters in GMCS.
16974         (interface_method_declaration, delegate_declaration): Likewise.
16975         (class_declaration, interface_declaration): Likewise.
16976         (method_header): Use `namespace_or_type_name' instead of
16977         `member_name'.  We may be an explicit interface implementation.
16978         (property_declaration, event_declaration): Likewise.
16979         (member_name): This is now just an `IDENTIFIER', not a
16980         `namespace_or_type_name'.
16981         (type_name, interface_type): Removed.
16982         (namespace_or_type_name): Return a MemberName, not an Expression.
16983         (primary_expression): Use `member_name' instead of `IDENTIFIER';
16984         call GetTypeExpression() on the MemberName to get an expression.
16985         (IndexerDeclaration.interface_type): Changed type from string to
16986         MemberName.
16987         (MakeName): Operate on MemberName's instead of string's.
16989 2004-09-13  Raja R Harinath  <rharinath@novell.com>
16991         Fix bug #55770.
16992         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
16993         (NamespaceEntry.Lookup): Add new argument to flag if we want the
16994         lookup to avoid symbols introduced by 'using'.
16995         * rootcontext.cs (NamespaceLookup): Update.
16997 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
16999         * class.cs (TypeContainer.DoDefineMembers): Do not call
17000         DefineDefaultConstructor for static classes.
17002 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
17004         * attribute.cs (Attribute.Resolve): Add error 653 report.
17006         * class.cs (Class.ApplyAttributeBuilder): Add error 641
17007         report.
17008         (Method.ApplyAttributeBuilder): Add error 685 report.
17009         (Operator.Define): Add error 564 report.
17011         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
17013         * expression.cs (Invocation.DoResolve): Add error
17014         245 and 250 report.
17016         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
17017         error 674 report.
17019 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17021         * class.cs (ConstructorInitializer.Resolve):
17022         Wrong error number (515->516).
17024 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17026         * class.cs (Indexer.Define): Add error 631 report.
17028 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17030         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
17032 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17034         * expression.cs (Probe.DoResolve): Add error CS0241 report.
17036 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
17038         * cs-parser.jay: Added error CS0241 report.
17040 2004-09-10  Raja R Harinath  <rharinath@novell.com>
17042         * cs-parser.jay (fixed_statement): Introduce a scope for the
17043         declaration in the 'fixed' statement.
17045 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17047         * cs-parser.jay: Added CS0230 error report.
17049 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17051         * cs-parser.jay: Added errors CS0231 and CS0257 report.
17053 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17055         * expression.cs (Argument.Resolve): Added error CS0192 and
17056         CS0199 report.
17058 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17060         C# 2.0 #pragma warning feature
17062         * cs-tokenizer.cs (PreProcessPragma): New method; 
17063         Handles #pragma directive.
17065         * report.cs (WarningRegions): New class; Support
17066         class for #pragma warning directive. It tests whether
17067         warning is enabled for a given line.
17069 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
17071         * const.cs: Add more descriptive error report, tahnks to
17072         Sebastien. 
17074 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
17076         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
17078 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
17080         * expression.cs: Apply patch from Ben: Remove dead code from
17081         ArrayCreation, and remove the TurnintoConstant call in const.cs,
17082         as that code just threw an exception anwyays.
17084         * const.cs: Remove the call to the turnintoconstant, for details
17085         see bug: #63144
17086         
17087         * literal.cs: The type of the null-literal is the null type;  So
17088         we use a placeholder type (literal.cs:System.Null, defined here)
17089         for it.
17091         * expression.cs (Conditional.DoResolve): Remove some old code that
17092         is no longer needed, conversions have been fixed.
17094         (ArrayCreationExpression.DoResolve): Return false if we fail to
17095         resolve the inner expression.
17097 2004-09-07  Raja R Harinath  <rharinath@novell.com>
17099         Fix test-290.cs.
17100         * cs-parser.jay (delegate_declaration): Record a delegate
17101         declaration as a type declaration.
17102         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
17104 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
17106         * parameter.cs: Do not crash if the type can not be resolved. 
17108         * expression.cs: Report errors with unsafe pointers, fixes #64896
17110 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
17112         * expression.cs: Pointer arith always needs to do a conv.i
17113         if the operand is a long. fix 65320
17115 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
17117         Fixed cs0619-37.cs, cs0619-38.cs
17119         * enum.cs (GetObsoleteAttribute): Removed.
17121         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
17122         on Enum member is double staged. The first is tested member
17123         and then enum.
17125 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
17127         Fixed #56986, #63631, #65231
17129         * class.cs: (TypeContainer.AddToMemberContainer): New method,
17130         adds member to name container.
17131         (TypeContainer.AddToTypeContainer): New method, adds type to
17132         name container.
17133         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
17134         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
17135         AddOperator): Simplified by reusing AddToMemberContainer.
17136         (TypeContainer.UserDefinedStaticConstructor): Changed to property
17137         instead of field.
17138         (Method.CheckForDuplications): Fixed implementation to test all
17139         possibilities.
17140         (MemberBase): Detection whether member is explicit interface
17141         implementation is now in constructor.
17142         (MemberBase.UpdateMemberName): Handles IndexerName.
17143         (Accessor): Changed to keep also location information.
17144         (AbstractPropertyEventMethod): Is derived from MemberCore.
17145         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
17146         will be emited or not.
17147         (PropertyBase.AreAccessorsDuplicateImplementation):
17148         Tests whether accessors are not in collision with some method.
17149         (Operator): Is derived from MethodCore to simplify common
17150         operations.
17152         * decl.cs (Flags.TestMethodDuplication): Test for duplication
17153         must be performed.
17154         (DeclSpace.AddToContainer): Adds the member to defined_names
17155         table. It tests for duplications and enclosing name conflicts.
17157         * enum.cs (EnumMember): Clean up to reuse the base structures
17159 2004-09-03  Martin Baulig  <martin@ximian.com>
17161         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
17162         into TypeContainer, to make partial classes work again.
17164 2004-09-03  Martin Baulig  <martin@ximian.com>
17166         * rootcontext.cs (RootContext.V2): Removed.
17168 2004-03-23  Martin Baulig  <martin@ximian.com>
17170         * expression.cs (Invocation.OverloadResolve): Added `bool
17171         may_fail' argument and use it instead of the Location.IsNull() hack.
17173 2004-09-03  Martin Baulig  <martin@ximian.com>
17175         Merged latest changes into gmcs.  Please keep this comment in
17176         here, it makes it easier for me to see what changed in MCS since
17177         the last time I merged.
17179 2004-09-03  Raja R Harinath  <rharinath@novell.com>
17181         Fix #61128.
17182         * expression.cs (BetterConversion): Don't allow either conversion 
17183         to be null.  Remove redundant implicit conversion test when 'q ==
17184         null' -- when this function is invoked, we already know that the
17185         implicit conversion exists.
17186         (BetterFunction): Assume that 'best' is non-null.  Remove
17187         redundant reimplementation of IsApplicable when 'best' is null.
17188         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
17189         number of arguments.
17190         (IsAncestralType): Extract from OverloadResolve.
17191         (OverloadResolve): Make robust to the MethodGroupExpr being
17192         unsorted.  Implement all the logic of Section 14.5.5.1, and
17193         support overloading of methods from multiple applicable types.
17194         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
17196         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
17197         (RealError, Warning): Append type of report to related symbol.
17199 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
17201         * enum.cs: Fixed CLS-Compliance checks for enum members.
17202         Error tests cs3008-8.cs, cs3014-8.cs
17204 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
17206         Fixed bug #62342, #63102
17207         * class.cs: ImplementIndexer uses member.IsExplicitImpl
17208         like ImplementMethod.
17210 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
17212         * attribute.cs (Attribute.GetAttributeArgumentExpression):
17213         Fixed bug #65170.
17215 2004-09-02  Martin Baulig  <martin@ximian.com>
17217         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
17218         TypeManager.GetArgumentTypes() rather than calling GetParameters()
17219         on the MethodBase.
17221 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
17223         C# 2.0 Static classes implemented
17225         * class.cs (TypeContainer): instance_constructors,
17226         initialized_fields, initialized_static_fields,
17227         default_constructor, base_inteface_types are protected to be
17228         accessible from StaticClass.
17229         (TypeContainer.DefineDefaultConstructor): New virtual method
17230         for custom default constructor generating
17231         (StaticClass): New class to handle "Static classes" feature.
17233         * cs-parser.jay: Handle static keyword on class like instance
17234         of StaticClass.
17236         * driver.cs: Added "/langversion" command line switch with two
17237         options (iso-1, default).
17239 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
17241         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
17243 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
17245         * delegate.cs: Style.
17247 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
17249         * delegate.cs: Add seperate instance expr field for miguel.
17251 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
17253         * PointerArithmetic (Resolve): make sure we are not doing
17254         pointer arith on void*. Also, make sure we are resolved
17255         by not setting eclass until resolve.
17257         All callers: Make sure that PointerArithmetic gets resolved.
17259 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
17261         * ArrayCreation (LookupType): If the type does not resolve 
17262         to an array, give an error.
17264 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
17266         * statement.cs (Try.Resolve): Fixed bug #64222
17268 2004-08-27  Martin Baulig  <martin@ximian.com>
17270         * class.cs
17271         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
17272         crash here.     
17274 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
17276         * ecore.cs (Constantify): Get underlying type via
17277         System.Enum.GetUnderlyingType to avoid StackOverflow on the
17278         Windows in special cases.
17280 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
17282         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
17283         for obtaining also private methods.
17284         (GetRemoveMethod): Used GetRemoveMethod (true)
17285         for obtaining also private methods.
17287 2004-08-24  Martin Baulig  <martin@ximian.com>
17289         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
17290         MethodAttributes.HideBySig for operators.
17292 2004-08-23  Martin Baulig  <martin@ximian.com>
17294         Back to the old error reporting system :-)
17296         * report.cs (Message): Removed.
17297         (Report.MessageData, ErrorData, WarningData): Removed.
17298         (Report.Error, Warning): Back to the old system.
17300 2004-08-23  Martin Baulig  <martin@ximian.com>
17302         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
17304         * class.cs (TypeContainer.ParentContainer): New public virtual
17305         method; replaces the explicit interface implementation.
17306         (ClassPart.ParentContainer): Override.
17308 2004-08-23  Martin Baulig  <martin@ximian.com>
17310         * statement.cs (Switch): Added support for constant switches; see
17311         #59428 or test-285.cs.
17313 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
17315         Fixed bug #62740.
17316         * statement.cs (GetEnumeratorFilter): Removed useless
17317         logic because C# specs is strict. GetEnumerator must be
17318         public.
17320 2004-08-22  Martin Baulig  <martin@ximian.com>
17322         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
17323         a switch and may break, reset the barrier.  Fixes #59867.
17325 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
17327         CLS-Compliance speed up (~5% for corlib)
17329         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
17330         New method. Tests container for CLS-Compliant names
17332         * class.cs (TypeContainer.VerifyClsName): New method.
17333         Checks whether container name is CLS Compliant.
17334         (Constructor): Implements IMethodData.
17336         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
17337         low-case table for CLS Compliance test.
17338         (MemberCache.VerifyClsParameterConflict): New method.
17339         Checks method parameters for CS3006 error.
17341         * enum.cs (EnumMember): Is derived from MemberCore.
17342         (Enum.VerifyClsName): Optimized for better performance.
17344 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
17346         * report.cs: Renamed Error_T to Error and changed all
17347         references.
17349 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
17351         * class.cs (TypeContainer.IndexerArrayList): New inner class
17352         container for indexers.
17353         (TypeContainer.DefaultIndexerName): New constant for default
17354         indexer name. Replaced all "Item" with this constant.
17355         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
17357         * typemanager.cs (TypeManager.default_member_ctor): Cache here
17358         DefaultMemberAttribute constructor.
17360 2004-08-05  Martin Baulig  <martin@ximian.com>
17362         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
17363         Fix bug #59429.
17365 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
17367         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
17368         multi platforms problem.
17370         * compiler.csproj: Included shared files.
17372 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17374         Fix bug 60333, 55971 in the more general way
17375         * attribute.cs (Attribute.GetAttributeArgumentExpression):
17376         Added arg_type argument for constant conversion.
17377         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
17379 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17381         Fix bug #59760
17382         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
17383         OperatorArrayList, MethodCoreArrayList for typecontainer
17384         containers. Changed class member types to these new types.
17385         (MethodArrayList.DefineMembers): Added test for CS0659.
17387 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
17389         * cfold.cs: Synchronize the folding with the code in expression.cs
17390         Binary.DoNumericPromotions for uint operands.
17392         * attribute.cs: Revert patch from Raja, it introduced a regression
17393         while building Blam-1.2.1 (hard to isolate a test case).
17395 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17397         Fix for #55382
17398         * class.cs:
17399         (TypeContainer.Define): Renamed to DefineContainerMembers because of
17400         name collision.
17401         (MethodCore.parent_method): New member. The method we're overriding
17402         if this is an override method.
17403         (MethodCore.CheckBase): Moved from Method class and made common.
17404         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
17405         private.
17406         (MethodCore.CheckForDuplications): New abstract method. For custom
17407         member duplication search in a container
17408         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
17409         method and its return type.
17410         (Event.conflict_symbol): New member. Symbol with same name in the
17411         parent class.
17413         * decl.cs:
17414         (MemberCache.FindMemberWithSameName): New method. The method
17415         is looking for conflict with inherited symbols.
17417 2004-08-04  Martin Baulig  <martin@ximian.com>
17419         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
17421         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
17423 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17425         * report.cs (Message): New enum for better error, warning reference in
17426         the code.
17427         (MessageData): New inner abstract class. It generally handles printing of
17428         error and warning messages.
17429         Removed unused Error, Warning, Message methods.
17431 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17433         Fix for cs0592-8.cs test
17434         * attribute.cs
17435         (Attributable.ValidAttributeTargets): Made public.
17436         (Attribute.ExplicitTarget): New member for explicit target value.
17437         (Attribute.CheckTargets): Now we translate explicit attribute
17438         target to Target here.
17440 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
17442         * ecore.cs (MethodGroupExpr): new IsBase property.
17444         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
17446         * delegate.cs (DelegateCreation): store a MethodGroupExpr
17447         rather than an instance expr.
17449         (DelegateCreation.Emit): Use the method group rather than
17450         the instance expression. Also, if you have base.Foo as the
17451         method for a delegate, make sure to emit ldftn, not ldftnvirt.
17453         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
17455         (NewDelegate.DoResolve): Only check for the existance of Invoke
17456         if the method is going to be needed. Use MethodGroupExpr.
17458         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
17460         * expression.cs: For pointer arith., make sure to use
17461         the size of the type, not the size of the pointer to
17462         the type.
17464 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17466         Fix for #60722
17467         * class.cs (Class): Added error CS0502 test.
17469 2004-08-03  John Luke  <jluke@cfl.rr.com>
17470             Raja R Harinath  <rharinath@novell.com>
17472         Fix for #60997.
17473         * attribute.cs (Attribute.complained_before): New flag.
17474         (Attribute.ResolveType, Attribute.Resolve),
17475         (Attribute.DefinePInvokeMethod): Set it.
17476         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
17477         
17478 2004-08-03  Martin Baulig  <martin@ximian.com>
17480         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
17481         use a user-defined operator; we still need to do numeric
17482         promotions in case one argument is a builtin type and the other
17483         one has an implicit conversion to that type.  Fixes #62322.
17485 2004-08-02  Martin Baulig  <martin@ximian.com>
17487         * statement.cs (LocalInfo.Flags): Added `IsThis'.
17488         (LocalInfo.IsThis): New public property.
17489         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
17491 2004-08-01  Martin Baulig  <martin@ximian.com>
17493         * class.cs (TypeContainer.GetClassBases): Don't set the default
17494         here since we may get called from GetPartialBases().
17495         (TypeContainer.DefineType): If GetClassBases() didn't return a
17496         parent, use the default one.
17498 2004-07-30  Duncan Mak  <duncan@ximian.com>
17500         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
17502 2004-07-30  Martin Baulig  <martin@ximian.com>
17504         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
17506         * class.cs (SourceMethod): New public class, derive from the
17507         symbol writer's ISourceMethod.
17508         (Method): Use the new symbol writer API.
17510         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
17511         as argument and use the new symbol writer.
17513         * location.cs
17514         (SourceFile): Implement the symbol writer's ISourceFile.
17515         (Location.SymbolDocument): Removed.
17516         (Location.SourceFile): New public property.
17518         * symbolwriter.cs: Use the new symbol writer API.
17520 2004-07-30  Raja R Harinath  <rharinath@novell.com>
17522         * Makefile (install-local): Remove.  Functionality moved to
17523         executable.make.
17525 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
17527         * Makefile: Install mcs.exe.config file together with mcs.exe.
17528         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
17529         correct runtime version.
17530         
17531 2004-07-25  Martin Baulig  <martin@ximian.com>
17533         * class.cs
17534         (TypeContainer.RegisterOrder): Removed, this was unused.
17535         (TypeContainer, interface_order): Removed.
17536         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
17537         TypeContainer as argument since we can also be called with a
17538         `PartialContainer' for a partial class/struct/interface.
17539         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
17540         of checking whether we're an `Interface' - we could be a
17541         `PartialContainer'.
17542         (PartialContainer.Register): Override; call
17543         AddClass()/AddStruct()/AddInterface() on our parent.
17545         * cs-parser.jay (interface_member_declaration): Add things to the
17546         `current_container', not the `current_class'.
17548         * rootcontext.cs (RegisterOrder): The overloaded version which
17549         takes an `Interface' was unused, removed.
17551         * typemanager.cs (TypeManager.LookupInterface): Return a
17552         `TypeContainer', not an `Interface'.
17553         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
17554         contain a `PartialContainer' for an interface, so check it's
17555         `Kind' to figure out what it is.
17557 2004-07-25  Martin Baulig  <martin@ximian.com>
17559         * class.cs (Class.DefaultTypeAttributes): New public constant.
17560         (Struct.DefaultTypeAttributes): Likewise.
17561         (Interface.DefaultTypeAttributes): Likewise.
17562         (PartialContainer.TypeAttr): Override this and add the
17563         DefaultTypeAttributes.
17565 2004-07-25  Martin Baulig  <martin@ximian.com>
17567         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
17568         we can just use the `Parent' field instead.
17570 2004-07-25  Martin Baulig  <martin@ximian.com>
17572         * class.cs (TypeContainer.Emit): Renamed to EmitType().
17574 2004-07-25  Martin Baulig  <martin@ximian.com>
17576         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
17577         our parts before defining any methods.
17578         (TypeContainer.VerifyImplements): Make this virtual.
17579         (ClassPart.VerifyImplements): Override and call VerifyImplements()
17580         on our PartialContainer.
17582 2004-07-25  Martin Baulig  <martin@ximian.com>
17584         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
17586         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
17587         argument, we can just use the `Parent' field instead.
17589         * class.cs
17590         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
17591         (MemberBase.DoDefine): Likewise.
17593 2004-07-24  Martin Baulig  <martin@ximian.com>
17595         * decl.cs (MemberCore.Parent): New public field.
17596         (DeclSpace.Parent): Moved to MemberCore.
17598         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
17599         (MemberBase.ctor): Added TypeContainer argument, pass it to our
17600         parent's .ctor.
17601         (FieldBase, Field, Operator): Likewise.
17602         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
17603         (EventField, Event): Likewise.
17605 2004-07-23  Martin Baulig  <martin@ximian.com>
17607         * class.cs (PartialContainer): New public class.
17608         (ClassPart): New public class.
17609         (TypeContainer): Added support for partial classes.
17610         (TypeContainer.GetClassBases): Splitted some of the functionality
17611         out into GetNormalBases() and GetPartialBases().
17613         * cs-tokenizer.cs (Token.PARTIAL): New token.
17614         (Tokenizer.consume_identifier): Added some hacks to recognize
17615         `partial', but only if it's immediately followed by `class',
17616         `struct' or `interface'.
17618         * cs-parser.jay: Added support for partial clases.
17620 2004-07-23  Martin Baulig  <martin@ximian.com>
17622         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
17623         a `DeclSpace' and also made it readonly.
17624         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
17625         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
17626         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
17628         * cs-parser.jay: Pass the `current_class', not the
17629         `current_container' (at the moment, this is still the same thing)
17630         to a new Method, Property, Event, Indexer or Constructor.
17632 2004-07-23  Martin Baulig  <martin@ximian.com>
17634         * cs-parser.jay (CSharpParser): Added a new `current_class' field
17635         and removed the `current_interface' one.
17636         (struct_declaration, class_declaration, interface_declaration):
17637         Set `current_class' to the newly created class/struct/interface;
17638         set their `Bases' and call Register() before parsing their body.
17640 2004-07-23  Martin Baulig  <martin@ximian.com>
17642         * class.cs (Kind): New public enum.
17643         (TypeContainer): Made this class abstract.
17644         (TypeContainer.Kind): New public readonly field.
17645         (TypeContainer.CheckDef): New public method; moved here from
17646         cs-parser.jay.
17647         (TypeContainer.Register): New public abstract method.
17648         (TypeContainer.GetPendingImplementations): New public abstract
17649         method.
17650         (TypeContainer.GetClassBases): Removed the `is_class' and
17651         `is_iface' parameters.
17652         (TypeContainer.DefineNestedTypes): Formerly known as
17653         DoDefineType().
17654         (ClassOrStruct): Made this class abstract.
17656         * tree.cs (RootTypes): New public type. 
17658 2004-07-20  Martin Baulig  <martin@ximian.com>
17660         * tree.cs (Tree.RecordNamespace): Removed.
17661         (Tree.Namespaces): Removed.
17663         * rootcontext.cs (RootContext.IsNamespace): Removed.
17665         * cs-parser.jay (namespace_declaration): Just create a new
17666         NamespaceEntry here.
17668 2004-07-20  Martin Baulig  <martin@ximian.com>
17670         * statement.cs (ExceptionStatement): New abstract class.  This is
17671         now used as a base class for everyone who's using `finally'.
17672         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
17673         our local variables before using them.
17675         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
17676         virtual method.  This is used by Yield.Resolve() to "steal" an
17677         outer block's `finally' clauses.
17678         (FlowBranchingException): The .ctor now takes an ExceptionStatement
17679         argument.
17681         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
17682         version which takes an ExceptionStatement.  This version must be
17683         used to create exception branchings.
17685         * iterator.cs
17686         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
17687         (Iterator.EmitMoveNext): Added exception support; protect the
17688         block with a `fault' clause, properly handle 'finally' clauses.
17689         (Iterator.EmitDispose): Run all the `finally' clauses here.
17691 2004-07-20  Martin Baulig  <martin@ximian.com>
17693         * iterator.cs: This is the first of a set of changes in the
17694         iterator code.  Match the spec more closely: if we're an
17695         IEnumerable, then GetEnumerator() must be called.  The first time
17696         GetEnumerator() is called, it returns the current instance; all
17697         subsequent invocations (if any) must create a copy.
17699 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
17701         * expression.cs: Resolve the constant expression before returning
17702         it. 
17704 2004-07-19  Martin Baulig  <martin@ximian.com>
17706         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
17707         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
17708         the return type of the new EmitContext.
17710 2004-07-18  Martin Baulig  <martin@ximian.com>
17712         * class.cs (Property.Define): Fix iterators.
17714         * iterators.cs (Iterator.Define): Moved the
17715         `container.AddInterator (this)' call here from the .ctor; only do
17716         it if we resolved successfully.
17718 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
17720         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
17721         `true' for preprocessing directives that we parse.  The return
17722         value indicates whether we should return to regular tokenizing or
17723         not, not whether it was parsed successfully.
17725         In the past if we were in: #if false ... #line #endif, we would
17726         resume parsing after `#line'.  See bug 61604.
17728         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
17729         building: IsEnumType should return true only for enums, not for
17730         enums or System.Enum itself.  This fixes #61593.
17732         Likely what happened is that corlib was wrong: mcs depended on
17733         this bug in some places.  The bug got fixed, we had to add the
17734         hack, which caused bug 61593.
17736         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
17737         that was a workaround for the older conditions.
17739 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
17741         * assign.cs: IAssignMethod has a new interface, as documented
17742         inline. All assignment code now uses this new api.
17744         * ecore.cs, expression.cs: All classes which implement
17745         IAssignMethod now use the new interface.
17747         * expression.cs (Invocation): add a hack to EmitCall so that
17748         IndexerAccess can be the target of a compound assignment without
17749         evaluating its arguments twice.
17751         * statement.cs: Handle changes in Invocation api.
17753 2004-07-16  Martin Baulig  <martin@ximian.com>
17755         * iterators.cs: Rewrote this.  We're now using one single Proxy
17756         class for both the IEnumerable and the IEnumerator interface and
17757         `Iterator' derives from Class so we can use the high-level API.
17759         * class.cs (TypeContainer.AddIterator): New method.
17760         (TypeContainer.DoDefineType): New protected virtual method, which
17761         is called from DefineType().
17762         (TypeContainer.DoDefineMembers): Call DefineType() and
17763         DefineMembers() on all our iterators.
17764         (TypeContainer.Emit): Call Emit() on all our iterators.
17765         (TypeContainer.CloseType): Call CloseType() on all our iterators.
17767         * codegen.cs (EmitContext.CurrentIterator): New public field.
17769 2004-07-15  Martin Baulig  <martin@ximian.com>
17771         * typemanager.cs
17772         (TypeManager.not_supported_exception_type): New type.   
17774 2004-07-14  Martin Baulig  <martin@ximian.com>
17776         * iterators.cs: Use real error numbers.
17778 2004-07-14  Martin Baulig  <martin@ximian.com>
17780         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
17781         requires this to be a System.Collection.IEnumerable and not a
17782         class implementing that interface.
17783         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
17785 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
17787         * class.cs: Fixed previous fix, it broke some error tests.
17789 2004-07-12  Martin Baulig  <martin@ximian.com>
17791         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
17792         Fixes #61293.
17794 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
17796         * assign.cs (LocalTemporary): Add new argument: is_address,If
17797         `is_address' is true, then the value that we store is the address
17798         to the real value, and not the value itself.
17799         
17800         * ecore.cs (PropertyExpr): use the new local temporary
17801         stuff to allow us to handle X.Y += z (where X is a struct)
17803 2004-07-08  Martin Baulig  <martin@ximian.com>
17805         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
17806         not always return, just like we're doing in Using.Resolve().
17808 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
17810         * cs-parser.jay (fixed_statement): flag this as Pinned.
17812 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
17814         * typemanager.cs (TypeManager): Removed MakePinned method, this
17815         mechanism is replaced with the .NET 2.x compatible mechanism of
17816         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
17818         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
17819         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
17820         `IsFixed' property which has a different meaning.
17822 2004-07-02  Raja R Harinath  <rharinath@novell.com>
17824         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
17825         visible from inside a nested class, not just the names of the
17826         immediately enclosing class.
17827         Fix for bug #60730.
17829 2004-06-24  Raja R Harinath  <rharinath@novell.com>
17831         * expression.cs (BetterConversion): Remove buggy special-case
17832         handling of "implicit constant expression conversions".  At this
17833         point, we already know that the conversion is possible -- we're
17834         only checking to see which is better.
17836 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17838         * cs-parser.jay: Added error CS0210 test.
17840 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17842         * cs-parser.jay: Added error CS0134 test.
17844 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17846         Fix bug #52507
17847         * cs-parser.jay: Added error CS0145 test.
17849 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17851         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
17853 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
17854         
17855         * expression.cs (StackAlloc.Resolve): The argument may not
17856         be a constant; deal with this case.
17857         
17858 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
17860         * attribute.cs (IndexerName_GetIndexerName): Renamed to
17861         GetIndexerAttributeValue.
17862         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
17864         * class.cs (Indexer.Define): Added error tests for CS0415,
17865         CS0609.
17867 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
17869         * attribute.cs (Attribute.Resolve): Keep field code in sync with
17870         property code.
17872 2004-06-23  Martin Baulig  <martin@ximian.com>
17874         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
17875         neither return nor throw, reset the barrier as well.  Fixes #60457.
17877 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
17879         * class.cs : EventAttributes is now set to None by default.
17880           This fixes bug #60459.
17882 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
17884         Fix bug #60219
17885         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
17886         Don't throw exception but return null (it's sufficient now).
17888 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
17890         * typemanager.cs (GetArgumentTypes): Faster implementation.
17892 2004-06-18  Martin Baulig  <martin@ximian.com>
17894         * attribute.cs (Attribute.Resolve): Check whether we're an
17895         EmptyCast which a Constant child.  Fixes #60333.
17897 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
17899         * statement.cs (EmitCollectionForeach): Account for the fact that
17900         not all valuetypes are in areas which we can take the address of.
17901         For these variables, we store to a temporary variable. Also, make
17902         sure that we dont emit a `callvirt' on a valuetype method.
17904 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17906         * expression.cs (StackAlloc.DoReSolve): Added test for
17907         negative parameter (CS0247).
17909 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17911         Fix bug #59792
17912         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
17914 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17916         Fix bug #59781
17917         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
17918         ulong.
17920 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
17922         Fix bug #58254 & cs1555.cs, cs1556.cs
17923         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
17925 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
17927         * cs-parser.jay: Added error CS1669 test for indexers.
17929 2004-06-11  Martin Baulig  <martin@ximian.com>
17931         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
17932         call this twice: for params and varargs methods.
17934 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17936         * class.cs:
17937         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
17939 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17941         * attribute.cs (Attribute.GetValidTargets): Made public.
17943         * class.cs: 
17944         (AbstractPropertyEventMethod): New class for better code sharing.
17945         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
17946         CS1667 report.
17947         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
17949 2004-06-11  Raja R Harinath  <rharinath@novell.com>
17951         Fix bug #59477.
17952         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
17953         that the call to Resolve is part of a MemberAccess.
17954         (Expression.Resolve): Use it for SimpleName resolution.
17955         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
17956         Add 'intermediate' boolean argument.
17957         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
17958         error message when the SimpleName can be resolved ambiguously
17959         between an expression and a type.
17960         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
17961         public.
17962         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
17963         call on the left-side.
17965 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17967         * class.cs:
17968         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
17970 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17972         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
17974 2004-06-11  Martin Baulig  <martin@ximian.com>
17976         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
17977         varargs methods if applicable.
17979 2004-06-11  Martin Baulig  <martin@ximian.com>
17981         * expression.cs (Invocation.EmitCall): Don't use
17982         `method.CallingConvention == CallingConventions.VarArgs' since the
17983         method could also have `CallingConventions.HasThis'.
17985 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17987         * class.cs (Event.GetSignatureForError): Implemented.
17988         Fixed crash in error test cs3010.cs
17990 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
17992         * cs-tokenizer.cs: Change the way we track __arglist to be
17993         consistent with the other keywords.
17995 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
17997         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
17998         tomorrow.
18000 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
18002         * codegen.cs: Check that all referenced assemblies have a strongname
18003         before strongnaming the compiled assembly. If not report error CS1577.
18004         Fix bug #56563. Patch by Jackson Harper.
18005         * typemanager.cs: Added a method to return all referenced assemblies.
18006         Fix bug #56563. Patch by Jackson Harper.
18008 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
18010         * class.cs:
18011         (Method.ApplyAttributeBuilder): Moved and added conditional
18012         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
18014         * delegate.cs:
18015         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
18017 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
18019         Fixed #59640
18020         * class.cs: (EventField.attribute_targets): Changed default target.
18022 2004-06-08  Martin Baulig  <martin@ximian.com>
18024         * expression.cs (Invocation.EmitCall): Enable varargs methods.
18026 2004-06-08  Martin Baulig  <martin@ximian.com>
18028         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
18030 2004-06-07  Martin Baulig  <martin@ximian.com>
18032         Added support for varargs methods.
18034         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
18035         keyword.
18037         * cs-parser.jay: Added support for `__arglist'.
18039         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
18041         * expression.cs (Argument.AType): Added `ArgList'.
18042         (Invocation): Added support for varargs methods.
18043         (ArglistAccess): New public class.
18044         (Arglist): New public class.
18046         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
18048         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
18049         a method's top-level block if the method has varargs.
18051         * support.cs (ReflectionParameters, InternalParameters): Added
18052         support for varargs methods.    
18054 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
18056         * class.cs: Provide location in indexer error report.
18058         * driver.cs: Use standard names.
18060         * namespace.cs: Catch the use of using after a namespace has been
18061         declared also on using aliases.
18063 2004-06-03  Raja R Harinath  <rharinath@novell.com>
18065         Bug #50820.
18066         * typemanager.cs (closure_private_ok, closure_invocation_type)
18067         (closure_qualifier_type, closure_invocation_assembly)
18068         (FilterWithClosure): Move to ...
18069         (Closure): New internal nested class.
18070         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
18071         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
18072         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
18073         (MemberLookup, MemberLookupFailed): Use it.
18074         * expression.cs (New.DoResolve): Treat the lookup for the
18075         constructor as being qualified by the 'new'ed type.
18076         (Indexers.GetIndexersForTypeOrInterface): Update.
18078 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
18080         * attribute.cs
18081         (GetConditionalAttributeValue): New method. Returns
18082         condition of ConditionalAttribute.
18083         (SearchMulti): New method.  Returns all attributes of type 't'.
18084         Use it when attribute is AllowMultiple = true.
18085         (IsConditionalMethodExcluded): New method.
18087         * class.cs
18088         (Method.IsExcluded): Implemented. Returns true if method has conditional
18089         attribute and the conditions is not defined (method is excluded).
18090         (IMethodData): Extended interface for ConditionalAttribute support.
18091         (PropertyMethod.IsExcluded): Implemented.
18093         * decl.cs
18094         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
18096         * expression.cs
18097         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
18098         on the method.
18100 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
18102         * expression.cs (ArrayCreationExpression): Make this just an
18103         `expression'. It can't be a statement, so the code here was
18104         dead.
18106 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
18108         Fixed #59072
18109         * typemanager.cs (GetFullNameSignature): New method for
18110         MethodBase types.
18112 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
18114         Fixed #56452
18115         * class.cs (MemberBase.GetSignatureForError): New virtual method.
18116         Use this method when MethodBuilder is null.
18117         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
18118         Added test for error CS0626 (MONO reports error for this situation).
18119         (IMethodData.GetSignatureForError): Extended interface.
18121 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
18123         * attribute.cs
18124         (AttributeTester.GetObsoleteAttribute): Returns instance of
18125         ObsoleteAttribute when type is obsolete.
18127         * class.cs
18128         (TypeContainer.VerifyObsoleteAttribute): Override.
18129         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
18130         (MethodCode.VerifyObsoleteAttribute): Override.
18131         (MemberBase.VerifyObsoleteAttribute): Override.
18133         * decl.cs
18134         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
18135         and report proper error.
18137         *delegate.cs
18138         Delegate.VerifyObsoleteAttribute): Override.
18140         * ecore.cs
18141         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
18142         and report proper error.
18143         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
18145         * enum.cs
18146         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
18147         and enum member.
18149         * expression.cs
18150         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
18151         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
18152         Added test for ObsoleteAttribute.
18154         * statement.cs
18155         (Catch): Derived from Statement.
18157 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
18159         Fixed bug #59071 & cs0160.cs
18161         * statement.cs (Try.Resolve): Check here whether order of catch
18162         clauses matches their dependencies.
18164 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
18166         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
18167         caused a regression: #59343.  Referencing nested classes from an
18168         assembly stopped working.
18170 2004-05-31  Martin Baulig  <martin@ximian.com>
18172         MCS is now frozen for beta 2.
18174 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18176         * convert.cs: add a trivial cache for overload operator resolution.
18178 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18180         * decl.cs: If possible, use lookuptypedirect here. We can only do
18181         this if there is no `.' after the namespace. Avoids using
18182         LookupType, which does lots of slow processing.
18183         (FindNestedType) New method, does what it says :-).
18184         * namespace.cs: use LookupTypeDirect.
18185         * rootcontext.cs: use membercache, if possible.
18186         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
18188 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18190         * expression.cs:
18191         According to the spec, 
18193         In a member access of the form E.I, if E is a single identifier,
18194         and if the meaning of E as a simple-name (§7.5.2) is a constant,
18195         field, property, localvariable, or parameter with the same type as
18196         the meaning of E as a type-name (§3.8), then both possible
18197         meanings of E are permitted.
18199         We did not check that E as a simple-name had the same type as E as
18200         a type name.
18202         This trivial check gives us 5-7% on bootstrap time.
18204 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18206         * expression.cs (Invocation.OverloadResolve): Avoid the
18207         use of hashtables and boxing here by allocating on demand.
18209 2004-05-30  Martin Baulig  <martin@ximian.com>
18211         * rootcontext.cs (RootContext.LookupType): Don't cache things if
18212         we're doing a silent lookup.  Don't try to lookup nested types in
18213         TypeManager.object_type (thanks to Ben Maurer).
18215 2004-05-30  Martin Baulig  <martin@ximian.com>
18217         Committing a patch from Ben Maurer.
18219         * rootcontext.cs (RootContext.LookupType): Cache negative results.
18221 2004-05-29  Martin Baulig  <martin@ximian.com>
18223         * class.cs (IMethodData.ShouldIgnore): New method.
18225         * typemanager.cs (TypeManager.MethodFlags): Don't take a
18226         `Location' argument, we don't need it anywhere.  Use
18227         `IMethodData.ShouldIgnore ()' instead of
18228         `MethodData.GetMethodFlags ()'.
18229         (TypeManager.AddMethod): Removed.
18230         (TypeManager.AddMethod2): Renamed to AddMethod.
18232 2004-05-29  Martin Baulig  <martin@ximian.com>
18234         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
18236         * convert.cs (Convert.ImplicitReferenceConversion): If we're
18237         converting from a class type S to an interface type and we already
18238         have an object on the stack, don't box it again.  Fixes #52578.
18240 2004-05-29  Martin Baulig  <martin@ximian.com>
18242         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
18243         Added support for `params' parameters.  Fixes #59267.
18245 2004-05-29  Martin Baulig  <martin@ximian.com>
18247         * literal.cs (NullPointer): Provide a private .ctor which sets
18248         `type' to TypeManager.object_type.  Fixes #59048.
18250 2004-05-29  Martin Baulig  <martin@ximian.com>
18252         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
18253         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
18255         * ecore.cs (EventExpr.instance_expr): Make the field private.
18257 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
18259         Fixed bug #50080 & cs0214-2.cs
18260         * expression.cs (Cast.DoResolve): Check unsafe context here.
18261         
18262         * statement.cs (Resolve.DoResolve): Likewise.
18264 2004-05-26  Martin Baulig  <martin@ximian.com>
18266         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
18268         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
18269         (RootContext.LookupType): Pass down the `silent' flag.
18271 2004-05-25  Martin Baulig  <martin@ximian.com>
18273         * expression.cs
18274         (MethodGroupExpr.IdenticalTypeName): New public property.
18275         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
18276         expression actually refers to a type.
18278 2004-05-25  Martin Baulig  <martin@ximian.com>
18280         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
18281         for #56176 and made it actually work.
18283 2004-05-25  Martin Baulig  <martin@ximian.com>
18285         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
18286         (FieldExpr, PropertyExpr): Override and implement
18287         CacheTemporaries.  Fixes #52279.
18289 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
18291         * location.cs: In the new compiler listing a file twice is a
18292         warning, not an error.
18294 2004-05-24  Martin Baulig  <martin@ximian.com>
18296         * enum.cs (Enum.DefineType): For the `BaseType' to be a
18297         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
18299 2004-05-24  Martin Baulig  <martin@ximian.com>
18301         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
18302         walking the `using' list.  Fixes #53921.
18304 2004-05-24  Martin Baulig  <martin@ximian.com>
18306         * const.cs (Const.LookupConstantValue): Added support for
18307         EmptyCast's; fixes #55251.
18309 2004-05-24  Martin Baulig  <martin@ximian.com>
18311         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
18312         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
18313         which does the CS0135 check.  The reason is that we first need to
18314         check whether the variable actually exists.
18316 2004-05-24  Martin Baulig  <martin@ximian.com>
18318         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
18319         than RootContext.LookupType() to find the explicit interface
18320         type.  Fixes #58584.
18322 2004-05-24  Raja R Harinath  <rharinath@novell.com>
18324         * Makefile: Simplify.  Use executable.make.
18325         * mcs.exe.sources: New file.  List of sources of mcs.exe.
18327 2004-05-24  Anders Carlsson  <andersca@gnome.org>
18329         * decl.cs:
18330         * enum.cs:
18331         Use the invariant culture when doing String.Compare for CLS case
18332         sensitivity.
18333         
18334 2004-05-23  Martin Baulig  <martin@ximian.com>
18336         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
18337         don't have any dots.  Fixes #52622, added cs0246-8.cs.
18339         * namespace.cs (NamespaceEntry.Lookup): Likewise.
18340         
18341 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
18343         * class.cs (MemberBase.Define): Reuse MemberType member for 
18344         resolved type. Other methods can use it too.
18346 2004-05-23  Martin Baulig  <martin@ximian.com>
18348         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
18349         the variable also exists in the current block (otherwise, we need
18350         to report a CS0103).  Fixes #58670.
18352 2004-05-23  Martin Baulig  <martin@ximian.com>
18354         * flowanalysis.cs (Reachability.Reachable): Compute this
18355         on-the-fly rather than storing it as a field.
18357 2004-05-23  Martin Baulig  <martin@ximian.com>
18359         * flowanalysis.cs (Reachability.And): Manually compute the
18360         resulting `barrier' from the reachability.      
18361        
18362 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
18364         Fix bug #57835
18365         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
18366         instance of ObsoleteAttribute when symbol is obsolete.
18368         * class.cs
18369         (IMethodData): Extended interface for ObsoleteAttribute support.
18371 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
18373         * attribute.cs: Fix bug #55970
18375 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
18377         Fix bug #52705
18378         * attribute.cs
18379         (GetObsoleteAttribute): New method. Creates the instance of
18380         ObsoleteAttribute.
18381         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
18382         ObsoleteAttribute when member is obsolete.
18383         (AttributeTester.Report_ObsoleteMessage): Common method for
18384         Obsolete error/warning reporting.
18386         * class.cs
18387         (TypeContainer.base_classs_type): New member for storing parent type.
18389         * decl.cs
18390         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
18391         for this MemberCore.
18393 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18395         * attribute.cs, const.cs: Fix bug #58590
18397 2004-05-21  Martin Baulig  <martin@ximian.com>
18399         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
18400         out parameters if the end of the method is unreachable.  Fixes
18401         #58098. 
18403 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18405         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
18406         Hari was right, why extra method.
18408 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18410         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
18412 2004-05-20  Martin Baulig  <martin@ximian.com>
18414         Merged this back from gmcs to keep the differences to a minumum.
18416         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
18417         instead of a Declspace.
18418         (Attribute.ResolveType): Likewise.
18419         (Attributes.Search): Likewise.
18420         (Attributes.Contains): Likewise.
18421         (Attributes.GetClsCompliantAttribute): Likewise.
18423         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
18424         argument.
18425         (MethodData.ApplyAttributes): Take an EmitContext instead of a
18426         DeclSpace.
18428 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
18430         Fix bug #58688 (MCS does not report error when the same attribute
18431         is assigned twice)
18433         * attribute.cs (Attribute.Emit): Distinction between null and default.
18435 2004-05-19  Raja R Harinath  <rharinath@novell.com>
18437         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
18438         of a top-level attribute without an attribute target.
18439         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
18440         Make non-static.
18441         (Attribute.Conditional_GetConditionName), 
18442         (Attribute.Obsolete_GetObsoleteMessage): Update.
18443         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
18444         part of ScanForIndexerName.
18445         (Attribute.CanIgnoreInvalidAttribute): New function.
18446         (Attribute.ScanForIndexerName): Move to ...
18447         (Attributes.ScanForIndexerName): ... here.
18448         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
18449         (Attributes.Search): New internal variant that can choose not to
18450         complain if types aren't resolved.  The original signature now
18451         complains.
18452         (Attributes.GetClsCompliantAttribute): Use internal variant, with
18453         complaints suppressed.
18454         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
18455         only if it not useful.
18456         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
18457         top-level for attributes that are shared between the assembly
18458         and a top-level class.
18459         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
18460         * class.cs: Update to reflect changes.
18461         (DefineIndexers): Fuse loops.
18462         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
18463         a couple more variants of attribute names.
18465 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
18467         Fix bug #52585 (Implemented explicit attribute declaration)
18469         * attribute.cs:
18470         (Attributable.ValidAttributeTargets): New abstract method. It gets
18471         list of valid attribute targets for explicit target declaration.
18472         (Attribute.Target): It holds target itself.
18473         (AttributeSection): Removed.
18474         (Attribute.CheckTargets): New method. It checks whether attribute
18475         target is valid for the current element.
18477         * class.cs:
18478         (EventProperty): New class. For events that are declared like
18479         property (with add and remove accessors).
18480         (EventField): New class. For events that are declared like field.
18481         class.cs
18483         * cs-parser.jay: Implemented explicit attribute target declaration.
18485         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
18486         Override ValidAttributeTargets.
18488         * parameter.cs:
18489         (ReturnParameter): Class for applying custom attributes on 
18490         the return type.
18491         (ParameterAtribute): New class. Class for applying custom
18492         attributes on the parameter type.
18494 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
18496         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
18497         definitions. 
18499         (Method): Allow UNSAFE here.
18501         * modifiers.cs: Support unsafe reporting.
18503 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
18505         * decl.cs: Fix bug #58478.
18507 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18509         * statement.cs: When checking for unreachable code on an EmptyStatement,
18510         set the location. Fixes bug #58488.
18512 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
18514         * driver.cs: Add -pkg handling.
18516         From Gonzalo: UseShelLExecute=false
18518 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
18520         * attribute.cs:
18521         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
18522         for attribute.
18523         (Attribute.IsClsCompliaceRequired): Moved to base for better
18524         accesibility.
18525         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
18526         when attribute is AttributeUsageAttribute.
18527         (Attribute.GetValidTargets): Simplified.
18528         (Attribute.GetAttributeUsage): New method returns AttributeUsage
18529         attribute for this type.
18530         (Attribute.ApplyAttributes): Method renamed to Emit and make
18531         non-static.
18532         (GlobalAttributeSection): New class for special handling of global
18533         attributes (assembly, module).
18534         (AttributeSection.Emit): New method.
18536         * class.cs: Implemented Attributable abstract methods.
18537         (MethodCore.LabelParameters): Moved to Parameter class.
18538         (Accessor): Is back simple class.
18539         (PropertyMethod): Implemented Attributable abstract class.
18540         (DelegateMethod): Implemented Attributable abstract class.
18541         (Event): New constructor for disctintion between normal Event
18542         and Event with accessors.
18544         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
18546         * codegen.cs, const.cs, decl.cs, delegate.cs:
18547         (CommonAssemblyModulClass): Implemented Attributable abstract class
18548         and simplified.
18550         * enum.cs: Implement IAttributeSupport interface.
18551         (EnumMember): New class for emum members. Implemented Attributable
18552         abstract class
18554         * parameter.cs:
18555         (ParameterBase): Is abstract.
18556         (ReturnParameter): New class for easier [return:] attribute handling.
18558         * typemanager.cs: Removed builder_to_attr.
18560 2004-05-11  Raja R Harinath  <rharinath@novell.com>
18562         Fix bug #57151.
18563         * attribute.cs (Attribute.GetPositionalValue): New function.
18564         * class.cs (TypeContainer.VerifyMembers): New function.
18565         (TypeContainer.Emit): Use it.
18566         (ClassOrStruct): New base class for Class and Struct.
18567         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
18568         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
18569         class.
18570         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
18571         then each non-static field should have a FieldOffset attribute.
18572         Otherwise, none of the fields should have a FieldOffset attribute.
18573         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
18574         and FieldOffset attributes.
18575         * typemanager.cs (TypeManager.struct_layout_attribute_type)
18576         (TypeManager.field_offset_attribute_type): New core types.
18577         (TypeManager.InitCoreTypes): Initialize them.
18579 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
18581         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
18582         Return correct type.
18583         From bug #58270.
18585 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
18587         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
18588         be implicitly converted to ulong.
18589         
18590         * expression.cs: The logic for allowing operator &, | and ^ worked
18591         was wrong, it worked before because we did not report an error in
18592         an else branch.  Fixes 57895.
18594         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
18595         allow volatile fields to be reference types.
18597 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
18599         * driver.cs: Add support for /debug-
18601 2004-05-07  Raja R Harinath  <rharinath@novell.com>
18603         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
18604         Add a 'complain' parameter to silence errors.
18605         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
18606         silently overlooked type-resolutions.
18607         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
18608         to reflect changes.
18609         (Attributes.Search): New function.
18610         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
18611         (Attributes.GetAttributeFullName): Remove hack.
18612         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
18613         Update to reflect changes.
18614         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
18615         Use Attributes.Search instead of nested loops.
18617 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
18619         * decl.cs:
18620         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
18621         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
18622         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
18624         * report.cs: (Report.Warning): Renamed to Warning_T because of
18625         parameter collision.
18627 2004-05-05  Raja R Harinath  <rharinath@novell.com>
18629         * expression.cs (MemberAccess.ResolveMemberAccess):
18630         Exit with non-zero status after Report.Error.
18631         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
18632         Likewise.
18633         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
18635 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
18637         * support.cs: Don't hang when the file is empty.
18639 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
18641         * support.cs: In SeekableStreamReader, compute the preamble size of the
18642           underlying stream. Position changes should take into account that initial
18643           count of bytes.
18645 2004-05-03  Todd Berman  <tberman@sevenl.net>
18647         * driver.cs: remove unused GetSysVersion function.
18649 2004-05-03  Todd Berman  <tberman@sevenl.net>
18651         * driver.cs: Remove the hack from saturday, as well as the hack
18652         from jackson (LoadAssemblyFromGac), also adds the CWD to the
18653         link_paths to get that bit proper.
18655 2004-05-01  Todd Berman  <tberman@sevenl.net>
18657         * driver.cs: Try a LoadFrom before a Load, this checks the current
18658         path. This is currently a bug in mono that is be fixed, however, this
18659         provides a workaround for now. This will be removed when the bug
18660         is fixed.
18662 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
18664         * CryptoConvert.cs: Updated to latest version. Fix issue with 
18665         incomplete key pairs (#57941).
18667 2004-05-01  Todd Berman  <tberman@sevenl.net>
18669         * driver.cs: Remove '.' from path_chars, now System.* loads properly
18670         from the GAC
18672 2004-04-30  Jackson Harper  <jackson@ximian.com>
18674         * codegen.cs: Open keys readonly.
18675         
18676 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18678         * typemanager.cs: don't report cyclic struct layout when a struct
18679         contains 2 or more fields of the same type. Failed for Pango.AttrShape
18680         which has 2 Pango.Rectangle fields.
18682 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
18684         * expression.cs: Handle IntPtr comparisons with IL code
18685         rather than a method call.
18687 2004-04-29  Martin Baulig  <martin@ximian.com>
18689         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
18690         the list of PropertyInfo's in class hierarchy and find the
18691         accessor.  Fixes #56013.
18693 2004-04-29  Martin Baulig  <martin@ximian.com>
18695         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
18697 2004-04-29  Martin Baulig  <martin@ximian.com>
18699         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
18701         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
18703 2004-04-29  Martin Baulig  <martin@ximian.com>
18705         * class.cs (ConstructorInitializer.Resolve): Check whether the
18706         parent .ctor is accessible.  Fixes #52146.
18708 2004-04-29  Martin Baulig  <martin@ximian.com>
18710         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
18712         * statement.cs (Using.EmitLocalVariableDecls): Use
18713         TypeManager.idisposable_type, not typeof (IDisposable).
18714         (Foreach.EmitCollectionForeach): Added support for valuetypes.
18716 2004-04-29  Martin Baulig  <martin@ximian.com>
18718         * class.cs (Event.Define): Don't emit the field and don't set
18719         RTSpecialName and SpecialName for events on interfaces.  Fixes
18720         #57703. 
18722 2004-04-29  Raja R Harinath  <rharinath@novell.com>
18724         Refactor Attribute.ApplyAttributes.
18725         * attribute.cs (Attributable): New base class for objects that can
18726         have Attributes applied on them.
18727         (Attribute): Make AttributeUsage fields public.
18728         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
18729         (Attribute.IsInternalCall): New property.
18730         (Attribute.UsageAttr): Convert to a public read-only property.
18731         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
18732         (Attribute.ResolveType, Attribute.Resolve)
18733         (Attribute.ScanForIndexerName): Update to reflect changes.
18734         (Attribute.CheckAttributeTarget): Re-format.
18735         (Attribute.ApplyAttributes): Refactor, to various
18736         Attributable.ApplyAttributeBuilder methods.
18737         * decl.cs (MemberCore): Make Attributable.
18738         * class.cs (Accessor): Make Attributable.
18739         (MethodData.ApplyAttributes): Use proper attribute types, not
18740         attribute names.
18741         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
18742         (TypeContainer.ApplyAttributeBuilder)
18743         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
18744         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
18745         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
18746         (Operator.ApplyAttributeBuilder): New factored-out methods.
18747         * const.cs (Const.ApplyAttributeBuilder): Likewise.
18748         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
18749         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
18750         * parameter.cs (ParameterBase): New Attributable base class
18751         that can also represent Return types.
18752         (Parameter): Update to the changes.
18754 2004-04-29  Jackson Harper  <jackson@ximian.com>
18756         * driver.cs: Prefer the corlib system version when looking for
18757         assemblies in the GAC. This is still a hack, but its a better hack
18758         now.
18759         
18760 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
18762         * decl.cs, enum.cs: Improved error 3005 reporting.
18763   
18764         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
18765         (related_symbols): New private member for list of symbols
18766         related to reported error/warning.
18767         
18768         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
18770 2004-04-29  Martin Baulig  <martin@ximian.com>
18772         * ecore.cs (Expression.Constantify): If we're an enum and
18773         TypeManager.TypeToCoreType() doesn't give us another type, use
18774         t.UnderlyingSystemType.  Fixes #56178.  
18776 2004-04-29  Martin Baulig  <martin@ximian.com>
18778         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
18779         interfaces and for each interface, only add members directly
18780         declared in that interface.  Fixes #53255.
18782 2004-04-28  Martin Baulig  <martin@ximian.com>
18784         * expression.cs (ConditionalLogicalOperator): Use a temporary
18785         variable for `left' to avoid that we evaluate it more than once;
18786         bug #52588.
18788 2004-04-28  Martin Baulig  <martin@ximian.com>
18790         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
18791         `void[]' (CS1547).
18793 2004-04-28  Martin Baulig  <martin@ximian.com>
18795         * statement.cs (LocalInfo.Resolve): Check whether the type is not
18796         void (CS1547).
18798         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
18799         whether the type is not void (CS1547).
18801 2004-04-28  Martin Baulig  <martin@ximian.com>
18803         * expression.cs (Unary.DoResolveLValue): Override this and report
18804         CS0131 for anything but Operator.Indirection.
18806 2004-04-28  Martin Baulig  <martin@ximian.com>
18808         Committing a patch from Ben Maurer; see bug #50820.
18810         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
18811         check for classes.
18813         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
18814         classes.        
18816 2004-04-28  Martin Baulig  <martin@ximian.com>
18818         Committing a patch from Ben Maurer; see bug #50820.
18820         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
18821         check for classes.
18823         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
18824         classes.        
18826 2004-04-28  Martin Baulig  <martin@ximian.com>
18828         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
18829         (Block.AddLabel): Call DoLookupLabel() to only search in the
18830         current block.
18832 2004-04-28  Martin Baulig  <martin@ximian.com>
18834         * cfold.cs (ConstantFold.BinaryFold): Added special support for
18835         comparing StringConstants and NullLiterals in Equality and Inequality.
18837 2004-04-28  Jackson Harper  <jackson@ximian.com>
18839         * driver.cs: Attempt to load referenced assemblies from the
18840         GAC. This is the quick and dirty version of this method that
18841         doesnt take into account versions and just takes the first
18842         canidate found. Will be good enough for now as we will not have more
18843         then one version installed into the GAC until I update this method.
18845 2004-04-28  Martin Baulig  <martin@ximian.com>
18847         * typemanager.cs (TypeManager.CheckStructCycles): New public
18848         static method to check for cycles in the struct layout.
18850         * rootcontext.cs (RootContext.PopulateTypes): Call
18851         TypeManager.CheckStructCycles() for each TypeContainer.
18852         [Note: We only need to visit each type once.]
18854 2004-04-28  Martin Baulig  <martin@ximian.com>
18856         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
18858         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
18859         success and added `out object value'.  Use a `bool resolved' field
18860         to check whether we've already been called rather than
18861         `ConstantValue != null' since this breaks for NullLiterals.
18863 2004-04-28  Raja R Harinath  <rharinath@novell.com>
18865         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
18866         setting of this flag, since the 'set' method may be non-public.
18868 2004-04-28  Raja R Harinath  <rharinath@novell.com>
18870         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
18871         check on current_vector.Block.
18873 2004-04-27  Martin Baulig  <martin@ximian.com>
18875         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
18876         a field initializer.  Fixes #56459.
18878 2004-04-27  Martin Baulig  <martin@ximian.com>
18880         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
18881         we're not attempting to use an indexer.  Fixes #52154.
18883 2004-04-27  Martin Baulig  <martin@ximian.com>
18885         * statement.cs (Return): Don't create a return label if we don't
18886         need it; reverts my change from January 20th.  Thanks to Ben
18887         Maurer for this.
18889 2004-04-27  Martin Baulig  <martin@ximian.com>
18891         According to the spec, `goto' can only leave a nested scope, but
18892         never enter it.
18894         * statement.cs (Block.LookupLabel): Only lookup in the current
18895         block, don't recurse into parent or child blocks.
18896         (Block.AddLabel): Check in parent and child blocks, report
18897         CS0140/CS0158 if we find a duplicate.
18898         (Block): Removed this indexer for label lookups.
18899         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
18900         this already does the error reporting for us.
18902         * flowanalysis.cs
18903         (FlowBranching.UsageVector.Block): New public variable; may be null.
18904         (FlowBranching.CreateSibling): Added `Block' argument.
18905         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
18906         label for the target of a `goto' and check whether we're not
18907         leaving a `finally'.
18909 2004-04-27  Martin Baulig  <martin@ximian.com>
18911         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
18912         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
18913         just for returns).
18915 2004-04-27  Martin Baulig  <martin@ximian.com>
18917         * statement.cs (Block.AddLabel): Also check for implicit blocks
18918         and added a CS0158 check.
18920 2004-04-27  Martin Baulig  <martin@ximian.com>
18922         * flowanalysis.cs (FlowBranchingLoop): New class.
18923         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
18924         UsageVector's instead of an ArrayList.
18925         (FlowBranching.Label): Likewise.
18926         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
18927         (FlowBranching.AddBreakVector): New method.
18929 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
18931         * attribute.cs: Small regression fix: only convert the type if we
18932         the type is different, fixes System.Drawing build.
18934 2004-04-27  Martin Baulig  <martin@ximian.com>
18936         * attribute.cs (Attribute.Resolve): If we have a constant value
18937         for a named field or property, implicity convert it to the correct
18938         type.
18940 2004-04-27  Raja R Harinath  <rharinath@novell.com>
18942         * statement.cs (Block.Block): Implicit blocks share
18943         'child_variable_names' fields with parent blocks.
18944         (Block.AddChildVariableNames): Remove.
18945         (Block.AddVariable): Mark variable as "used by a child block" in
18946         every surrounding block.
18947         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
18948         been used in a child block, complain about violation of "Invariant
18949         meaning in blocks" rule.
18950         * cs-parser.jay (declare_local_variables): Don't use
18951         AddChildVariableNames.
18952         (foreach_statement): Don't create an implicit block: 'foreach'
18953         introduces a scope.
18955 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
18957         * convert.cs (ImplicitNumericConversion): 0 is also positive when
18958         converting from 0L to ulong.  Fixes 57522.
18960 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
18962         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
18963         derived class hides via 'new' keyword field from base class (test-242.cs).
18964         TODO: Handle this in the more general way.
18965         
18966         * class.cs (CheckBase): Ditto.
18968 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
18970         * decl.cs (caching_flags): New member for storing cached values
18971         as bit flags.
18972         (MemberCore.Flags): New enum where bit flags for caching_flags
18973         are defined.
18974         (MemberCore.cls_compliance): Moved to caching_flags.
18975         (DeclSpace.Created): Moved to caching_flags.
18977         * class.cs: Use caching_flags instead of DeclSpace.Created
18978         
18979 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
18981         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
18982         if we are only a derived class, not a nested class.
18984         * typemanager.cs: Same as above, but do this at the MemberLookup
18985         level (used by field and methods, properties are handled in
18986         PropertyExpr).   Allow for the qualified access if we are a nested
18987         method. 
18989 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
18991         * class.cs: Refactoring.
18992         (IMethodData): New inteface; Holds links to parent members
18993         to avoid member duplication (reduced memory allocation).
18994         (Method): Implemented IMethodData interface.
18995         (PropertyBase): New inner classes for get/set methods.
18996         (PropertyBase.PropertyMethod): Implemented IMethodData interface
18997         (Event): New inner classes for add/remove methods.
18998         (Event.DelegateMethod): Implemented IMethodData interface.
19000         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
19001         EmitContext (related to class.cs refactoring).
19003 2004-04-21  Raja R Harinath  <rharinath@novell.com>
19005         * delegate.cs (Delegate.VerifyApplicability): If the number of
19006         arguments are the same as the number of parameters, first try to
19007         verify applicability ignoring  any 'params' modifier on the last
19008         parameter.
19009         Fixes #56442.
19011 2004-04-16  Raja R Harinath  <rharinath@novell.com>
19013         * class.cs (TypeContainer.AddIndexer): Use
19014         'ExplicitInterfaceName' to determine if interface name was
19015         explicitly specified.  'InterfaceType' is not initialized at this time.
19016         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
19017         Indexers array is already in the required order.  Initialize
19018         'IndexerName' only if there are normal indexers.
19019         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
19020         (TypeContainer.Emit): Emit DefaultMember attribute only if
19021         IndexerName is initialized.
19022         Fixes #56300.
19024 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
19026         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
19027         Fixes #57007
19029 2004-04-15  Raja R Harinath  <rharinath@novell.com>
19031         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
19032         attributes.
19033         Fix for #56456.
19035         * attribute.cs (Attribute.Resolve): Check for duplicate named
19036         attributes.
19037         Fix for #56463.
19039 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
19041         * iterators.cs (MarkYield): track whether we are in an exception,
19042         and generate code accordingly.  Use a temporary value to store the
19043         result for our state.
19045         I had ignored a bit the interaction of try/catch with iterators
19046         since their behavior was not entirely obvious, but now it is
19047         possible to verify that our behavior is the same as MS .NET 2.0
19049         Fixes 54814
19051 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
19053         * iterators.cs: Avoid creating temporaries if there is no work to
19054         do. 
19056         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
19057         Enumerations, use TypeManager.EnumToUnderlying and call
19058         recursively. 
19060         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
19061         bug #57013
19063         (This.Emit): Use EmitContext.EmitThis to emit our
19064         instance variable.
19066         (This.EmitAssign): Ditto.
19068         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
19069         codepaths, we will move all the functionality into
19070         Mono.CSharp.This 
19072         (FieldExpr.EmitAssign): Ditto.
19074         This fixes several hidden bugs that I uncovered while doing a code
19075         review of this today.
19077         * codegen.cs (EmitThis): reworked so the semantics are more clear
19078         and also support value types "this" instances.
19080         * iterators.cs: Changed so that for iterators in value types, we
19081         do not pass the value type as a parameter.  
19083         Initialization of the enumerator helpers is now done in the caller
19084         instead of passing the parameters to the constructors and having
19085         the constructor set the fields.
19087         The fields have now `assembly' visibility instead of private.
19089 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
19091         * expression.cs (Argument.Resolve): Check if fields passed as ref
19092         or out are contained in a MarshalByRefObject.
19094         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
19095         another compiler type.
19097 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
19099         * class.cs (Indexer.Define): use the new name checking method.
19100         Also, return false on an error.
19101         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
19102         (is_identifier_[start/part]_character): make static.
19104 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
19106         * expression.cs (Binary.ResolveOperator): Do no append strings
19107         twice: since we can be invoked more than once (array evaluation)
19108         on the same concatenation, take care of this here.  Based on a fix
19109         from Ben (bug #56454)
19111 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
19113         * codegen.cs: Fix another case where CS1548 must be reported (when 
19114         delay-sign isn't specified and no private is available #56564). Fix
19115         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
19116         error when MCS is used on the MS runtime and we need to delay-sign 
19117         (which seems unsupported by AssemblyBuilder - see #56621).
19119 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
19121         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
19122         (TypeManager.ComputeNamespaces): Faster implementation for
19123         Microsoft runtime.
19125         * compiler.csproj: Updated AssemblyName to mcs.
19127 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
19129         * rootcontext.cs: Add new types to the boot resolution.
19131         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
19132         MulticastDelegate is not allowed.
19134         * typemanager.cs: Add new types to lookup: System.TypedReference
19135         and ArgIterator.
19137         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
19138         check for TypedReference or ArgIterator, they are not allowed. 
19140         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
19141         makes us properly catch 1510 in some conditions (see bug 56016 for
19142         details). 
19144 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
19146         * CryptoConvert.cs: update from corlib version
19147         with endian fixes.
19149 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
19151         * class.cs (Indexer.Define): Check indexername declaration
19153 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
19155         * attribute.cs (IsClsCompliant): Fixed problem with handling
19156         all three states (compliant, not-compliant, undetected).
19158 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
19160         * attribute.cs (Attribute): Location is now public.
19161         (Resolve): Store resolved arguments (pos_values) in attribute class.
19162         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
19163         (GetClsCompliantAttributeValue): New method that gets
19164         CLSCompliantAttribute value.
19165         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
19166         if exists else null.
19167         (AttributeTester): New class for CLS-Compliant verification routines.
19169         * class.cs (Emit): Add CLS-Compliant verification.
19170         (Method.GetSignatureForError): Implemented.
19171         (Constructor.GetSignatureForError): Implemented
19172         (Constructor.HasCompliantArgs): Returns if constructor has
19173         CLS-Compliant arguments.
19174         (Constructor.Emit): Override.
19175         (Construcor.IsIdentifierClsCompliant): New method; For constructors
19176         is needed to test only parameters.
19177         (FieldBase.GetSignatureForError): Implemented.
19178         (TypeContainer): New member for storing base interfaces.
19179         (TypeContainer.FindMembers): Search in base interfaces too.
19181         * codegen.cs (GetClsComplianceAttribute): New method that gets
19182         assembly or module CLSCompliantAttribute value.
19183         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
19184         for assembly.
19185         (ModuleClass.Emit): Add error 3012 test.
19187         * const.cs (Emit): Override and call base for CLS-Compliant tests.
19189         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
19190         state for all decl types.
19191         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
19192         if CLS-Compliant tests are required.
19193         (IsClsCompliaceRequired): New method. Analyze whether code
19194         must be CLS-Compliant.
19195         (IsExposedFromAssembly): New method. Returns true when MemberCore
19196         is exposed from assembly.
19197         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
19198         value or gets cached value.
19199         (HasClsCompliantAttribute): New method. Returns true if MemberCore
19200         is explicitly marked with CLSCompliantAttribute.
19201         (IsIdentifierClsCompliant): New abstract method. This method is
19202         used to testing error 3005.
19203         (IsIdentifierAndParamClsCompliant): New method. Common helper method
19204         for identifier and parameters CLS-Compliant testing.
19205         (VerifyClsCompliance): New method. The main virtual method for
19206         CLS-Compliant verifications.
19207         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
19208         null. I don't know why is null (too many public members !).
19209         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
19210         and get value of first CLSCompliantAttribute that found.
19212         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
19213         (VerifyClsCompliance): Override and add extra tests.
19215         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
19216         clscheck- disable CLS-Compliant verification event if assembly is has
19217         CLSCompliantAttribute(true).
19219         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
19220         ApllyAttribute is now called in emit section as in the other cases.
19221         Possible future Emit integration.
19222         (IsIdentifierClsCompliant): New override.
19223         (VerifyClsCompliance): New override.
19224         (GetEnumeratorName): Returns full enum name.
19226         * parameter.cs (GetSignatureForError): Implemented.
19228         * report.cs (WarningData): New struct for Warning message information.
19229         (LocationOfPreviousError): New method.
19230         (Warning): New method. Reports warning based on the warning table.
19231         (Error_T): New method. Reports error based on the error table.
19233         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
19234         verifications are done here.
19236         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
19238         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
19239         CLSCompliantAttribute.
19240         (all_imported_types): New member holds all imported types from other
19241         assemblies.
19242         (LoadAllImportedTypes): New method fills static table with exported types
19243         from all referenced assemblies.
19244         (Modules): New property returns all assembly modules.
19246 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
19248         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
19249         throwing a parser error.
19251         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
19252         which removes the hardcoded get_/set_ prefixes for properties, as
19253         IL allows for the properties to be named something else.  
19255         Bug #56013
19257         * expression.cs: Do not override operand before we know if it is
19258         non-null.  Fix 56207
19260 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19262         * typemanager.cs: support for pinned variables.
19264 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19266         * decl.cs, typemanager.cs: Avoid using an arraylist
19267         as a buffer if there is only one result set.
19269 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19271         * expression.cs: Make sure you cant call a static method
19272         with an instance expression, bug #56174.
19274 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
19276         * class.cs (IsDuplicateImplementation): Improve error reporting to
19277         flag 663 (method only differs in parameter modifier).
19279         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
19280         in preprocessor directives.
19282         * location.cs (LookupFile): Allow for the empty path.
19284         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
19285         better approach for some of that patch, but its failing with the
19286         CharSet enumeration.  For now try/catch will do.
19288         * typemanager.cs: Do not crash if a struct does not have fields.
19289         Fixes 56150.
19291 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19293         * expression.cs: cs0213, cant fix a fixed expression.
19294         fixes 50231.
19296 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19298         * cs-parser.jay: detect invalid embeded statements gracefully.
19299         bug #51113.
19301 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19303         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
19304         As a regex:
19305         s/
19306         the invocation type may not be a subclass of the tye of the item/
19307         The type of the item must be a subclass of the invocation item.
19308         /g
19310         Fixes bug #50820.
19312 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
19314         * attribute.cs: Added methods to get a string and a bool from an
19315         attribute. Required to information from AssemblyKeyFileAttribute,
19316         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
19317         * codegen.cs: Modified AssemblyName creation to include support for
19318         strongnames. Catch additional exceptions to report them as CS1548.
19319         * compiler.csproj: Updated include CryptoConvert.cs.
19320         * compiler.csproj.user: Removed file - user specific configuration.
19321         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
19322         Mono.Security assembly. The original class is maintained and tested in
19323         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
19324         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
19325         like CSC 8.0 (C# v2) supports.
19326         * Makefile: Added CryptoConvert.cs to mcs sources.
19327         * rootcontext.cs: Added new options for strongnames.
19329 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
19331         * driver.cs: For --expect-error, report error code `2'
19332         if the program compiled with no errors, error code `1' if
19333         it compiled with an error other than the one expected.
19335 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
19337         * compiler.csproj: Updated for Visual Studio .NET 2003.
19338         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
19339         * compiler.sln: Updated for Visual Studio .NET 2003.
19341 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
19343         * expression.cs: Fix bug #47234. We basically need to apply the
19344         rule that we prefer the conversion of null to a reference type
19345         when faced with a conversion to 'object' (csc behaviour).
19347 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19349         * statement.cs: Shorter form for foreach, eliminates
19350         a local variable. r=Martin.
19352 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19354         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
19355         checks if we can use brtrue/brfalse to test for 0.
19356         * expression.cs: use the above in the test for using brtrue/brfalse.
19357         cleanup code a bit.
19359 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19361         * expression.cs: Rewrite string concat stuff. Benefits:
19363         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
19364         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
19365         rather than a concat chain.
19367         * typemanager.cs: Add lookups for more concat overloads.
19369 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19371         * expression.cs: Emit shorter il code for array init.
19373         newarr
19374         dup
19375         // set 1
19377         // set 2
19379         newarr
19380         stloc.x
19382         ldloc.x
19383         // set 1
19385         ldloc.x
19386         // set 2
19388 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
19390         * statement.cs: Before, two switch blocks would be merged if the
19391         total size of the blocks (end_item - begin_item + 1) was less than
19392         two times the combined sizes of the blocks.
19394         Now, it will only merge if after the merge at least half of the
19395         slots are filled.
19397         fixes 55885.
19399 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
19401         * class.cs : csc build fix for GetMethods(). See bug #52503.
19403 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
19405         * expression.cs: Make sure fp comparisons work with NaN.
19406         This fixes bug #54303. Mig approved this patch a long
19407         time ago, but we were not able to test b/c the runtime
19408         had a related bug.
19410 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
19412         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
19414 2004-03-19  Martin Baulig  <martin@ximian.com>
19416         * class.cs (MemberCore.IsDuplicateImplementation): Report the
19417         error here and not in our caller.
19419 2004-03-19  Martin Baulig  <martin@ximian.com>
19421         * interface.cs: Completely killed this file.
19422         (Interface): We're now a TypeContainer and live in class.cs.
19424         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
19425         argument; we're now also called for interfaces.
19426         (TypeContainer.DefineMembers): Allow this method being called
19427         multiple times.
19428         (TypeContainer.GetMethods): New public method; formerly known as
19429         Interface.GetMethod().  This is used by PendingImplementation.
19430         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
19431         it's now private and non-static.
19432         (Interface): Moved this here; it's now implemented similar to
19433         Class and Struct.
19434         (Method, Property, Event, Indexer): Added `bool is_interface'
19435         argument to their .ctor's.
19436         (MemberBase.IsInterface): New public field.
19438         * cs-parser.jay: Create normal Method, Property, Event, Indexer
19439         instances instead of InterfaceMethod, InterfaceProperty, etc.
19440         (opt_interface_base): Removed; we now use `opt_class_base' instead.
19441         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
19443 2004-03-19  Martin Baulig  <martin@ximian.com>
19445         * class.cs (MethodCore.IsDuplicateImplementation): New private
19446         method which does the CS0111 checking.
19447         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
19448         Use IsDuplicateImplementation().
19450 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
19452         * decl.cs (FindMemberToOverride): New method to find the correct
19453         method or property to override in the base class.
19454         * class.cs
19455             - Make Method/Property use the above method to find the
19456               version in the base class.
19457             - Remove the InheritableMemberSignatureCompare as it is now
19458               dead code.
19460         This patch makes large code bases much faster to compile, as it is
19461         O(n) rather than O(n^2) to do this validation.
19463         Also, it fixes bug 52458 which is that nested classes are not
19464         taken into account when finding the base class member.
19466         Reviewed/Approved by Martin.
19468 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
19470         * interface.cs: In all interface classes removed redundant
19471         member initialization.
19473 2004-03-16  Martin Baulig  <martin@ximian.com>
19475         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
19477 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
19479         * decl.cs (DefineTypeAndParents): New helper method to define a
19480         type's containers before the type itself is defined;  This is a
19481         bug exposed by the recent changes to Windows.Forms when an
19482         implemented interface was defined inside a class that had not been
19483         built yet.   
19485         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
19487         (Check): Loop correctly to report errors modifiers
19488         (UNSAFE was not in the loop, since it was the same as TOP).
19490         * interface.cs: Every interface member now takes a ModFlags,
19491         instead of a "is_new" bool, which we set on the base MemberCore. 
19493         Every place where we called "UnsafeOk" in the interface, now we
19494         call the proper member (InterfaceMethod.UnsafeOK) instead to get
19495         the unsafe settings from the member declaration instead of the
19496         container interface. 
19498         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
19500         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
19501         `set_indexer_name' to the pending bits (one per type).
19503         We fixed a bug today that was picking the wrong method to
19504         override, since for properties the existing InterfaceMethod code
19505         basically ignored the method name.  Now we make sure that the
19506         method name is one of the valid indexer names.
19508 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
19510         * support.cs (SeekableStreamReader): Keep track of stream byte
19511         positions and don't mix them with character offsets to the buffer.
19513         Patch from Gustavo Giráldez
19515 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
19517         * interface.cs (InterfaceSetGetBase): Removed double member
19518         initialization, base class does it as well.
19520 2004-03-13  Martin Baulig  <martin@ximian.com>
19522         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
19523         when compiling corlib.
19525 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
19527         * convert.cs (ExplicitConversion): We were reporting an error on
19528         certain conversions (object_type source to a value type, when the
19529         expression was `null') before we had a chance to pass it through
19530         the user defined conversions.
19532         * driver.cs: Replace / and \ in resource specifications to dots.
19533         Fixes 50752
19535         * class.cs: Add check for duplicate operators.  Fixes 52477
19537 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
19539         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
19540         that are in the middle of the statements, not only at the end.
19541         Fixes #54987
19543         * class.cs (TypeContainer.AddField): No longer set the
19544         `HaveStaticConstructor' flag, now we call it
19545         `UserDefineStaticConstructor' to diferentiate the slightly
19546         semantic difference.
19548         The situation is that we were not adding BeforeFieldInit (from
19549         Modifiers.TypeAttr) to classes that could have it.
19550         BeforeFieldInit should be set to classes that have no static
19551         constructor. 
19553         See:
19555         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
19557         And most importantly Zoltan's comment:
19559         http://bugzilla.ximian.com/show_bug.cgi?id=44229
19561         "I think beforefieldinit means 'it's ok to initialize the type sometime 
19562          before its static fields are used', i.e. initialization does not need
19563          to be triggered by the first access to the type. Setting this flag
19564          helps the JIT to compile better code, since it can run the static
19565          constructor at JIT time, and does not need to generate code to call it
19566          (possibly lots of times) at runtime. Unfortunately, mcs does not set
19567          this flag for lots of classes like String. 
19568          
19569          csc sets this flag if the type does not have an explicit static 
19570          constructor. The reasoning seems to be that if there are only static
19571          initalizers for a type, and no static constructor, then the programmer
19572          does not care when this initialization happens, so beforefieldinit
19573          can be used.
19574          
19575          This bug prevents the AOT compiler from being usable, since it 
19576          generates so many calls to mono_runtime_class_init that the AOT code
19577          is much slower than the JITted code. The JITted code is faster, 
19578          because it does not generate these calls if the vtable is type is
19579          already initialized, which is true in the majority of cases. But the
19580          AOT compiler can't do this."
19582 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
19584         * class.cs (MethodData.Emit): Refactor the code so symbolic
19585         information is generated for destructors;  For some reasons we
19586         were taking a code path that did not generate symbolic information
19587         before. 
19589 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
19591         * class.cs: Create a Constructor.CheckBase method that
19592         takes care of all validation type code. The method
19593         contains some code that was moved from Define.
19595         It also includes new code that checks for duplicate ctors.
19596         This fixes bug #55148.
19598 2004-03-09  Joshua Tauberer <tauberer@for.net>
19600         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
19601         a { ... }-style array creation invokes EmitStaticInitializers
19602         which is not good for reference-type arrays.  String, decimal
19603         and now null constants (NullCast) are not counted toward
19604         static initializers.
19606 2004-03-05  Martin Baulig  <martin@ximian.com>
19608         * location.cs (SourceFile.HasLineDirective): New public field;
19609         specifies whether the file contains or is referenced by a "#line"
19610         directive.
19611         (Location.DefineSymbolDocuments): Ignore source files which
19612         either contain or are referenced by a "#line" directive.        
19614 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
19616         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
19617         direct access to our parent, so check the method inline there.
19619 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
19621         * expression.cs (Invocation.EmitCall): Miguel's last commit
19622         caused a regression. If you had:
19624             T t = null;
19625             t.Foo ();
19627         In Foo the implict this would be null.
19629 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
19631         * expression.cs (Invocation.EmitCall): If the method is not
19632         virtual, do not emit a CallVirt to it, use Call.
19634         * typemanager.cs (GetFullNameSignature): Improve the method to
19635         cope with ".ctor" and replace it with the type name.
19637         * class.cs (ConstructorInitializer.Resolve): Now the method takes
19638         as an argument the ConstructorBuilder where it is being defined,
19639         to catch the recursive constructor invocations.
19641 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
19643         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
19644         routines to check if a type is an enumerable/enumerator allow
19645         classes that implement the IEnumerable or IEnumerator interfaces.
19647         * class.cs (Property, Operator): Implement IIteratorContainer, and
19648         implement SetYields.
19650         (Property.Define): Do the block swapping for get_methods in the
19651         context of iterators.   We need to check if Properties also
19652         include indexers or not.
19654         (Operator): Assign the Block before invoking the
19655         OperatorMethod.Define, so we can trigger the Iterator code
19656         replacement. 
19658         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
19659         Property and Operator classes are not created when we parse the
19660         declarator but until we have the block completed, so we use a
19661         singleton SimpleIteratorContainer.Simple to flag whether the
19662         SetYields has been invoked.
19664         We propagate this setting then to the Property or the Operator to
19665         allow the `yield' to function.
19667 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
19669         * codegen.cs: Implemented attribute support for modules.
19670         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
19671         Assembly/Module functionality.
19673         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
19674         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
19675         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
19677 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
19679         * interface.cs (FindMembers): The operation is performed on all base
19680         interfaces and not only on the first. It is required for future CLS Compliance patch.
19682 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
19684         * statement.cs, codegen.cs:
19685         This patch deals with patterns such as:
19687         public class List : IEnumerable {
19689                 public MyEnumerator GetEnumerator () {
19690                         return new MyEnumerator(this);
19691                 }
19693                 IEnumerator IEnumerable.GetEnumerator () {
19694                         ...
19695                 }
19696                 
19697                 public struct MyEnumerator : IEnumerator {
19698                         ...
19699                 }
19700         }
19702         Before, there were a few things we did wrong:
19703         1) we would emit callvirt on a struct, which is illegal
19704         2) we emited ldarg when we needed to emit ldarga
19705         3) we would mistakenly call the interface methods on an enumerator
19706         type that derived from IEnumerator and was in another assembly. For example:
19708         public class MyEnumerator : IEnumerator
19710         Would have the interface methods called, even if there were public impls of the
19711         method. In a struct, this lead to invalid IL code.
19713 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
19715         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
19716           renamed to Emit.
19718         * delegate.cs (Define): Fixed crash when delegate type is undefined.
19720 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
19722         * cs-parser.jay: Fix small regression: we were not testing V2
19723         compiler features correctly.
19725         * interface.cs: If the emit context is null, then create one
19727 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
19729         * decl.cs (GetSignatureForError): New virtual method to get full name
19730           for error messages.
19732         * attribute.cs (IAttributeSupport): New interface for attribute setting.
19733           Now it is possible to rewrite ApplyAttributes method to be less if/else.
19735         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
19736           Duplicated members and code in these classes has been removed.
19737           Better encapsulation in these classes.
19739 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
19741         * assign.cs (Assign.DoResolve): When dealing with compound
19742         assignments, there is a new rule in ECMA C# 2.4 (might have been
19743         there before, but it is documented here) that states that in:
19745         a op= b;
19747         If b is of type int, and the `op' is a shift-operator, then the
19748         above is evaluated as:
19750         a = (int) a op b 
19752         * expression.cs (Binary.ResolveOperator): Instead of testing for
19753         int/uint/long/ulong, try to implicitly convert to any of those
19754         types and use that in pointer arithmetic.
19756         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
19757         method to print information for from the type, not from the
19758         null-method we were given.
19760 2004-02-01  Duncan Mak  <duncan@ximian.com>
19762         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
19763         parsing for cmd, fixes bug #53694.
19765 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
19767         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
19768         in the member name duplication tests. Property and operator name duplication
19769         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
19771 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
19773         * interface.cs (PopulateMethod): Fixed crash when interface method
19774         returns not existing type (error test cs0246-3.cs).
19776 2004-02-02  Ravi Pratap M <ravi@ximian.com>
19778         * cs-parser.jay (interface_accessors): Re-write actions to also
19779         store attributes attached to get and set methods. Fix spelling
19780         while at it.
19782         (inteface_property_declaration): Modify accordingly.
19784         (InterfaceAccessorInfo): New helper class to store information to pass
19785         around between rules that use interface_accessors.
19787         * interface.cs (Emit): Apply attributes on the get and set
19788         accessors of properties and indexers too.
19790         * attribute.cs (ApplyAttributes): Modify accordingly to use the
19791         right MethodBuilder when applying attributes to the get and set accessors.
19793 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
19795         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
19797 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
19799         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
19801 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
19803         * cs-parser.jay: Remove YIELD token, instead use the new grammar
19804         changes that treat `yield' specially when present before `break'
19805         or `return' tokens.
19807         * cs-tokenizer.cs: yield is no longer a keyword.
19809 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
19811         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
19812         setting for default constructors.
19813         For default constructors are almost every time set wrong Modifier. The
19814         generated IL code has been alright. But inside mcs this values was
19815         wrong and this was reason why several of my CLS Compliance tests
19816         failed.
19818 2004-01-22  Martin Baulig  <martin@ximian.com>
19820         * cs-parser.jay (namespace_or_type_name): Return an Expression,
19821         not a QualifiedIdentifier.  This is what `type_name_expression'
19822         was previously doing.
19823         (type_name_expression): Removed; the code is now in
19824         `namespace_or_type_name'.
19825         (qualified_identifier): Removed, use `namespace_or_type_name'
19826         instead.
19827         (QualifiedIdentifier): Removed this class.      
19829 2004-01-22  Martin Baulig  <martin@ximian.com>
19831         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
19832         not a string as alias name.
19834 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
19836         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
19837         #52730 bug, and instead compute correctly the need to use a
19838         temporary variable when requesting an address based on the
19839         static/instace modified of the field and the constructor.
19841 2004-01-21  Martin Baulig  <martin@ximian.com>
19843         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
19844         class and namespace before looking up aliases.  Fixes #52517.
19846 2004-01-21  Martin Baulig  <martin@ximian.com>
19848         * flowanalysis.cs (UsageVector.Merge): Allow variables being
19849         assinged in a 'try'; fixes exception4.cs.
19851 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19852         * class.cs : Implemented parameter-less constructor for TypeContainer
19854         * decl.cs: Attributes are now stored here. New property OptAttributes
19856         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
19858         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
19860 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19862         * typemanager.cs (CSharpSignature): Now reports also inner class name.
19863           (CSharpSignature): New method for indexer and property signature.
19865 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19867         * pending.cs (IsVirtualFilter): Faster implementation.
19869 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19871         * typemanager.cs: Avoid inclusion of same assembly more than once.
19873 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19875         * cs-parser.jay: Fixed problem where the last assembly attribute
19876           has been applied also to following declaration (class, struct, etc.)
19877           
19878 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19880         * class.cs: Added error CS0538, CS0539 reporting.
19881         Fixed crash on Microsoft runtime when field type is void.
19883         * cs-parser.jay: Added error CS0537 reporting.
19885         * pending.cs: Added error CS0535 reporting.
19886         Improved error report for errors CS0536, CS0534.
19888 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
19890         Merge a few bits from the Anonymous Method MCS tree.
19892         * statement.cs (ToplevelBlock): New class for toplevel methods,
19893         will hold anonymous methods, lifted variables.
19895         * cs-parser.jay: Create toplevel blocks for delegates and for
19896         regular blocks of code. 
19898 2004-01-20  Martin Baulig  <martin@ximian.com>
19900         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
19901         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
19902         and `NeedExplicitReturn'; added `IsLastStatement'.
19903         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
19904         have a `ReturnLabel' or we're not unreachable.
19906         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
19907         child's reachability; don't just override ours with it.  Fixes
19908         #58058 (lluis's example).
19909         (FlowBranching): Added public InTryOrCatch(), InCatch(),
19910         InFinally(), InLoop(), InSwitch() and
19911         BreakCrossesTryCatchBoundary() methods.
19913         * statement.cs (Return): Do all error checking in Resolve().
19914         Unless we are the last statement in a top-level block, always
19915         create a return label and jump to it.
19916         (Break, Continue): Do all error checking in Resolve(); also make
19917         sure we aren't leaving a `finally'.
19918         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
19919         statement in a top-level block.
19920         (Block.Flags): Added `IsDestructor'.
19921         (Block.IsDestructor): New public property.
19923 2004-01-20  Martin Baulig  <martin@ximian.com>
19925         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
19927 2004-01-20  Martin Baulig  <martin@ximian.com>
19929         * statement.cs (Statement.ResolveUnreachable): New public method.
19930         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
19931         (Block.Resolve): Resolve unreachable statements.
19933 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
19935         * expression.cs: We need to fix the case where we do
19936         not have a temp variable here.
19938         * assign.cs: Only expression compound assignments need
19939         temporary variables.
19941 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
19943         * flowanalysis.cs: Reduce memory allocation in a few ways:
19944           - A block with no variables should not allocate a bit
19945             vector for itself.
19946           - A method with no out parameters does not need any tracking
19947             for assignment of the parameters, so we need not allocate
19948             any data for it.
19949           - The arrays:
19950                 public readonly Type[] VariableTypes;
19951                 public readonly string[] VariableNames;
19952             Are redundant. The data is already stored in the variable
19953             map, so we need not allocate another array for it.
19954           - We need to add alot of checks for if (params | locals) == null
19955             due to the first two changes.
19957 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
19959         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
19960         implement IMemoryLocation, we store a copy on a local variable and
19961         take the address of it.  Patch from Benjamin Jemlich
19963         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
19964         to use a special "type_name_expression" rule which reduces the
19965         number of "QualifiedIdentifier" classes created, and instead
19966         directly creates MemberAccess expressions.
19968 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
19970         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
19971         that fixes #52853.  Null literal assignment to ValueType
19973         * class.cs (MethodData.Emit): Instead of checking the name of the
19974         method to determine if its a destructor, create a new derived
19975         class from Method called Destructor, and test for that.  
19977         * cs-parser.jay: Create a Destructor object instead of a Method.  
19979         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
19981         Fixes: 52933
19983 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
19985         * expression.cs (Binary.ResolveOperator): Perform an implicit
19986         conversion from MethodGroups to their delegate types on the
19987         Addition operation.
19989         * delegate.cs: Introduce a new class DelegateCreation that is the
19990         base class for `NewDelegate' and `ImplicitDelegateCreation',
19991         factor some code in here.
19993         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
19994         conversion from MethodGroups to compatible delegate types. 
19996         * ecore.cs (Expression.Resolve): Do not flag error 654
19997         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
19998         we allow conversions from MethodGroups to delegate types now.
20000         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
20001         assignments in v2 either.
20003 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
20005         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
20006         static read-only fields in ctors.
20008         Applied patch from Benjamin Jemlich 
20010         * expression.cs (UnaryMutator): Avoid leaking local variables. 
20012 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
20014         * cs-tokenizer.cs (IsCastToken): Allow the various native types
20015         here to return true, as they can be used like this:
20017                 (XXX) int.MEMBER ()
20019         Fixed 49836 and all the other dups
20021 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
20023         * driver.cs: Implement /win32res and /win32icon.
20025 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
20027         * cs-parser.jay: Add a rule to improve error handling for the
20028         common mistake of placing modifiers after the type.
20030 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
20032         * cs-parser.jay (interface_event_declaration): Catch
20033         initialization of events on interfaces, and report cs0068
20035         * cs-parser.jay (interface_event_declaration): Catch
20036         initialization of events. 
20038         * ecore.cs: Better report missing constructors.
20040         * expression.cs (Binary.ResolveOperator): My previous bug fix had
20041         the error reporting done in the wrong place.  Fix.
20043         * expression.cs (Binary.ResolveOperator): Catch the 
20044         operator + (E x, E y) error earlier, and later allow for implicit
20045         conversions in operator +/- (E e, U x) from U to the underlying
20046         type of E.
20048         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
20049         52596, if the container class is abstract, the default constructor
20050         is protected otherwise its public (before, we were always public).
20052         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
20053         fixed statement.
20055         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
20056         Jemlich that fixes bug #52597, MCS was generating invalid code for
20057         idisposable structs.   Thanks to Ben for following up with this
20058         bug as well.
20060 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
20062         * driver.cs: Allow assemblies without code to be generated, fixes
20063         52230.
20065 2004-01-07  Nick Drochak <ndrochak@gol.com>
20067         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
20069 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
20071         * cs-parser.jay: Add rules to improve error reporting if fields or
20072         methods are declared at the namespace level (error 116)
20074         * Add rules to catch event add/remove
20076 2004-01-04  David Sheldon <dave-mono@earth.li>
20078   * expression.cs: Added matching ")" to error message for 
20079   CS0077
20081 2004-01-03 Todd Berman <tberman@gentoo.org>
20083         * ecore.cs, attribute.cs:
20084         Applying fix from #52429.
20086 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20088         * ecore.cs, expression.cs, statement.cs:
20089         Total rewrite of how we handle branching. We
20090         now handle complex boolean expressions with fewer
20091         jumps. As well if (x == 0) no longer emits a ceq.
20093         if (x is Foo) is much faster now, because we generate
20094         better code.
20096         Overall, we get a pretty big improvement on our benchmark
20097         tests. The code we generate is smaller and more readable.
20099         I did a full two-stage bootstrap. The patch was reviewed
20100         by Martin and Miguel.
20102 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20104         * cs-parser.jay: Make primary_expression not take a QI.
20105         we dont need this because the member_access rule covers
20106         us here. So we replace the rule with just IDENTIFIER.
20108         This has two good effects. First, we remove a s/r conflict.
20109         Second, we allocate many fewer QualifiedIdentifier objects.
20111 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20113         * attribute.cs: Handle MarshalAs attributes as pseudo, and
20114         set the correct information via SRE. This prevents
20115         hanging on the MS runtime. Fixes #29374.
20117 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20119         * convert.cs: correctly handle conversions to value types
20120         from Enum and ValueType as unboxing conversions.
20122         Fixes bug #52569. Patch by Benjamin Jemlich.
20124 2004-01-02  Ravi Pratap  <ravi@ximian.com>
20126         * expression.cs (BetterConversion): Prefer int -> uint
20127         over int -> ulong (csc's behaviour). This fixed bug #52046.
20129 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
20131         * decl.cs (MemberCache.FindMembers): now returns a
20132         MemberInfo [].
20134         * typemanager.cs: In general, go with with ^^.
20135         (CopyNewMethods): take an IList.
20136         (RealMemberLookup): Only allocate an arraylist
20137         if we copy from two sets of methods.
20139         This change basically does two things:
20140         1) Fewer array lists allocated due to CopyNewMethods.
20141         2) the explicit cast in MemberList costed ALOT.
20143 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
20145         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
20146         a hashtable to avoid needless string allocations when an identifier is
20147         used more than once (the common case).
20149 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
20151         * pending.cs: MS's TypeBuilder.GetInterfaces ()
20152         is broken, it will not return anything. So, we
20153         have to use the information we have in mcs to
20154         do the task.
20156         * typemanager.cs: Add a cache for GetInterfaces,
20157         since this will now be used more often (due to ^^)
20159         (GetExplicitInterfaces) New method that gets the
20160         declared, not effective, interfaces on a type
20161         builder (eg, if you have interface IFoo, interface
20162         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
20163         { IBar }.
20165         This patch makes MCS able to bootstrap itself on
20166         Windows again.
20168 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
20170         * expression.cs: Remove the Nop's that Miguel put
20171         in by mistake.
20173 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20175         * report.cs, codegen.cs: Give the real stack trace to
20176         the error when an exception is thrown.
20178 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20180         * decl.cs: only allocate hashtables for ifaces if 
20181         it is an iface!
20183 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20185         * expression.cs: fix the error from cs0121-2.cs
20186         (a parent interface has two child interfaces that
20187         have a function with the same name and 0 params
20188         and the function is called through the parent).
20190 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
20192         * class.cs, rootcontext.cs, typmanager.cs: do not
20193         leak pointers.
20195 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
20197         * codegen.cs: remove stack for the ec flow branching.
20198         It is already a linked list, so no need.
20200 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
20202         * Makefile: Allow custom profiler here.
20204 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
20206         * typemanager.cs (LookupType):
20207           - Use a static char [], because split takes
20208             a param array for args, so it was allocating
20209             every time.
20210           - Do not store true in a hashtable, it boxes.
20212 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
20214         * flowanalysis.cs: bytify common enums.
20216 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20218         * modifiers.cs: Add a new set of flags for the
20219         flags allowed on explicit interface impls.
20220         * cs-parser.jay: catch the use of modifiers in
20221         interfaces correctly.
20222         * class.cs: catch private void IFoo.Blah ().
20224         All related to bug #50572.
20226 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20228         * decl.cs: Rewrite the consistant accessability checking.
20229         Accessability is not linear, it must be implemented in
20230         a tableish way. Fixes #49704.
20232 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20234         * expression.cs: Handle negation in a checked context.
20235         We must use subtraction from zero. Fixes #38674.
20237 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
20239         * class.cs: Ignore static void main in DLLs.
20240         * rootcontext.cs: Handle the target type here,
20241         since we are have to access it from class.cs
20242         * driver.cs: account for the above.
20244 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
20246         * report.cs: Give line numbers and files if available.
20248 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
20250         * driver.cs: Implement /addmodule.
20252         * typemanager.cs:  Change 'modules' field so it now contains Modules not
20253         ModuleBuilders.
20255 2003-12-20  Martin Baulig  <martin@ximian.com>
20257         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
20258         (FieldBase.IsAssigned): Removed this field.
20259         (FieldBase.SetAssigned): New public method.
20260         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
20262 2003-12-20  Martin Baulig  <martin@ximian.com>
20264         * expression.cs (LocalVariableReference.DoResolve): Don't set
20265         `vi.Used' if we're called from DoResolveLValue().
20267         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
20268         returns the usage vector it just merged into the current one -
20269         pass this one to UsageWarning().
20270         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
20271         of the `EmitContext', don't call this recursively on our children.
20273 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
20275         * driver.cs: Implement /target:module.
20277 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
20279         * support.cs (CharArrayHashtable): New helper class.
20281         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
20282         char arrays, not strings, so we can avoid creating a string in
20283         consume_identifier if the identifier is a keyword.
20285 2003-12-16  Martin Baulig  <martin@ximian.com>
20287         * statement.cs (LocalInfo.Assigned): Removed this property.
20288         (LocalInfo.Flags): Removed `Assigned'.
20289         (LocalInfo.IsAssigned): New public method; takes the EmitContext
20290         and uses flow analysis.
20291         (Block.UsageWarning): Made this method private.
20292         (Block.Resolve): Call UsageWarning() if appropriate.
20294         * expression.cs (LocalVariableReference.DoResolve): Always set
20295         LocalInfo.Used here.
20297 2003-12-13  Martin Baulig  <martin@ximian.com>
20299         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
20300         any value here; we're now using flow analysis to figure out
20301         whether a statement/block returns a value.
20303 2003-12-13  Martin Baulig  <martin@ximian.com>
20305         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
20306         working again.
20307         (FlowBranching.MergeFinally): Don't call
20308         `branching.CheckOutParameters()' here, this is called in
20309         MergeTopBlock().
20310         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
20311         when adding the `finally' vector.       
20313 2003-12-13  Martin Baulig  <martin@ximian.com>
20315         * flowanalysis.cs
20316         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
20317         actually work and also fix #48962.
20319 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
20321         * decl.cs: Do not check System.Object for nested types,
20322         since we know it does not have any. Big bang for buck:
20324         BEFORE:
20325            Run 1:   8.35 seconds
20326            Run 2:   8.32 seconds
20327            corlib:  17.99 seconds
20328         AFTER:
20329            Run 1:   8.17 seconds
20330            Run 2:   8.17 seconds
20331            corlib:  17.39 seconds
20333 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
20335         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
20336         time we are returning 0 members, so we save alot here.
20338 2003-12-11  Martin Baulig  <martin@ximian.com>
20340         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
20341         `MergeChild()', also just take the `FlowBranching' as argument;
20342         call Merge() on it and return the result.
20343         (FlowBranching.Merge): We don't need to do anything if we just
20344         have one sibling.
20346 2003-12-11  Martin Baulig  <martin@ximian.com>
20348         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
20349         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
20350         Maurer for this idea.
20352 2003-12-11  Martin Baulig  <martin@ximian.com>
20354         * flowanalysis.cs (MergeResult): This class is now gone; we now
20355         use the `UsageVector' for this.  The reason for this is that if a
20356         branching just has one sibling, we don't need to "merge" them at
20357         all - that's the next step to do.
20358         (FlowBranching.Merge): We now return a `UsageVector' instead of a
20359         `MergeResult'.
20361 2003-12-11  Martin Baulig  <martin@ximian.com>
20363         Reworked flow analyis and made it more precise and bug-free.  The
20364         most important change is that we're now using a special `Reachability'
20365         class instead of having "magic" meanings of `FlowReturns'.  I'll
20366         do some more cleanups and optimizations and also add some more
20367         documentation this week.
20369         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
20370         largely reworked this class.
20371         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
20372         the new `Reachability' class instead of having "magic" values here.
20373         (FlowBranching): We're now using an instance of `Reachability'
20374         instead of having separate `Returns', `Breaks' etc. fields.
20376         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
20377         based on flow analysis; ignore the return value of block.Emit ().
20379 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
20381         * driver.cs typemanager.cs: Find the mono extensions to corlib even
20382         if they are private.
20384 2003-12-09  Martin Baulig  <martin@ximian.com>
20386         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
20387         call them directly on the UsageVector.
20389 2003-12-09  Martin Baulig  <martin@ximian.com>
20391         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
20392         Changed return type from `FlowReturns' to `Reachability'.
20394 2003-12-09  Martin Baulig  <martin@ximian.com>
20396         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
20397         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
20398         `Reachable' fields with a single `Reachability' one.
20400 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20402         * class.cs (FindMembers): Remove foreach's.
20404         Bootstrap times:
20406         BEFORE
20407                 Run 1:   8.74 seconds
20408                 Run 2:   8.71 seconds
20410         AFTER
20411                 Run 1:   8.64 seconds
20412                 Run 2:   8.58 seconds
20415 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20417         * cs-parser.jay:
20418         * gen-treedump.cs:
20419         * statement.cs:
20420         This patch does a few things:
20421                 1. EmptyStatement is now a singleton, so it is never reallocated.
20422                 2. All blah is EmptyStatement constructs have been changed to
20423                    blah == EmptyStatement.Value, which is much faster and valid
20424                    now that EmptyStatement is a singleton.
20425                 3. When resolving a block, rather than allocating a new array for
20426                    the non-empty statements, empty statements are replaced with
20427                    EmptyStatement.Value
20428                 4. Some recursive functions have been made non-recursive.
20429         Mainly the performance impact is from (3), however (1) and (2) are needed for
20430         this to work. (4) does not make a big difference in normal situations, however
20431         it makes the profile look saner.
20433         Bootstrap times:
20435         BEFORE
20436         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
20437         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
20438         Total memory allocated: 56397 KB
20440         AFTER
20441         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
20442         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
20443         Total memory allocated: 55666 KB
20445 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20447         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
20448         than the hashtable in a hashtable version
20450         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
20451         we always end up concating a string. This results in a huge perf
20452         loss, because many strings have to be tracked by the GC. In this
20453         patch, we first use a hashtable that works with two keys, so that
20454         the strings do not need to be concat'ed.
20456         Bootstrap times:
20457         BEFORE
20458                 Run 1:   8.74 seconds
20459                 Run 2:   8.71 seconds
20461         AFTER
20462                 Run 1:   8.65 seconds
20463                 Run 2:   8.56 seconds
20465 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20467         * Makefile: Add a new target `do-time' that does a quick and simple
20468         profile, leaving easy to parse output.
20470 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
20472         * codegen.cs (Init): Create the dynamic assembly with 
20473         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
20475 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
20477         * support.cs: Make the PtrHashtable use only one
20478         instance of its comparer.
20480 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
20482         * typemanager.cs: Fix lookup of GetNamespaces.
20484 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
20486         * expression.cs: Removed redundant line.
20488         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
20489         ArrayLists, use for loops with bounds.  
20491         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
20492         arraylist.
20494         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
20495         arraylists, use for loop with bounds.
20497         The above three changes give us a 0.071 second performance
20498         improvement out of 3.294 seconds down to 3.223.  On my machine
20499         the above changes reduced the memory usage by 1,387 KB during
20500         compiler bootstrap.
20502         * cs-parser.jay (QualifiedIdentifier): New class used to represent
20503         QualifiedIdentifiers.  Before we created a new string through
20504         concatenation, and mostly later on, the result would be
20505         manipulated by DecomposeQI through string manipulation.
20507         This reduced the compiler memory usage for bootstrapping from
20508         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
20509         compile times in 0.05 seconds.
20511 2003-11-28  Dick Porter  <dick@ximian.com>
20513         * support.cs: Do string compares with the Invariant culture.
20515         * rootcontext.cs: 
20516         * gen-treedump.cs: 
20517         * expression.cs: 
20518         * driver.cs: 
20519         * decl.cs: 
20520         * codegen.cs: 
20521         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
20522         the comparison is done with the Invariant culture.
20524 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
20526         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
20527         GetEnumerator method.
20529         (ProbeCollectionType): Iterate starting at the most specific type
20530         upwards looking for a GetEnumerator
20532         * expression.cs: Shift count can be up to 31 for int/uint and 63
20533         for long/ulong.
20535 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
20537         * statement.cs (Block.LookupLabel): Also look for the label on the
20538         children blocks.  Use a hash table to keep track of visited
20539         nodes. 
20541         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
20542         we actually did transform the other operand, otherwise fall back
20543         to the common codepath that casts to long.
20545         * cs-tokenizer.cs: Use the same code pattern as the int case.
20546         Maybe I should do the parsing myself, and avoid depending on the
20547         Parse routines to get this done.
20549 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
20551         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
20552         which fixes bug 51347.  This time test it.
20554         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
20555         attributes for example can not tell the difference between these.
20556         The difference was only a syntax feature of the language. 
20558         * attribute.cs: Apply attributes to delegates.
20560         * delegate.cs: Call the apply attributes method.
20562 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
20564         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
20565         comparing 0 vs Byte.MinValue, not the value
20567         (ImplicitConversionRequired): When reporting a conversion error,
20568         use error 31 to print out the constant error instead of the
20569         simpler 29.
20571         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
20572         which fixes bug 51347.
20574 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
20576         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
20577         which fixes the -warnaserror command line option.
20579 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
20581         * cfold.cs (DoNumericPromotions): During constant folding of
20582         additions on UIntConstant, special case intconstants with
20583         IntConstants like we do on the expression binary operator. 
20585 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
20587         * convert.cs (ImplicitReferenceConversion): We were missing a case
20588         (System.Enum are not value types or class types, so we need to
20589         classify them separatedly).
20591         * driver.cs: We do not support error 2007.
20593 2003-11-12 Jackson Harper <jackson@ximian.com>
20595         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
20596         system directory. Also use the full file name so users can
20597         libraries names mscorlib-o-tron.dll in a non system dir.
20599 2003-11-10  Martin Baulig  <martin@ximian.com>
20601         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
20602         (TypeManager.InitCoreTypes): Initialize them here, but instead of
20603         calling `ResolveType()' on them, directly assign their `Type'.
20605 2003-11-08  Martin Baulig  <martin@ximian.com>
20607         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
20608         return value and the `out parent' parameter.
20609         (TypeContainer.DefineType): Moved the CS0644 check into
20610         GetClassBases().  Don't pass the interface types to the
20611         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
20612         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
20614         * ecore.cs (TypeExpr.IsAttribute): New property.
20615         (TypeExpr.GetInterfaces): New method.
20617         * interface.cs (Interface.GetInterfaceTypeByName): Return a
20618         TypeExpr instead of a Type.
20619         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
20620         (Interface.DefineType): Don't pass the interface types to the
20621         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
20622         them later and then call `TypeBulider.AddInterfaceImplementation()'.
20624         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
20625         instead of a `Type[]'.
20626         (TypeManager.RegisterBuilder): Likewise.
20627         (TypeManager.AddUserInterface): Likewise.
20628         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
20629         `Type[]' and also return a `TypeExpr[]'.
20630         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
20632 2003-11-08  Martin Baulig  <martin@ximian.com>
20634         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
20635         Expression.     
20637 2003-11-08  Martin Baulig  <martin@ximian.com>
20639         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
20640         TypeManager.ResolveExpressionTypes().
20642         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
20643         instead of an Expression.
20644         (TypeExpr): This is now an abstract base class for `TypeExpression'.
20645         (TypeExpression): New public class; formerly known as `TypeExpr'.
20647         * expression.cs (ComposedCast): Derive from TypeExpr.
20649         * typemanager.cs (TypeManager.system_*_expr): These are now
20650         TypExpr's instead of Expression's.
20651         (TypeManager.ResolveExpressionTypes): New public static function;
20652         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
20653         of them.        
20655 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
20657         * expression.cs (New.DoResolve): Do not dereference value that
20658         might be a null return.
20660         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
20661         sure that the constant value has the right type.  Fixes an
20662         unreported bug, similar to 50425.
20664         * const.cs (Const.LookupConstantValue): Call
20665         ImplicitStandardConversionExists before doing a conversion to
20666         avoid havng the TypeManager.ChangeType do conversions.
20668         Reduced the number of casts used
20670         (Const.ChangeType): New routine to enable reuse of the constant
20671         type changing code from statement.
20673         * typemanager.cs (ChangeType): Move common initialization to
20674         static global variables.
20676         Fixes #50425.
20678         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
20679         every value type to go through, even if it was void.  Fix that. 
20681         * cs-tokenizer.cs: Use is_identifier_start_character on the start
20682         character of the define, and the is_identifier_part_character for
20683         the rest of the string.
20685 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
20687         * expression.cs (UnaryMutator.EmitCode): When I updated
20688         LocalVariableReference.DoResolve, I overdid it, and dropped an
20689         optimization done on local variable references.
20691 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
20693         * ecore.cs: Convert the return from Ldlen into an int.
20695 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
20697         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
20698         the accessibility, this is a special case for toplevel non-public
20699         classes (internal for instance).
20701 2003-10-20  Nick Drochak <ndrochak@gol.com>
20703         * ecore.cs: Fix typo and build.  Needed another right paren.
20705 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
20707         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
20708         `internal' case regular and protected, but not allowing protected
20709         to be evaluated later.  Bug 49840
20711 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
20713         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
20714         to kb.Nlast, and not the kb.nFirst to isolate the switch
20715         statement.
20717         Extract the underlying type, so enumerations of long/ulong are
20718         treated like long/ulong.
20720 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
20722         * expression.cs (New): Overload the meaning of RequestedType to
20723         track the possible creation of the NewDelegate type, since
20724         DoResolve is invoked more than once for new constructors on field
20725         initialization.
20727         See bugs: #48800 and #37014
20729         * cs-parser.jay (declare_local_constants): Take an arraylist
20730         instead of a single constant.
20732         (local_constant_declaration): It should take a
20733         constant_declarators, not a constant_declarator.  Fixes 49487
20735         * convert.cs: Fix error report.
20737 2003-10-13 Jackson Harper <jackson@ximian.com>
20739         * typemanager.cs (TypeToCoreType): Add float and double this fixes
20740         bug #49611
20742 2003-10-09  Martin Baulig  <martin@ximian.com>
20744         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
20745         to the .ctor.
20746         (MethodCore.DoDefineParameters): Removed the TypeContainer
20747         argument; use the DeclSpace which was passed to the .ctor instead.
20748         (MethodCore.CheckParameter): Take a DeclSpace instead of a
20749         TypeContainer; we only need a DeclSpace here.
20751 2003-10-09  Martin Baulig  <martin@ximian.com>
20753         * class.cs (MethodData): Added additional `DeclSpace ds' argument
20754         to the .ctor.
20755         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
20756         EmitContext's .ctor.    
20758 2003-10-09  Martin Baulig  <martin@ximian.com>
20760         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
20761         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
20762         AsAccessible(), moved them as well.
20764         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
20766 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
20768         * cs-parser.jay : Renamed yyName to yyNames related to jay.
20770 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
20772         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
20773         generation for >=, as spotted by Paolo, bug 48679.  
20774         Patch from David Waite.
20776         * cs-tokenizer.cs: Add handling for #pragma.
20778         * cs-parser.jay: Allow for both yield and yield return in the
20779         syntax.  The anti-cobolization of C# fight will go on!
20781         * class.cs (TypeBuilder.DefineType): Catch error condition here
20782         (Parent.DefineType erroring out and returning null).
20784         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
20785         coping with enumerations variables, we were mistakenly processing
20786         them as a regular value type instead of built-in types.  Fixes the
20787         bug #48063
20789         * typemanager.cs (IsBuiltinOrEnum): New method.
20791 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
20793         * cs-parser.jay: Upgrade: yield now needs the return clause.
20795 2003-09-19  Martin Baulig  <martin@ximian.com>
20797         * decl.cs (MemberCache.SetupCacheForInterface): Take a
20798         `MemberCache parent' argument.  Normally, an interface doesn't
20799         have a parent type except System.Object, but we use this in gmcs
20800         for generic type parameters.
20802 2003-09-18  Martin Baulig  <martin@ximian.com>
20804         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
20805         on `type.IsInterface'; don't check whether the type has a parent
20806         to determine whether it's an interface.
20808 2003-09-15  Martin Baulig  <martin@ximian.com>
20810         * class.cs (TypeContainer.DefineType): Added an error flag to
20811         avoid reporting duplicate CS0146's ("class definition is
20812         circular.").
20814         * driver.cs (Driver.MainDriver): Abort if
20815         RootContext.ResolveTree() reported any errors.
20817 2003-09-07  Martin Baulig  <martin@ximian.com>
20819         * report.cs (Error, Warning): Added overloaded versions which take
20820         a `params object[] args' and call String.Format().
20822 2003-09-07  Martin Baulig  <martin@ximian.com>
20824         * decl.cs (DeclSpace..ctor): Don't call
20825         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
20826         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
20827         (DeclSpace.RecordDecl): New method.
20829         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
20831 2003-09-02  Ravi Pratap  <ravi@ximian.com>
20833         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
20834         value attributes to be applied to ParameterBuilders.
20836         * class.cs (MethodCore.LabelParameters): Make static and more
20837         generic so that it can be used from other places - like interface
20838         methods, for instance.
20840         * interface.cs (Interface.Emit): Call LabelParameters before
20841         emitting attributes on the InterfaceMethod.
20843 2003-08-26  Martin Baulig  <martin@ximian.com>
20845         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
20846         resolving aliases; fixes #47927.
20848 2003-08-26  Martin Baulig  <martin@ximian.com>
20850         * statement.cs (Using.DoResolve): This is internally emitting a
20851         try/finally clause, so we need to set ec.NeedExplicitReturn if we
20852         do not always return.  Fixes #47681.
20854 2003-08-26  Martin Baulig  <martin@ximian.com>
20856         * decl.cs (MemberCore): Moved WarningNotHiding(),
20857         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
20858         into MemberBase.
20859         (AdditionResult): Make this nested in DeclSpace.
20860         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
20861         argument; call NamespaceEntry.Define() unless we're nested in a
20862         class or struct.
20864         * namespace.cs (Namespace.DefineName): New public function.  This
20865         is called from DeclSpace's .ctor to add 
20866         (Namespace.Lookup): Include DeclSpaces in the lookup.
20868         * class.cs (Operator): Derive from MemberBase, not MemberCore.
20870         * const.cs (Const): Derive from MemberBase, not MemberCore.     
20872 2003-08-25  Martin Baulig  <martin@ximian.com>
20874         * convert.cs (Convert.ExplicitReferenceConversion): When
20875         converting from an interface type to a class, unbox if the target
20876         type is a struct type.  Fixes #47822.
20878 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20880         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
20881         #47854.
20883 2003-08-22  Martin Baulig  <martin@ximian.com>
20885         * class.cs (TypeManager.DefineType): When defining a nested type,
20886         call DefineType() on our parent; fixes #47801.
20888 2003-08-22  Martin Baulig  <martin@ximian.com>
20890         * class.cs (MethodData.Define): While checking if a method is an
20891         interface implementation, improve the test a bit more to fix #47654.
20893 2003-08-22  Martin Baulig  <martin@ximian.com>
20895         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
20896         correctly; fixes #47722.
20898 2003-08-22  Martin Baulig  <martin@ximian.com>
20900         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
20901         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
20903         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
20905 2003-08-22  Martin Baulig  <martin@ximian.com>
20907         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
20908         can only be assigned in static constructors.  Fixes #47161.
20910 2003-08-22  Martin Baulig  <martin@ximian.com>
20912         Rewrote and improved the flow analysis code.
20914         * flowbranching.cs (FlowBranching): Make this class abstract.
20915         (FlowBranching.CreateBranching): New static function to create a
20916         new flow branching.
20917         (FlowBranchingBlock, FlowBranchingException): New classes.
20918         (FlowBranching.UsageVector.Type): New public readonly field.
20919         (FlowBranching.UsageVector.Breaks): Removed the setter.
20920         (FlowBranching.UsageVector.Returns): Removed the setter.
20921         (FlowBranching.UsageVector): Added Break(), Return(),
20922         NeverReachable() and Throw() methods to modify the reachability.
20923         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
20924         done by FlowBranching.Merge().
20925         (FlowBranching.UsageVector.MergeChild): New method; merges the
20926         merge result into the current vector.
20927         (FlowBranching.Merge): New abstract method to merge a branching.
20929 2003-08-12  Martin Baulig  <martin@ximian.com>
20931         * expression.cs (Indirection.CacheTemporaries): Create the
20932         LocalTemporary with the pointer type, not its element type.
20934 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
20936         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
20937         token was a keyword or not.
20939         Add `error' options where an IDENTIFIER was expected;  Provide
20940         CheckToken and CheckIdentifierToken convenience error reporting
20941         functions. 
20943         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
20945         * decl.cs: Rename `NamespaceEntry Namespace' public field into
20946         NameSpaceEntry NameSpaceEntry.
20948         (LookupInterfaceOrClass): Avoid creating a full qualified name
20949         from namespace and name: avoid doing lookups when we know the
20950         namespace is non-existant.   Use new Tree.LookupByNamespace which
20951         looks up DeclSpaces based on their namespace, name pair.
20953         * driver.cs: Provide a new `parser verbose' to display the
20954         exception thrown during parsing.  This is turned off by default
20955         now, so the output of a failure from mcs is more graceful.
20957         * namespace.cs: Track all the namespaces defined in a hashtable
20958         for quick lookup.
20960         (IsNamespace): New method
20962 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
20964         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
20965         we know that we need to concatenate (full typename can never be
20966         null). 
20968         * class.cs: ditto.
20970         * statement.cs: Use a bitfield;  Do not initialize to null things
20971         which are done by the constructor by default.
20973         * cs-parser.jay: bug fix, parameter was 4, not 3.
20975         * expression.cs: Just use the property;
20977         * statement.cs: No need for GetVariableInfo method.
20979 2003-08-08  Martin Baulig  <martin@ximian.com>
20981         * flowanalysis.cs (FlowReturns): This is now nested in the
20982         `FlowBranching' class.
20983         (MyBitVector): Moved this here from statement.cs.
20984         (FlowBranching.SiblingType): New enum type.
20985         (FlowBranching.CreateSibling): Added `SiblingType' argument.
20987 2003-08-07  Martin Baulig  <martin@ximian.com>
20989         * flowanalysis.cs (FlowBranchingType): This is now nested in the
20990         `FlowBranching' class and called `BranchingType'.
20992 2003-08-07  Martin Baulig  <martin@ximian.com>
20994         * flowanalysis.cs: Moved all the control flow analysis code into
20995         its own file.
20997 2003-08-07  Martin Baulig  <martin@ximian.com>
20999         * assign.cs (Assign.DoResolve): `target' must either be an
21000         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
21001         #37319.
21003 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
21005         * expression.cs (BinaryMethod): This kind of expression is created by the
21006         Binary class if it determines that the operator has to be handled
21007         by a method.
21009         (BinaryDelegate): This kind of expression is created if we are
21010         dealing with a + or - operator on delegates.
21012         (Binary): remove method, argumetns, and DelegateOperator: when
21013         dealing with methods, 
21015         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
21017         * statement.cs (Block): use bitfields for the three extra booleans
21018         we had in use.   Remove unused topblock parameter.
21020         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
21022         * assign.cs: Drop extra unneeded tests.
21024 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
21026         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
21028         * statement.cs (Foreach): Use VariableStorage instead of
21029         LocalBuilders.   
21031         * codegen.cs (VariableStorage): New class used by clients that
21032         require a variable stored: locals or fields for variables that
21033         need to live across yield.
21035         Maybe provide a convenience api for EmitThis+EmitLoad?
21037         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
21038         these bad boys.
21040 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
21042         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
21043         RemapParameterLValue): New methods that are used to turn a
21044         precomputed FieldInfo into an expression like this:
21046                 instance.FieldInfo
21048         The idea is to use this instead of making LocalVariableReference
21049         have more than one meaning.
21051         * cs-parser.jay: Add error production to BASE.
21053         * ecore.cs: Deal with TypeManager.GetField returning null, which
21054         is now a valid return value.
21056         (FieldExprNoAddress): New expression for Fields whose address can
21057         not be taken.
21059         * expression.cs (LocalVariableReference): During the resolve
21060         phases, create new expressions if we are in a remapping context.
21061         Remove code that dealt with remapping here.
21063         (ParameterReference): same.
21065         (ProxyInstance): New expression, like the `This' expression, but
21066         it is born fully resolved.  We know what we are doing, so remove
21067         the errors that are targeted to user-provided uses of `this'.
21069         * statement.cs (Foreach): our variable is now stored as an
21070         Expression;  During resolution, follow the protocol, dont just
21071         assume it will return this.
21073 2003-08-06  Martin Baulig  <martin@ximian.com>
21075         * support.cs (SeekableStreamReader.cs): New public class.
21077         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
21078         SeekableStreamReader instead of the normal StreamReader.
21080 2003-08-04  Martin Baulig  <martin@ximian.com>
21082         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
21083         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
21084         deambiguate casts and delegate invocations.
21085         (parenthesized_expression): Use the new tokens to ensure this is
21086         not a cast of method invocation.
21088         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
21089         when reading a `)' and Deambiguate_CloseParens () was previously
21090         called.
21092         * expression.cs (ParenthesizedExpression): New class.  This is
21093         just used for the CS0075 test.
21094         (Binary.DoResolve): Check for CS0075.   
21096 2003-07-29  Ravi Pratap  <ravi@ximian.com>
21098         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
21099         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
21100         reference comparison.
21102         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
21103         examine the ReturnType for equality - this is necessary in the
21104         cases of implicit and explicit operators whose signature also
21105         includes the return type.
21107 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
21109         * namespace.cs: Cache the result of the namespace computation,
21110         instead of computing it every time.
21112 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
21114         * decl.cs: Use a global arraylist that we reuse over invocations
21115         to avoid excesive memory consumption.  Reduces memory usage on an
21116         mcs compile by one meg (45 average).
21118         * typemanager.cs (LookupTypeReflection): In .NET pointers are
21119         private, work around that.
21121 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
21123         * literal.cs (IntLiteral): Define Zero and One static literals. 
21125         * cs-parser.jay (integer_literal): use static literals to reduce
21126         memory usage for the most used literals (0, 1 and -1).  211kb
21127         reduced in memory usage.
21129         Replace all calls to `new ArrayList' with `new
21130         ArrayList(4)' which is a good average number for most allocations,
21131         and also requires only 16 bytes of memory for its buffer by
21132         default. 
21134         This reduced MCS memory usage in seven megabytes for the RSS after
21135         bootstrapping.
21137 2003-07-28  Ravi Pratap  <ravi@ximian.com>
21139         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
21140         handle params methods the correct way by forming only one
21141         applicable set with params and normal methods in them. Earlier we
21142         were looking at params methods only if we found no normal methods
21143         which was not the correct thing to do.
21145         (Invocation.BetterFunction): Take separate arguments indicating
21146         when candidate and the best method are params methods in their
21147         expanded form.
21149         This fixes bugs #43367 and #46199.
21151         * attribute.cs: Documentation updates.
21153         (CheckAttribute): Rename to CheckAttributeTarget.
21154         (GetValidPlaces): Rename to GetValidTargets.
21156         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
21157         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
21159         Fixes bug #44468.
21161 2003-07-28  Martin Baulig  <martin@ximian.com>
21163         * class.cs (TypeContainer.DefineMembers): Use the base type's full
21164         name when looking up the base class of a nested class.  Fixes #46977.
21166 2003-07-26  Martin Baulig  <martin@ximian.com>
21168         * expression.cs (Indexers.Indexer): New nested struct; contains
21169         getter, setter and the indexer's type.
21170         (Indexers.Properties): This is now an ArrayList of
21171         Indexers.Indexer's.
21172         (IndexerAccess.DoResolveLValue): Correctly set the type if the
21173         indexer doesn't have any getters.
21175         * assign.cs (Assign.DoResolve): Also do the implicit conversions
21176         for embedded property and indexer assignments.
21178 2003-07-26  Martin Baulig  <martin@ximian.com>
21180         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
21181         preprocessor directive is not the first non-whitespace character
21182         on a line.
21184 2003-07-26  Martin Baulig  <martin@ximian.com>
21186         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
21187         namespace parsing, follow the spec more closely.
21189         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
21190         NamespaceEntry.Lookup().
21192 2003-07-25  Martin Baulig  <martin@ximian.com>
21194         * MethodCore.cs (OverridesSomething): New public field; it's set
21195         from TypeContainer.DefineMembers if this method overrides
21196         something (which doesn't need to be a method).  Fix #39462.
21198 2003-07-25  Ravi Pratap  <ravi@ximian.com>
21200         * typemanager.cs (GetMembers): Ensure that the list of members is
21201         reversed. This keeps things in sync.
21203         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
21204         find an AttributeUsage attribute.
21206         * expression.cs (Invocation.OverloadResolve): Perform the check
21207         which disallows Invoke to be directly called on a Delegate.
21209         (Error_InvokeOnDelegate): Report error cs1533.
21211 2003-07-25  Martin Baulig  <martin@ximian.com>
21213         * expression.cs (Indexers.GetIndexersForType): Only look in the
21214         interface hierarchy if the requested type is already an
21215         interface.  Fixes #46788 while keeping #46502 fixed.
21217 2003-07-25  Martin Baulig  <martin@ximian.com>
21219         * class.cs (TypeContainer.DefineMembers): Check whether all
21220         readonly fields have been assigned and report warning CS0649 if
21221         not.
21223         * statement.cs (LocalInfo.IsFixed): Always return true if this is
21224         a valuetype.
21226 2003-07-24  Ravi Pratap  <ravi@ximian.com>
21228         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
21229         returned from GetMethods to make things consistent with the
21230         assumptions MCS makes about ordering of methods.
21232         This should comprehensively fix bug #45127 and it does :-)
21234         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
21235         ordering is actually reverse.
21237         * Clean up some debug messages I left lying around.
21239         * interface.cs (Populate*): Get rid of code which emits attributes
21240         since the stage in which we emit attributes is the 'Emit' stage,
21241         not the define stage.
21243         (Emit): Move attribute emission for interface members here.
21245 2003-07-22  Ravi Pratap  <ravi@ximian.com>
21247         * expression.cs (Invocation.OverloadResolve): Follow the spec more
21248         closely: we eliminate methods in base types when we have an
21249         applicable method in a top-level type.
21251         Please see section 14.5.5.1 for an exact description of what goes
21252         on. 
21254         This fixes bug #45127 and a host of other related to corlib compilation.
21256         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
21257         array is the method corresponding to the top-level type (this is
21258         because of the changes made to icall.c) so we change this
21259         accordingly.
21261         (MethodGroupExpr.Name): This too.
21263         * typemanager.cs (GetElementType): New method which does the right
21264         thing when compiling corlib. 
21266         * everywhere: Make use of the above in the relevant places.
21268 2003-07-22  Martin Baulig  <martin@ximian.com>
21270         * cs-parser.jay (invocation_expression): Moved
21271         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
21272         `cast_expression', but create a InvocationOrCast which later
21273         resolves to either an Invocation or a Cast.
21275         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
21276         method; call this before EmitStatement() to make sure that this
21277         expression can be used as a statement.
21279         * expression.cs (InvocationOrCast): New class; resolves to either
21280         an Invocation or a Cast.
21282         * statement.cs (StatementExpression): Call ResolveStatement() on
21283         the ExpressionStatement before emitting it.
21285 2003-07-21  Martin Baulig  <martin@ximian.com>
21287         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
21288         `ref' and `out' attributes match; fixes #46220.
21289         (MemberAccess.ResolveMemberAccess): You can't reference a type
21290         through an expression; fixes #33180.
21291         (Indexers.GetIndexersForType): Don't return the indexers from
21292         interfaces the class implements; fixes #46502.
21294 2003-07-21  Martin Baulig  <martin@ximian.com>
21296         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
21297         CS0661 checks; fixes bug #30442.
21299 2003-07-21  Martin Baulig  <martin@ximian.com>
21301         * decl.cs (AdditionResult): Added `Error'.
21303         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
21305         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
21306         makes cs0031.cs actually work.
21308 2003-07-20  Martin Baulig  <martin@ximian.com>
21310         * namespace.cs: Fixed that bug which caused a crash when compiling
21311         the debugger's GUI.
21313 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
21315         * typemanager.cs (LookupTypeReflection): Never expose types which
21316         are NotPublic, NestedPrivate, NestedAssembly, or
21317         NestedFamANDAssem.  We used to return these, and later do a check
21318         that would report a meaningful error, but the problem is that we
21319         would not get the real match, if there was a name override.
21321 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
21323         * namespace.cs (Namespace, Name): Do not compute the namespace
21324         name dynamically, compute it in the constructor.  This reduced
21325         memory usage by 1697 KB.
21327         * driver.cs: Use --pause to pause at the end.
21329 2003-07-17  Peter Williams  <peter@newton.cx>
21331         * Makefile: Change the name of the test target so that it doesn't
21332         conflict with the recursive test target.
21334 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
21336         * expression.cs (LocalVariableReference.Emit, EmitAssign,
21337         AddressOf): Do not use EmitThis, that was wrong, use the actual
21338         this pointer.
21340 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
21342         * class.cs (MethodData.Define): While checking if a method is an
21343         interface implementation, improve the test: If we are not public
21344         (use new test here: use the computed MethodAttributes directly,
21345         instead of the parsed modifier flags) check if the `implementing'
21346         method comes from an interface or not.
21348         * pending.cs (VerifyPendingMethods): Slightly better error
21349         message.
21351         * makefile: add test target that does the mcs bootstrap.
21353 2003-07-16  Ravi Pratap  <ravi@ximian.com>
21355         * interface.cs (Define): Do nothing here since there are no
21356         members to populate etc. Move the attribute emission out of here
21357         since this was just totally the wrong place to put it. Attribute
21358         application happens during the 'Emit' phase, not in the 'Define'
21359         phase.
21361         (Emit): Add this method and move the attribute emission here
21363         * rootcontext.cs (EmitCode): Call the Emit method on interface
21364         types too.
21366 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
21368         * expression.cs (OverloadResolve): Report error only if Location
21369         is not 'Null' which means that there was a probe going on.
21371 2003-07-14  Martin Baulig  <martin@ximian.com>
21373         * expression.cs (ConditionalLogicalOperator): New public class to
21374         implement user defined conditional logical operators.
21375         This is section 14.11.2 in the spec and bug #40505.
21377 2003-07-14  Martin Baulig  <martin@ximian.com>
21379         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
21381 2003-07-14  Martin Baulig  <martin@ximian.com>
21383         * codegen.cs (EmitContext.InFixedInitializer): New public field.
21385         * ecore.cs (IVariable.VerifyFixed): New interface method.
21387         * expression.cs (Unary.ResolveOperator): When resolving the `&'
21388         operator, check whether the variable is actually fixed.  Fixes bug
21389         #36055.  Set a variable definitely assigned when taking its
21390         address as required by the spec.
21392         * statement.cs (LocalInfo.IsFixed): New field.
21393         (LocalInfo.MakePinned): Set `IsFixed' to true.
21395 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
21397         * attribute.cs (Attribute.Resolve): While doing a Member lookup
21398         for .ctors, ensure that we only ask for members declared in the
21399         attribute type (BindingFlags.DeclaredOnly).
21401         Fixes bug #43632.
21403         * expression.cs (Error_WrongNumArguments): Report error 1501
21404         correctly the way CSC does.
21406 2003-07-13  Martin Baulig  <martin@ximian.com>
21408         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
21409         lookup on the fully qualified name, to make things like "X.X" work
21410         where "X.X" is a fully qualified type name, but we also have a
21411         namespace "X" in the using list.  Fixes #41975.
21413 2003-07-13  Martin Baulig  <martin@ximian.com>
21415         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
21416         function. If we're a CompoundAssign, we need to create an embedded
21417         CompoundAssign, not an embedded Assign.
21418         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
21419         Fixes #45854.
21421 2003-07-13  Martin Baulig  <martin@ximian.com>
21423         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
21424         work to fix bug #46088.
21426 2003-07-13  Ravi Pratap <ravi@ximian.com>
21428         * class.cs (Operator.Emit): Do not emit attributes here - it is
21429         taken care of by the Method class that we delegate too. This takes
21430         care of bug #45876.
21432 2003-07-10  Martin Baulig  <martin@ximian.com>
21434         * expression.cs (TypeOfVoid): New class.
21435         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
21437 2003-07-10  Martin Baulig  <martin@ximian.com>
21439         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
21440         bug #35957.
21442 2003-07-10  Martin Baulig  <martin@ximian.com>
21444         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
21445         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
21447         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
21449         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
21451 2003-07-10  Martin Baulig  <martin@ximian.com>
21453         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
21454         of decimal.  Fixes #42850.
21456         NOTE: I also fixed the created byte blob, but this doesn't work on
21457         the MS runtime and csc never produces any byte blobs for decimal
21458         arrays.
21460 2003-07-10  Martin Baulig  <martin@ximian.com>
21462         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
21463         structs; fixes #32068.
21464         (Block.AddChildVariableNames): Fixed #44302.
21466 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21468         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
21470 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21472         * attribute.cs: And this test is onger needed.
21474 2003-07-08  Martin Baulig  <martin@ximian.com>
21476         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
21477         inaccessible types.  Fixes #36313.
21479         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
21481         * namespace.cs (NamespaceEntry): Create implicit entries for all
21482         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
21483         implicit entries for N1.N2 and N1.
21485 2003-07-08  Martin Baulig  <martin@ximian.com>
21487         Rewrote the handling of namespaces to fix a lot of the issues
21488         wrt. `using' aliases etc.
21490         * namespace.cs (Namespace): Splitted this class into a
21491         per-assembly `Namespace' and a per-file `NamespaceEntry'.
21493         * typemanager.cs (TypeManager.IsNamespace): Removed.
21494         (TypeManager.ComputeNamespaces): Only compute namespaces from
21495         loaded assemblies here, not the namespaces from the assembly we're
21496         currently compiling.
21498 2003-07-08  Martin Baulig  <martin@ximian.com>
21500         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
21502 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21504         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
21505         already fixed it.  
21507         I thought about the memory savings here, but LookupTypeReflection
21508         is used under already very constrained scenarios.  Compiling
21509         corlib or mcs only exposes one hit, so it would not really reduce
21510         any memory consumption.
21512 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21514         * typemanager.cs: fixes bug #45889 by only adding public types from
21515         other assemblies to the list of known types.
21517 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21519         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
21520         on the type we resolved.
21522 2003-07-05  Martin Baulig  <martin@ximian.com>
21524         * pending.cs (PendingImplementation.ParentImplements): Don't
21525         create the proxy if the parent is abstract.
21527         * class.cs (TypeContainer.DefineIndexers): Process explicit
21528         interface implementations first.  Fixes #37714.
21530 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
21532         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
21533         defined recursively;  but since we modify the input parameters
21534         (left is set to `this' temporarily), we reset this value if the
21535         left_is_explicit is false, which gives the original semantics to
21536         the code.  
21538         * literal.cs (NullPointer): new class used to represent a null
21539         literal in a pointer context.
21541         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
21542         type is a pointer, use a NullPointer object instead of a
21543         NullLiteral.   Closes 43687
21545         (ExplicitConversion): Convert pointer values using
21546         the conv opcode to the proper type.
21548         * ecore.cs (New): change ValueTypeVariable property into a method,
21549         that returns whether the valuetype is suitable for being used.
21551         * expression.cs (Binary.DoNumericPromotions): Only return if we
21552         the int constant was a valid uint, and we can return both left and
21553         right as uints.  If not, we continue processing, to trigger the
21554         type conversion.  This fixes 39018.
21556         * statement.cs (Block.EmitMeta): During constant resolution, set
21557         the CurrentBlock property on the emitcontext, so that we resolve
21558         constants propertly.
21560 2003-07-02  Martin Baulig  <martin@ximian.com>
21562         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
21563         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
21565         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
21566         than emitting it here.
21568         * statement.cs: Fixed some more flow analysis bugs.
21570 2003-07-02  Martin Baulig  <martin@ximian.com>
21572         * class.cs (MethodData.Define): When implementing interface
21573         methods, set Final unless we're Virtual.
21575         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
21576         check work for interface methods.
21578 2003-07-01  Martin Baulig  <martin@ximian.com>
21580         * ecore.cs (EmitContext.This): Replaced this property with a
21581         GetThis() method which takes a Location argument.  This ensures
21582         that we get the correct error location for a CS0188.
21584 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
21586         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
21587         ImplicitStandardConversion.
21589         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
21591 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
21593         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
21594         optimization.
21596 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
21598         * class.cs (Constructor.Define): Turn off initlocals for unsafe
21599         constructors.
21601         (MethodData.Define): Turn off initlocals for unsafe methods.
21603 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
21605         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
21606         complete;  Fixes #37521.
21608         * delegate.cs: Use Modifiers.TypeAttr to compute the
21609         TypeAttributes, instead of rolling our own.  This makes the flags
21610         correct for the delegates.
21612 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
21614         * class.cs (Constructor.Define): Set the private flag for static
21615         constructors as well.
21617         * cs-parser.jay (statement_expression): Set the return value to
21618         null, to avoid a crash when we catch an error.
21620 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
21622         * cs-parser.jay: Applied patch from Jackson that adds support for
21623         extern and unsafe modifiers to destructor declarations.
21625         * expression.cs: Report error 21 if the user is trying to index a
21626         System.Array.
21628         * driver.cs: Add an error message, suggested by the bug report.
21630         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
21631         if we do not have a ": this ()" constructor initializer.  Fixes 45149
21633 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
21635         * namespace.cs: Add some information to reduce FAQs.
21637 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
21639         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
21640         underlying enumeration types.  Fixes #43915.
21642         * expression.cs: Treat ushort/short as legal values to be used in
21643         bitwise operations.
21645 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
21647         * delegate.cs: transfer custom attributes for paramenters from
21648         the delegate declaration to Invoke and BeginInvoke.
21650 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
21652         * attribute.cs: handle custom marshalers and emit marshal info
21653         for fields, too.
21655 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
21657         * makefile.gnu: Added anonymous.cs to the compiler sources.
21659 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
21661         * iterators.cs: Change the name of the proxy class to include two
21662         underscores.
21664         * cs-parser.jay: Update grammar to include anonymous methods.
21666         * anonymous.cs: new file.
21668 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
21670         * class.cs (Field.Define): Add missing test for pointers and
21671         safety. 
21673 2003-05-27  Ravi Pratap  <ravi@ximian.com>
21675         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
21676         we use the stobj opcode.
21678         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
21679         since it wasn't the correct fix. 
21681         It still is puzzling that we are required to use stobj for IntPtr
21682         which seems to be a ValueType.
21684 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
21686         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
21687         during regular simple name resolution.   Now, the trick is that
21688         instead of returning for processing the simplename, we do a
21689         TypeManager.LookupType (ie, a rooted lookup as opposed to a
21690         contextual lookup type).   If a match is found, return that, if
21691         not, return for further composition.
21693         This fixes long-standing 30485.
21695         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
21696         using the address to initialize an object, do an Stobj instead of
21697         using the regular Stelem.
21699         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
21700         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
21701         Because if we are a BaseIndexerAccess that value will be true.
21702         Fixes 43643.
21704         * statement.cs (GotoCase.Resolve): Return after reporting an
21705         error, do not attempt to continue. 
21707         * expression.cs (PointerArithmetic.Emit): If our operand is a
21708         long, convert our constants to match the operand before
21709         multiplying.  Convert to I type before adding.   Fixes 43670.
21711 2003-05-14  Ravi Pratap  <ravi@ximian.com>
21713         * enum.cs (ImplicitConversionExists) : Rename to
21714         ImplicitEnumConversionExists to remove ambiguity. 
21716         * ecore.cs (NullCast): New type of cast expression class which
21717         basically is very similar to EmptyCast with the difference being
21718         it still is a constant since it is used only to cast a null to
21719         something else
21720         (eg. (string) null)
21722         * convert.cs (ImplicitReferenceConversion): When casting a null
21723         literal, we return a NullCast.
21725         * literal.cs (NullLiteralTyped): Remove - I don't see why this
21726         should be around anymore.
21728         The renaming (reported was slightly wrong). Corrections:
21730         ConvertImplicitStandard -> ImplicitConversionStandard
21731         ConvertExplicitStandard -> ExplicitConversionStandard
21733         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
21734         before passing them in !
21736         * convert.cs (ImplicitConversionStandard): When comparing for
21737         equal expr and target types, ensure that expr is not a
21738         NullLiteral.
21740         In general, we must not be checking (expr_type ==
21741         target_type) in the top level conversion methods
21742         (ImplicitConversion, ExplicitConversion etc). This checking is
21743         done in the methods that they delegate to.
21745 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
21747         * convert.cs: Move Error_CannotConvertType,
21748         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
21749         ImplicitNumericConversion, ImplicitConversionExists,
21750         ImplicitUserConversionExists, StandardConversionExists,
21751         FindMostEncompassedType, FindMostSpecificSource,
21752         FindMostSpecificTarget, ImplicitUserConversion,
21753         ExplicitUserConversion, GetConversionOperators,
21754         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
21755         TryImplicitIntConversion, Error_CannotConvertImplicit,
21756         ConvertImplicitRequired, ConvertNumericExplicit,
21757         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
21758         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
21759         its own file.
21761         Perform the following renames:
21763         StandardConversionExists -> ImplicitStandardConversionExists
21764         ConvertImplicit -> ImplicitConversion
21765         ConvertImplicitStandard -> ImplicitStandardConversion
21766         TryImplicitIntConversion -> ImplicitIntConversion
21767         ConvertImplicitRequired -> ImplicitConversionRequired
21768         ConvertNumericExplicit -> ExplicitNumericConversion
21769         ConvertReferenceExplicit -> ExplicitReferenceConversion
21770         ConvertExplicit -> ExplicitConversion
21771         ConvertExplicitStandard -> ExplicitStandardConversion
21773 2003-05-19  Martin Baulig  <martin@ximian.com>
21775         * statement.cs (TypeInfo.StructInfo): Made this type protected.
21776         (TypeInfo): Added support for structs having structs as fields.
21778         * ecore.cs (FieldExpr): Implement IVariable.
21779         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
21780         VariableInfo for the field.
21782 2003-05-18  Martin Baulig  <martin@ximian.com>
21784         * expression.cs (This.DoResolve): Report a CS0027 if we're
21785         emitting a field initializer.
21787 2003-05-18  Martin Baulig  <martin@ximian.com>
21789         * expression.cs (This.ResolveBase): New public function.
21790         (This.DoResolve): Check for CS0188.
21792         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
21793         This.Resolve().
21795         * ecore.cs (MethodGroupExpr.DoResolve): Set the
21796         `instance_expression' to null if we don't have any non-static
21797         methods.
21799 2003-05-18  Martin Baulig  <martin@ximian.com>
21801         Reworked the way how local variables and parameters are handled by
21802         the flow analysis code.
21804         * statement.cs (TypeInfo, VariableMap): New public classes.
21805         (VariableInfo): New public class.  This is now responsible for
21806         checking whether a variable has been assigned.  It is used for
21807         parameters and local variables.
21808         (Block.EmitMeta): Take the InternalParameters as argument; compute
21809         the layout of the flow vectors here.
21810         (Block.LocalMap, Block.ParameterMap): New public properties.
21811         (FlowBranching): The .ctor doesn't get the InternalParameters
21812         anymore since Block.EmitMeta() now computes the layout of the flow
21813         vector.
21814         (MyStructInfo): This class is now known as `StructInfo' and nested
21815         in `TypeInfo'; we don't access this directly anymore.
21817         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
21818         property and removed IsAssigned(), IsFieldAssigned(),
21819         SetAssigned() and SetFieldAssigned(); we now call them on the
21820         VariableInfo so we don't need to duplicate this code everywhere.
21822         * expression.cs (ParameterReference): Added `Block block' argument
21823         to the .ctor.
21824         (LocalVariableReference, ParameterReference, This): The new
21825         VariableInfo class is now responsible for all the definite
21826         assignment stuff.
21828         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
21829         IsParameterAssigned, SetParameterAssigned): Removed.
21831 2003-05-18  Martin Baulig  <martin@ximian.com>
21833         * typemanager.cs (InitCoreTypes): Try calling
21834         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
21835         the 3-args-version.  Corlib now also needs our `void_type'.
21836         (GetMethod): Added overloaded version which takes an optional
21837         `bool report_errors' to allow lookups of optional methods.
21839 2003-05-12  Martin Baulig  <martin@ximian.com>
21841         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
21842         only used for locals and not for parameters.
21844 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
21846         * support.cs (InternalParameters.ParameterType): Return the
21847         ExternalType of the parameter.
21849         * parameter.cs (Parameter.ExternalType): drop the two arguments,
21850         they were unused.
21852 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
21854         * class.cs (MethodData.Define): Do not set the `newslot' on
21855         interface members, if they are also flagged as "override".
21857         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
21858         better code for ++i and i++.  This only works for static fields
21859         and local variables.
21861         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
21862         want to pull the DeclSpace out of the builder_to_declspace instead
21863         of the TypeBuilder (like in TypeContainer.FindMembers).
21865         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
21866         instead of LookupTypeContainer.  Fixes the crash on .NET for
21867         looking up interface members.
21869         * const.cs: Create our own emit context during the Definition
21870         stage, so that constants are evaluated in the proper context, when
21871         a recursive definition happens.
21873 2003-05-11  Martin Baulig  <martin@ximian.com>
21875         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
21876         new block for a switch section.
21877         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
21878         the adding/lookup in the switch block.  Fixes #39828.
21880 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
21882         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
21883         functionality: I needed to convert the data after I had performed
21884         the add/sub operation into the operands type size.
21886         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
21887         pass the type for the box operation, otherwise the resulting
21888         object would have been of type object.
21890         (BoxedCast): Add constructor to specify the type to box as.
21892 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
21894         * iterators.cs: I was reusing the `count' variable inadvertently,
21895         take steps to not allow this to happen.
21897 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
21899         * attribute.cs (Attribute.Resolve): Params attributes are encoded
21900         by creating an array at the point where the params starts and
21901         putting all those arguments there, then adjusting the size of the
21902         array.
21904 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
21906         * expression.cs (New.AddressOf): Implement interface
21907         IMemoryLocation.  This is used when the `new' operator is used in
21908         the context of an invocation to a method on a value type.
21910         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
21911         example. 
21913         * namespace.cs: Also check the using aliases here.
21915         * driver.cs: Move the test for using validity after the types have
21916         been entered, so we do a single pass that also includes the using
21917         aliases. 
21919         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
21920         in the regular case.   CreateSiblingForFinally is doing extra
21921         error checking.
21923         * attribute.cs (GetAttributeArgumentExpression): Store the result
21924         on an out value, and use the return value to indicate failure
21925         instead of using null (which is a valid return for Constant.GetValue).
21927         * statement.cs: Perform the analysis flow for the increment
21928         portion after the statement, because this will be the real flow of
21929         execution.  Fixes #42385
21931         * codegen.cs (EmitContext.EmitArgument,
21932         EmitContext.EmitStoreArgument): New helper functions when the
21933         RemapToProxy flag is set.
21935         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
21936         function.
21938         Add support for remapping parameters. 
21940         * iterators.cs: Propagate parameter values;  Store parameter
21941         values in the proxy classes.
21943 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
21945         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
21946         need a proxy reference;  I do not know what I was thinking
21948         * cs-parser.jay (constructor_initializer): catch another error,
21949         and display nice message.
21951         (field_declaration): catch void field declaration
21952         to flag a better error. 
21954         * class.cs (MemberBase.CheckBase): Report an error instead of a
21955         warning if a new protected member is declared in a struct. 
21956         (Field.Define): catch the error of readonly/volatile.
21958         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
21960         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
21961         volatile variable is taken
21963 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
21965         * statement.cs (Fixed.Resolve): Report an error if we are not in
21966         an unsafe context.
21968 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
21970         * typemanager.cs: reuse the code that handles type clashes for
21971         delegates and enumerations.
21973         * class.cs (Report28): Always report.
21975         * expression.cs (EncodeAsAttribute): Allow nulls here.
21977 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
21979         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
21980         the functionality for testing whether an expression is valid for
21981         an attribute here.  Also handle the case of arrays of elements
21982         being stored. 
21984         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
21985         encoding a linear array into an array of objects that are suitable
21986         to be passed to an CustomAttributeBuilder.
21988         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
21990         * ecore.cs: (FieldExpr): Handle field remapping here.
21992         * iteratators.cs: Pass the instance variable (if the method is an
21993         instance method) to the constructors, so we can access the field
21994         variables on the class.
21996         TODO: Test this with structs.  I think the THIS variable on
21997         structs might have to be a pointer, and not a refenrece
21999 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
22001         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
22002         local variables to fields in a proxy class.
22004         * iterators.cs (PopulateProxy): Rename our internal fields to
22005         <XXX>.  
22006         Create a <THIS> field if we are an instance method, so we can
22007         reference our parent container variables.
22008         (MapVariable): Called back from the EmitContext code to enter a
22009         new variable to field mapping into the proxy class (we just create
22010         a FieldBuilder).
22012         * expression.cs
22013         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
22014         for using the remapped locals to fields.
22016         I placed the code here, because that gives the same semantics to
22017         local variables, and only changes the Emit code.
22019         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
22020         statements inside iterators.
22021         (VariableInfo): Add a FieldBuilder for the cases when we are
22022         remapping local variables to fields in a proxy class
22024         * ecore.cs (SimpleNameResolve): Avoid testing two times for
22025         current_block != null.
22027         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
22028         not cope with strings, as it has been moved to the
22029         TableSwitchEmit.  Fixed bug in switch generation.
22031         * expression.cs (New.DoResolve): Provide more context for the user
22032         when reporting an error.
22034         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
22035         pointers. 
22037         * expression.cs (MemberAccess.DoResolve): When we get a type back,
22038         check the permissions for it.  Note than in a type-resolution
22039         context the check was already present in DeclSpace.ResolveType,
22040         but was missing from the MemberAccess.
22042         (ArrayCreation.CheckIndices): warn if the user has
22043         more nested levels of expressions, but there are no more
22044         dimensions specified.  Avoids crash on bug 41906.
22046 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
22048         * statement.cs (Block): replace Implicit bool, for a generic
22049         flags.   
22050         New flag: `Unchecked'.  This is used during the EmitMeta phase
22051         (which is out-of-line with the regular Resolve/Emit process for a
22052         statement, as this is done ahead of time, but still gets a chance
22053         to call constant resolve).
22055         (Block.Flags): new enum for adding a new flag.
22057         (Block.EmitMeta): track the state of unchecked.
22059         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
22060         to enable constant resolution to work there as well.
22062 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
22064         * typemanager.cs (ienumerable_type): Also look up
22065         System.Collections.IEnumerable. 
22067 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
22069         TODO: Test more than one conditional per method.
22071         * class.cs (Indexer.Define): Report the location where the user is
22072         referencing the unsupported feature.
22074         (MethodData): Overload the use of `conditionals' to
22075         minimize the creation of needless ArrayLists.   This saves roughly
22076         212kb on my machine.
22078         (Method): Implement the new IIteratorContainer interface.
22079         (Method.SetYields): Implement the method by setting the ModFlags
22080         to contain METHOD_YIELDS.
22082         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
22083         which just got set to null.
22085         * iterators.cs: New file.
22087         (Yield, YieldBreak): New statements.
22089         * statement.cs (Return.Resolve): Flag an error if we are used in
22090         an iterator method.
22092         * codegen.cs (InIterator): New flag set if the code is being
22093         compiled in an iterator method.
22095         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
22096         internal modifier, and we just use it to avoid adding extra
22097         fields, as this is seldom used.  
22099         * cs-parser.jay: Add yield_statement (yield and yield break).
22101         * driver.cs: New flag -v2 to turn on version 2 features. 
22103         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
22104         hashtable when v2 is enabled.
22106 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
22108         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
22109         there is already a namespace defined with this name.
22111         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
22112         people upgraded their corlibs.
22114         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
22115         always use fully qualified types, no need to use the compiler
22116         front end.
22118         (TypeManager.IsNamespace): Use binarysearch.
22120         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
22121         AddDelegate): I did not quite use the new IsValid API properly: I
22122         have to pass the short-name and the fullname.  I was passing only
22123         the basename instead of the fullname sometimes. 
22125         (TypeContainer.DefineType): call NamespaceClash.
22127         * interface.cs (Interface.DefineType): use NamespaceClash before
22128         defining the type.
22130         * delegate.cs (Delegate.DefineType): use NamespaceClash before
22131         defining the type.
22133         * enum.cs: (Enum.DefineType): use NamespaceClash before
22134         defining the type.
22136         * typemanager.cs (: 3-line patch that gives us some tasty 11%
22137         speed increase.  First, use the negative_hits cache when we get a
22138         negative.  Second, add the type with its full original name
22139         instead of the new . and + encoded name (reflection uses + to
22140         separate type from a nested type).  Use LookupTypeReflection
22141         directly which bypasses the type->name hashtable (that we already
22142         know does not contain the type.
22144         * decl.cs (DeclSpace.ResolveTypeExpr): track the
22145         location/container type. 
22147         * driver.cs: When passing utf8, use directly the UTF8Encoding.
22149 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
22151         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
22153         * delegate.cs (NewDelegate.Resolve): Test whether an instance
22154         method is being referenced in the method group from a static
22155         context, and report error 120 if so.
22157         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
22158         Error118. 
22160         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
22161         is created, we create the A namespace).
22163         * cs-parser.jay: A namespace also introduces a DeclarationFound.
22164         Fixes #41591
22166 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
22168         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
22169         invocation to ModuleBuilder.GetType with the same values will
22170         return a new type instance, so we need to cache its return
22171         values. 
22173         * expression.cs (Binary.ResolveOperator): Only allow the compare
22174         operators on enums if they are of the same type.
22176         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
22177         types of ValueType on their own case.  Before we were giving them
22178         the same treatment as objects.
22180         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
22181         fullname.  Short name is used to compare against container name.
22182         Fullname is used to check against defined namespace names.
22184         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
22185         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
22187         (Method.CheckBase): Call parent.
22188         (MemberBase.CheckBase): Check for protected members on sealed
22189         classes.
22190         (PropertyBase.CheckBase): Call parent.
22191         (Field.Define): Call parent.
22193         * report.cs: Negative error codes are now mapped to 8000 - code,
22194         so that the display is render more nicely.
22196         * typemanager.cs: Do not use try/catch, instead report a regular
22197         error. 
22199         (GetPointerType, GetReferenceType): These methods provide
22200         mechanisms to obtain the T* and T& from a T.  We had the code
22201         previously scattered around the code base, and it also used
22202         TypeManager.LookupType that would go through plenty of caches.
22203         This one goes directly to the type source.
22205         In some places we did the Type.GetType followed by
22206         ModuleBuilder.GetType, but not in others, so this unifies the
22207         processing as well.
22209         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
22210         statements now that we have namespace information.
22212         * typemanager.cs (IsNamespace): New method, returns whether the
22213         string presented is a namespace or not.
22215         (ComputeNamespaces): New public entry point, computes the list of
22216         available namespaces, using the GetNamespaces API call in Mono, or
22217         the slower version in MS.NET.   
22219         Now before we start the semantic analysis phase, we have a
22220         complete list of namespaces including everything that the user has
22221         provided.
22223         Deleted old code to cache namespaces in .nsc files.
22225 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
22227         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
22228         class/struct location definition Location for the implicit
22229         constructor location.
22231         (Operator.Define): Use the location of the operator for the
22232         implicit Method definition.
22234         (Constructor.Emit): use the constructor location for the implicit
22235         base initializer constructor.
22237         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
22238         and the Expression class now contains two new methods:
22240         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
22241         isolate type lookup from the rest of the resolution process.
22243         Since we use Expressions to hold type definitions due to the way
22244         we parse the input we have historically overloaded Resolve to
22245         perform the Type lookups if a special flag is passed.  Now this is
22246         eliminated and two methods take their place. 
22248         The differences in the two methods between xStep and xTerminal is
22249         that xStep is involved in our current lookup system that uses
22250         SimpleNames to compose a name, while xTerminal is used just to
22251         catch the case where the simplename lookup failed.
22253 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
22255         * expression.cs (ResolveMemberAccess): Remove redundant code.
22256         TypeExpr expressions are always born fully resolved.
22258         * interface.cs (PopulateMethod): Do not lookup the types twice.
22259         We were doing it once during SemanticAnalysis and once during
22260         PopulateMethod.
22262         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
22263         in local variable type definitions, were being returned as a
22264         SimpleName (we decomposed everything into a string), that is
22265         because primary_expression was being used instead of a type in the
22266         grammar (reduce/reduce conflicts).
22268         The part that was wrong is that we converted the expression into a
22269         string (an oversimplification in one hand, compounded with primary
22270         expressions doing string concatenation).
22272         So things like:
22274         A.B.C [] x;
22276         Would return "A.B.C[]" as a SimpleName.  This stopped things like
22277         using clauses from working on this particular context.  And a type
22278         was being matched directly against "A.B.C[]".
22280         We now use the correct approach, and allow for ComposedCast to be
22281         part of the unary expression.  So the "A.B.C []" become a composed
22282         cast of "A.B.C" (as a nested group of MemberAccess with a
22283         SimpleName at the end) plus the rank composition "[]". 
22285         Also fixes 35567
22287 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
22289         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
22290         for the access level checking.
22292         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
22293         `TypeContainer container', because I kept getting confused when I
22294         was debugging this code.
22296         * expression.cs (Indexers): Instead of tracking getters/setters,
22297         we now track them in parallel.  We create one arraylist less, but
22298         most importantly it is possible now for the LValue code to find a
22299         matching get for a set.
22301         (IndexerAccess.DoResolveLValue): Update the code.
22302         GetIndexersForType has been modified already to extract all the
22303         indexers from a type.  The code assumed it did not.
22305         Also make the code set the correct return type for the indexer.
22306         This was fixed a long time ago for properties, but was missing for
22307         indexers.  It used to be void_type.
22309         (Binary.Emit): Test first for doubles instead of
22310         floats, as they are more common.
22312         (Binary.EmitBranchable): Use the .un version of the branch opcodes
22313         when dealing with floats and the <=, >= operators.  This fixes bug
22314         #39314 
22316         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
22317         to load the array value by emitting a load on the foreach variable
22318         type.  This was incorrect.  
22320         We now emit the code to load an element using the the array
22321         variable type, and then we emit the conversion operator.
22323         Fixed #40176
22325 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
22327         * attribute.cs: Avoid allocation of ArrayLists in the common case.
22329 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
22331         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
22332         test for protection before we test for signatures. 
22334         (MethodSignature.ToString): implement.
22336         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
22337         to the case where we reduced into a LongConstant.
22339         * decl.cs (CheckAccessLevel): If the type is an array, we can not
22340         depend on whether the information is acurrate, because the
22341         Microsoft runtime will always claim that the array type is public,
22342         regardless of the real state.
22344         If the type is a pointer, another problem happens: the type is
22345         reported as non-public in Microsoft.  
22347         In both cases we have to call CheckAccessLevel recursively with
22348         the underlying type as the argument to be tested.
22350 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
22352         * assign.cs (Assign.Emit): If we are dealing with a compound
22353         assignment expression, we should use the code path that stores the
22354         intermediate result in a temporary value.  This fixes #40903.
22356         *expression.cs (Indirection.ToString): Provide ToString method for
22357         debugging. 
22359 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
22361         * class.cs: Null out fields holding references to Block objects so
22362         they can be garbage collected.
22364         * expression.cs (OverloadResolve): Remove unused local.
22366 2003-04-07  Martin Baulig  <martin@ximian.com>
22368         * codegen.cs (EmitContext.CurrentFile): New public field.
22369         (EmitContext.Mark): Use the CurrentFile to check whether the
22370         location is in the correct file.
22371         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
22373 2003-04-07  Martin Baulig  <martin@ximian.com>
22375         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
22377         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
22378         location.  [FIXME: The location argument which gets passed to this
22379         method is sometimes wrong!]
22381 2003-04-07  Nick Drochak <ndrochak@gol.com>
22383         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
22385 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
22387         * expression.cs (Indirection.EmitAssign): We were using the
22388         temporary, but returning immediately instead of continuing the
22389         EmitAssing flow.
22391 2003-04-06  Martin Baulig  <martin@ximian.com>
22393         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
22394         if it's a nested child, but also deriving from the outer class.
22395         See test 190.cs.
22397         * typemanager.cs (IsNestedChildOf): Make this work if it's a
22398         nested child, but also deriving from the outer class.  See
22399         test-190.cs.
22400         (FilterWithClosure): We may access private members of the outer
22401         class if we're a nested child and deriving from the outer class.
22402         (RealMemberLookup): Only set `closure_private_ok' if the
22403         `original_bf' contained BindingFlags.NonPublic.
22405 2003-04-05  Martin Baulig  <martin@ximian.com>
22407         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
22409 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
22411         * class.cs (Event.Define): Do not allow abstract events to have
22412         initializers. 
22414 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
22416         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
22417         block in event declarations.
22419         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
22420         value type, get its address.
22422         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
22423         leaving a class on the stack instead of a boolean value (int
22424         0/1).  Change the code so we compare against null, and then the
22425         result against zero.
22427         * class.cs (TypeContainer.GetClassBases): We were checking for the
22428         parent class being sealed too late.
22430         * expression.cs (Binary.Emit): For <= and >= when dealing with
22431         floating point values, use cgt.un and clt.un instead of cgt and
22432         clt alone.
22434 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
22436         * statement.cs: Apply the same optimization as MS: skip the 
22437         GetEnumerator returning an IEnumerator, and use the one returning a 
22438         CharEnumerator instead. This allows us to avoid the try-finally block 
22439         and the boxing.
22441 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
22443         * cs-parser.jay: Attributes cannot be applied to
22444                          namespaces. Fixes #40473
22446 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22448         * class.cs:
22449         (Add*): check if the name is valid using the full name for constants,
22450         fields, properties and events.
22452 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
22454         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
22455         char constants to be part of the enumeration.
22457         * expression.cs (Conditional.DoResolve): Add support for operator
22458         true. Implements the missing functionality from 14.12
22460         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
22461         operator true/false as required by the spec.
22463         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
22464         implicit conversion to boolean.
22466         * statement.cs (Statement.ResolveBoolean): A boolean expression is
22467         also one where the type implements `operator true'. 
22469         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
22470         get an expression that will invoke operator true based on an
22471         expression.  
22473         (GetConversionOperators): Removed the hack that called op_True
22474         here.  
22476         (Expression.ResolveBoolean): Move this from Statement.
22478 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
22480         * ecore.cs (FieldExpr): do not allow initialization of initonly
22481         fields on derived classes
22483 2003-03-13  Martin Baulig  <martin@ximian.com>
22485         * statement.cs (Block.Emit): Call ig.BeginScope() and
22486         ig.EndScope() when compiling with debugging info; call
22487         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
22489 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
22491         * expression.cs (Indexers): Do not construct immediately, allow
22492         for new members to be appended as we go.  Fixes 38143
22494 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22496         * expression.cs: save/restore context when resolving an unchecked
22497         expression.
22499 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
22501         * cfold.cs: Catch division by zero in modulus operator during
22502         constant folding.
22504 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
22506         * interface.cs (Interface.DefineMembers): Avoid defining members
22507         twice. 
22509 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
22511         * driver.cs: handle the +/- options for -noconfig
22513         * statement.cs (Unckeched.Resolve): Also track the state of
22514         unchecked in the Resolve phase.
22516 2003-02-27  Martin Baulig  <martin@ximian.com>
22518         * ecore.cs (Expression.MemberLookup): Don't create a
22519         MethodGroupExpr for something which is not a method.  Fixes #38291.
22521 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
22523         * class.cs (MemberBase.CheckParameters): Also check that the type
22524         is unmanaged if it is a pointer.
22526         * expression.cs (SizeOf.Resolve): Add location information.
22528         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
22529         a managed type is declared.
22531         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
22532         parameter modifiers as well.  Fixes bug 38606
22534         * class.cs: Very sad.  Am backing out the speed up changes
22535         introduced by the ArrayList -> Array in the TypeContainer, as they
22536         were not actually that much faster, and introduced a bug (no error
22537         reports on duplicated methods).
22539         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
22540         source first, this will guarantee that we have a valid expression
22541         before calling in lower levels functions that will require a
22542         resolved object.  Then use this original_source in the
22543         target.ResolveLValue instead of the original source that was
22544         passed to us.
22546         Another change.  Use target.Resolve instead of LValueResolve.
22547         Although we are resolving for LValues, we will let the Assign code
22548         take care of that (it will be called again from Resolve).  This
22549         basically allows code like this:
22551         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
22552         class Y { void A (X x) { x [0] += o; }
22554         The problem was that the indexer was trying to resolve for
22555         set_Item (idx, object o) and never finding one.  The real set_Item
22556         was set_Item (idx, X).  By delaying the process we get the right
22557         semantics. 
22559         Fixes bug 36505
22561 2003-02-23  Martin Baulig  <martin@ximian.com>
22563         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
22564         while calling DoEmit ().
22566         * codegen.cs (EmitContext.Mark): Don't mark locations in other
22567         source files; if you use the #line directive inside a method, the
22568         compiler stops emitting line numbers for the debugger until it
22569         reaches the end of the method or another #line directive which
22570         restores the original file.
22572 2003-02-23  Martin Baulig  <martin@ximian.com>
22574         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
22576 2003-02-23  Martin Baulig  <martin@ximian.com>
22578         * statement.cs (Block.AddChildVariableNames): We need to call this
22579         recursively, not just for our immediate children.
22581 2003-02-23  Martin Baulig  <martin@ximian.com>
22583         * class.cs (Event.Define): Always make the field private, like csc does.
22585         * typemanager.cs (TypeManager.RealMemberLookup): Make events
22586         actually work, fixes bug #37521.
22588 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
22590         * delegate.cs: When creating the various temporary "Parameters"
22591         classes, make sure that we call the ComputeAndDefineParameterTypes
22592         on those new parameters (just like we do with the formal ones), to
22593         allow them to be resolved in the context of the DeclSpace.
22595         This fixes the bug that Dick observed in Bugzilla #38530.
22597 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
22599         * expression.cs (ResolveMemberAccess): When resolving a constant,
22600         do not attempt to pull a constant if the value was not able to
22601         generate a valid constant.
22603         * const.cs (LookupConstantValue): Do not report more errors than required.
22605 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22607         * expression.cs: fixes bug #38328.
22609 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
22611         * class.cs: Changed all the various members that can be part of a
22612         class from being an ArrayList to be an Array of the right type.
22613         During the DefineType type_list, interface_list, delegate_list and
22614         enum_list are turned into types, interfaces, delegates and enums
22615         arrays.  
22617         And during the member population, indexer_list, event_list,
22618         constant_list, field_list, instance_constructor_list, method_list,
22619         operator_list and property_list are turned into their real arrays.
22621         Although we could probably perform this operation earlier, for
22622         good error reporting we need to keep the lists and remove the
22623         lists for longer than required.
22625         This optimization was triggered by Paolo profiling the compiler
22626         speed on the output of `gen-sample-program.pl' perl script. 
22628         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
22629         not crash in methods like MemberLookupFailed that use this field.  
22631         This problem arises when the compiler fails to resolve a type
22632         during interface type definition for example.
22634 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
22636         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
22637         inherit from System.Object, so we have to stop at null, not only
22638         when reaching System.Object.
22640 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
22642         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
22643         DeclaredOnly because the parent indexer might have had a different
22644         name, but did not loop until the top of the hierarchy was reached.
22646         The problem this one fixes is 35492: when a class implemented an
22647         indexer from an interface, we were getting the interface method
22648         (which was abstract) and we were flagging an error (can not invoke
22649         abstract method).
22651         This also keeps bug 33089 functioning, and test-148 functioning.
22653         * typemanager.cs (IsSpecialMethod): The correct way of figuring
22654         out if a method is special is to see if it is declared in a
22655         property or event, or whether it is one of the predefined operator
22656         names.   This should fix correctly #36804.
22658 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
22660         The goal here is to remove the dependency on EmptyCast.Peel ().
22661         Killing it completely.
22663         The problem is that currently in a number of places where
22664         constants are expected, we have to "probe" for an EmptyCast, and
22665         Peel, which is not the correct thing to do, as this will be
22666         repetitive and will likely lead to errors. 
22668         The idea is to remove any EmptyCasts that are used in casts that
22669         can be reduced to constants, so we only have to cope with
22670         constants. 
22672         This bug hunt was triggered by Bug 37363 and the desire to remove
22673         the duplicate pattern where we were "peeling" emptycasts to check
22674         whether they were constants.  Now constants will always be
22675         constants.
22677         * ecore.cs: Use an enumconstant here instead of wrapping with
22678         EmptyCast.  
22680         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
22681         throwing me off.  By handling this we can get rid of a few hacks.
22683         * statement.cs (Switch): Removed Peel() code.
22685 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
22687         * class.cs: Location information for error 508
22689         * expression.cs (New.DoResolve): Add a guard against double
22690         resolution of an expression.  
22692         The New DoResolve might be called twice when initializing field
22693         expressions (see EmitFieldInitializers, the call to
22694         GetInitializerExpression will perform a resolve on the expression,
22695         and later the assign will trigger another resolution
22697         This leads to bugs (#37014)
22699         * delegate.cs: The signature for EndInvoke should contain any ref
22700         or out parameters as well.  We were not doing this in the past. 
22702         * class.cs (Field.Define): Do not overwrite the type definition
22703         inside the `volatile' group.  Turns out that volatile enumerations
22704         were changing the type here to perform a validity test, which
22705         broke conversions. 
22707 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
22709         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
22710         and structs, we do not want to load the instance variable
22712         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
22713         enum_type has to be handled like an object reference (implicit
22714         conversions exists from this to object), but the regular IsClass
22715         and IsValueType tests will never return true for this one.
22717         Also we use TypeManager.IsValueType instead of type.IsValueType,
22718         just for consistency with the rest of the code (this is only
22719         needed if we ever use the construct exposed by test-180.cs inside
22720         corlib, which we dont today).
22722 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
22724         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
22725         just InternalCall.
22727 2003-02-09  Martin Baulig  <martin@ximian.com>
22729         * namespace.cs (Namespace..ctor): Added SourceFile argument.
22730         (Namespace.DefineNamespaces): New static public method; this is
22731         called when we're compiling with debugging to add all namespaces
22732         to the symbol file.
22734         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
22735         pass it to the Namespace's .ctor.
22737         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
22738         and MethodBase arguments; pass the namespace ID to the symwriter;
22739         pass the MethodBase instead of the token to the symwriter.
22740         (SymbolWriter.DefineNamespace): New method to add a namespace to
22741         the symbol file.
22743 2003-02-09  Martin Baulig  <martin@ximian.com>
22745         * symbolwriter.cs: New file.  This is a wrapper around
22746         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
22747         methods here in near future.
22749 2003-02-09  Martin Baulig  <martin@ximian.com>
22751         * codegen.cs (EmitContext.Mark): Just pass the arguments to
22752         ILGenerator.MarkSequencePoint() which are actually used by the
22753         symbol writer.
22755 2003-02-09  Martin Baulig  <martin@ximian.com>
22757         * location.cs (SourceFile): New public sealed class.  This
22758         contains the name and an index which is used in the location's token.
22759         (Location): Reserve an appropriate number of bits in the token for
22760         the source file instead of walking over that list, this gives us a
22761         really huge performance improvement when compiling with debugging.
22763         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
22764         `SourceFile' argument instead of a string.
22765         (Driver.ProcessFile): Add all the files via Location.AddFile(),
22766         but don't parse/tokenize here, we need to generate the list of all
22767         source files before we do that.
22768         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
22769         the files.
22771         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
22772         instead of a string.
22774         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
22775         of a string.
22777 2003-02-09  Martin Baulig  <martin@ximian.com>
22779         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
22780         filename on `#line default'.
22782 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
22784         * statement.cs: don't clear the pinned var when the fixed statement
22785         returns from the method (fixes bug#37752).
22787 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
22789         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
22790         to IsValueType.
22792 2003-02-07  Martin Baulig  <martin@ximian.com>
22794         * driver.cs: Removed the `--debug-args' command line argument.
22796         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
22797         automatically by the AsssemblyBuilder.
22798         (CodeGen.InitializeSymbolWriter): We don't need to call any
22799         initialization function on the symbol writer anymore.  This method
22800         doesn't take any arguments.
22802 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
22804         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
22805         from referenced assemblies as well.
22807 2003-02-02  Martin Baulig  <martin@ximian.com>
22809         * class.cs (MethodData.Emit): Generate debugging info for external methods.
22811 2003-02-02  Martin Baulig  <martin@ximian.com>
22813         * class.cs (Constructor.Emit): Open the symbol writer before
22814         emitting the constructor initializer.
22815         (ConstructorInitializer.Emit): Call ec.Mark() to allow
22816         single-stepping through constructor initializers.
22818 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
22820         * class.cs: Handle error 549: do not allow virtual methods in
22821         sealed classes. 
22823 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
22825         * decl.cs: Check access levels when resolving types
22827 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
22829         * statement.cs: Add parameters and locals set in catch blocks that might 
22830         return to set vector
22832 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
22834         * class.cs (Operator): Set the SpecialName flags for operators.
22836         * expression.cs (Invocation.DoResolve): Only block calls to
22837         accessors and operators on SpecialName methods.
22839         (Cast.TryReduce): Handle conversions from char constants.
22842 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
22844         * statement.cs: small memory and time optimization in FlowBranching.
22846 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
22848         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
22849         problem that the last fix but in the other sid (Set).
22851         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
22852         access when there is no indexer in the hierarchy.
22854 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
22856         * class.cs: Combine some if statements.
22858 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22860         * driver.cs: fixed bug #37187.
22862 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
22864         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
22865         any indexer, it's needed to build a list with all the indexers in the
22866         hierarchy (AllGetters), else we have problems. Fixes #35653.
22868 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
22870         * class.cs (MethodData.Define): It is wrong for an interface
22871         implementation to be static in both cases: explicit and implicit.
22872         We were only handling this in one case.
22874         Improve the if situation there to not have negations.
22876         * class.cs (Field.Define): Turns out that we do not need to check
22877         the unsafe bit on field definition, only on usage.  Remove the test.
22879 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22881         * driver.cs: use assembly.Location instead of Codebase (the latest
22882         patch made mcs fail when using MS assemblies).
22884 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
22886         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
22887         get the path to *corlib.dll.
22889 2003-01-21  Nick Drochak <ndrochak@gol.com>
22891         * cs-tokenizer.cs:
22892         * pending.cs:
22893         * typemanager.cs: Remove compiler warnings
22895 2003-01-20  Duncan Mak  <duncan@ximian.com>
22897         * AssemblyInfo.cs: Bump the version number to 0.19.
22899 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22901         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
22903 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
22905         * class.cs (Constructor::Emit): Emit debugging info for constructors.
22907 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
22909         * cs-parser.jay: Small fix: we were not comparing the constructor
22910         name correctly.   Thanks to Zoltan for the initial pointer.
22912 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
22914         * cs-tokenizer.cs: Set file name when specified with #line
22916 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
22918         * cs-parser.jay: Only perform the constructor checks here if we
22919         are named like the class;  This will help provider a better
22920         error.  The constructor path is taken when a type definition is
22921         not found, but most likely the user forgot to add the type, so
22922         report that rather than the constructor error.
22924 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
22926         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
22927         allocations.
22929 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
22931         * cs-parser.jay: Add cleanup call.
22933 2003-01-13  Duncan Mak  <duncan@ximian.com>
22935         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
22936         consistent with other methods.
22938 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
22940         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
22942 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
22944         * attribute.cs: only set GuidAttr to true when we have a
22945         GuidAttribute.
22947 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22949         * ecore.cs:
22950         * expression.cs:
22951         * typemanager.cs: fixes to allow mcs compile corlib with the new
22952         Type.IsSubclassOf fix.
22954 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
22956         * expression.cs (LocalVariableReference.DoResolve): Classify a
22957         constant as a value, not as a variable.   Also, set the type for
22958         the variable.
22960         * cs-parser.jay (fixed_statement): take a type instead of a
22961         pointer_type, so we can produce a better error message later.
22963         * statement.cs (Fixed.Resolve): Flag types that are not pointers
22964         as an error.  
22966         (For.DoEmit): Make inifinite loops have a
22967         non-conditional branch back.
22969         (Fixed.DoEmit): First populate the pinned variables, then emit the
22970         statement, then clear the variables.  Before I was emitting the
22971         code once for each fixed piece.
22974 2003-01-08  Martin Baulig  <martin@ximian.com>
22976         * statement.cs (FlowBranching.MergeChild): A break in a
22977         SWITCH_SECTION does not leave a loop.  Fixes #36155.
22979 2003-01-08  Martin Baulig  <martin@ximian.com>
22981         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
22982         lives in the same number space than `param_map'.  Fixes #36154.
22984 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
22986         * cs-parser.jay (constructor_declaration): Set the
22987         Constructor.ModFlags before probing for it.  This makes the
22988         compiler report 514, 515 and 132 (the code was there, but got
22989         broken). 
22991         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
22992         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
22993         (GotoCase.Resolve): Set `Returns' to ALWAYS.
22995 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
22997         * enum.cs: create the enum static fields using the enum type.
22999 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
23001         * class.cs: don't try to create the ParamBuilder for the return
23002         type if it's not needed (and handle it breaking for the ms runtime
23003         anyway).
23005 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
23007         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
23009 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
23011         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
23012         the command.   This showed up while compiling the JANET source
23013         code, which used \r as its only newline separator.
23015 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
23017         * class.cs (Method.Define): If we are an operator (because it
23018         reuses our code), then set the SpecialName and HideBySig.  #36128
23020 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
23022         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
23023         exception, report error 120 `object reference required'.
23025         * driver.cs: Add --pause option, used during to measure the size
23026         of the process as it goes with --timestamp.
23028         * expression.cs (Invocation.DoResolve): Do not allow methods with
23029         SpecialName to be invoked.
23031 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
23033         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
23034         number before adding it.
23036 2002-12-21  Ravi Pratap  <ravi@ximian.com>
23038         * ecore.cs (StandardImplicitConversion): When in an unsafe
23039         context, we allow conversion between void * to any other pointer
23040         type. This fixes bug #35973.
23042 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
23044         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
23045         is not thrown when extensionless outputs are used 
23047 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23049         * rootcontext.cs: fixed compilation of corlib.
23051 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
23053         * attribute.cs (Attributes.Contains): Add new method.
23055         * class.cs (MethodCore.LabelParameters): if the parameter is an
23056         `out' parameter, check that no attribute `[In]' has been passed.
23058         * enum.cs: Handle the `value__' name in an enumeration.
23060 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
23062         * decl.cs: Added special case to allow overrides on "protected
23063         internal" methods
23065 2002-12-18  Ravi Pratap  <ravi@ximian.com>
23067         * attribute.cs (Attributes.AddAttributeSection): Rename to this
23068         since it makes much more sense.
23070         (Attributes.ctor): Don't require a Location parameter.
23072         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
23074         * attribute.cs (ApplyAttributes): Remove extra Location parameters
23075         since we already have that information per attribute.
23077         * everywhere : make appropriate changes.
23079         * class.cs (LabelParameters): Write the code which actually
23080         applies attributes to the return type. We can't do this on the MS
23081         .NET runtime so we flag a warning in the case an exception is
23082         thrown.
23084 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
23086         * const.cs: Handle implicit null conversions here too.
23088 2002-12-17  Ravi Pratap  <ravi@ximian.com>
23090         * class.cs (MethodCore.LabelParameters): Remove the extra
23091         Type [] parameter since it is completely unnecessary. Instead
23092         pass in the method's attributes so that we can extract
23093         the "return" attribute.
23095 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
23097         * cs-parser.jay (parse): Use Report.Error to flag errors instead
23098         of ignoring it and letting the compile continue.
23100         * typemanager.cs (ChangeType): use an extra argument to return an
23101         error condition instead of throwing an exception.
23103 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
23105         * expression.cs (Unary.TryReduce): mimic the code for the regular
23106         code path.  Perform an implicit cast in the cases where we can
23107         implicitly convert to one of the integral types, and then reduce
23108         based on that constant.   This fixes bug #35483.
23110 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23112         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
23114 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23116         * namespace.cs: fixed bug #35489.
23118 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
23120         * class.cs: Remove some dead code.
23122         * cs-parser.jay: Estimate the number of methods needed
23123         (RootContext.MethodCount);
23125         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
23126         numbers instead of StringBuilders.
23128         * support.cs (PtrHashtable): Add constructor with initial size;
23129         We can now reduce reallocations of the method table.
23131 2002-12-10  Ravi Pratap  <ravi@ximian.com>
23133         * attribute.cs (ApplyAttributes): Keep track of the emitted
23134         attributes on a per-target basis. This fixes bug #35413.
23136 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
23138         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
23139         default to the Windows 1252 encoding.
23141         (UnixParseOption): Support version, thanks to Alp for the missing
23142         pointer. 
23144         * AssemblyInfo.cs: Add nice assembly information.
23146         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
23147         (bug 35169).
23149         * cs-parser.jay: Allow a trailing comma before the close bracked
23150         in the attribute_section production.
23152         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
23153         address of the instance was being taken, I will take this out,
23154         because we take the address of the object immediately here.
23156 2002-12-09  Ravi Pratap  <ravi@ximian.com>
23158         * typemanager.cs (AreMultipleAllowed): Take care of the most
23159         obvious case where attribute type is not in the current assembly -
23160         stupid me ;-)
23162 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
23164         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
23165         definitions, instead of doing that afterwards.  
23167         Also we use a nice little hack, depending on the constructor, we
23168         know if we are a "composed" name or a simple name.  Hence, we
23169         avoid the IndexOf test, and we avoid 
23171         * codegen.cs: Add code to assist in a bug reporter to track down
23172         the source of a compiler crash. 
23174 2002-12-07  Ravi Pratap  <ravi@ximian.com>
23176         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
23177         types have been emitted for a given element and flag an error
23178         if something which does not have AllowMultiple set is used more
23179         than once.
23181         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
23182         attribute types and their corresponding AllowMultiple properties
23184         (AreMultipleAllowed): Check the property for a given type.
23186         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
23187         property in the case we have a TypeContainer.
23189         (Attributes.AddAttribute): Detect duplicates and just skip on
23190         adding them. This trivial fix catches a pretty gross error in our
23191         attribute emission - global attributes were being emitted twice!
23193         Bugzilla bug #33187 is now fixed.
23195 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
23197         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
23198         instead of pp_and).
23200         * expression.cs (Binary.ResolveOperator): I can only use the
23201         Concat (string, string, string) and Concat (string, string,
23202         string, string) if the child is actually a concatenation of
23203         strings. 
23205 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
23207         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
23208         context where we need a 2-character lookahead.
23210         * pending.cs (PendingImplementation): Rework so we can keep track
23211         of interface types all the time, and flag those which were
23212         implemented by parents as optional.
23214 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
23216         * expression.cs (Binary.ResolveOperator): Use
23217         String.Concat(string,string,string) or
23218         String.Concat(string,string,string,string) when possible. 
23220         * typemanager: More helper methods.
23223 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
23225         * pending.cs: remove the bogus return from GetMissingInterfaces()
23226         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
23228 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23230         * namespace.cs: avoid duplicated 'using xxx' being added to
23231         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
23232         when we get more than one 'using' statement for the same namespace.
23233         Report a CS0105 warning for it.
23235 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
23237         * cs-tokenizer.cs (consume_identifier): use read directly, instead
23238         of calling getChar/putback, uses internal knowledge of it.    
23240         (xtoken): Reorder tokenizer so most common patterns are checked
23241         first.  This reduces the compilation time in another 5% (from 8.11s
23242         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
23244         The parsing time is 22% of the compilation in mcs, and from that
23245         64% is spent on the tokenization process.  
23247         I tried using a binary search for keywords, but this is slower
23248         than the hashtable.  Another option would be to do a couple of
23249         things:
23251                 * Not use a StringBuilder, instead use an array of chars,
23252                   with a set value.  Notice that this way we could catch
23253                   the 645 error without having to do it *afterwards*.
23255                 * We could write a hand-parser to avoid the hashtable
23256                   compares altogether.
23258         The identifier consumption process takes 37% of the tokenization
23259         time.  Another 15% is spent on is_number.  56% of the time spent
23260         on is_number is spent on Int64.Parse:
23262                 * We could probably choose based on the string length to
23263                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
23264                   computations. 
23266         Another 3% is spend on wrapping `xtoken' in the `token' function.
23268         Handle 0xa0 as whitespace (#34752)
23270 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
23272         * typemanager.cs (IsCLRType): New routine to tell whether a type
23273         is one of the builtin types.  
23275         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
23276         typecode in more places instead of doing pointer comparissions.
23277         We could leverage some knowledge about the way the typecodes are
23278         laid out.
23280         New code to cache namespaces in assemblies, it is currently not
23281         invoked, to be used soon.
23283         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
23285         * expression.cs (Binary.ResolveOperator): specially handle
23286         strings, and do not perform user-defined operator overloading for
23287         built-in types.
23289 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
23291         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
23292         internalcall as it is a pretty simple operation;  Avoid whenever
23293         possible to call Char.IsLetter.
23295         (consume_identifier): Cut by half the number of
23296         hashtable calls by merging the is_keyword and GetKeyword behavior.
23298         Do not short-circuit, because if we do, we
23299         report errors (ie, #if false && true would produce an invalid
23300         directive error);
23303 2002-11-24  Martin Baulig  <martin@ximian.com>
23305         * expression.cs (Cast.TryReduce): If we're in checked syntax,
23306         check constant ranges and report a CS0221.  Fixes #33186.
23308 2002-11-24  Martin Baulig  <martin@ximian.com>
23310         * cs-parser.jay: Make this work for uninitialized variable
23311         declarations in the `for' initializer.  Fixes #32416.
23313 2002-11-24  Martin Baulig  <martin@ximian.com>
23315         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
23316         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
23318 2002-11-24  Martin Baulig  <martin@ximian.com>
23320         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
23321         argument; if true, we also check for user-defined conversions.
23322         This is only needed if both arguments are of a user-defined type.
23323         Fixes #30443, added test-175.cs.
23324         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
23326         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
23328 2002-11-24  Martin Baulig  <martin@ximian.com>
23330         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
23331         function to get the store opcode.
23332         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
23333         only emit the Ldelema if the store opcode is Stobj.  You must run
23334         both test-34 and test-167 to test this.  Fixes #34529.
23336 2002-11-23  Martin Baulig  <martin@ximian.com>
23338         * ecore.cs (Expression.MemberLookup): Added additional
23339         `qualifier_type' argument which is used when we're being called
23340         from MemberAccess.DoResolve() and null if we're called from a
23341         SimpleName lookup.
23342         (Expression.MemberLookupFailed): New method to report errors; this
23343         does the CS1540 check and reports the correct error message.
23345         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
23346         argument for the CS1540 check and redone the way how we're dealing
23347         with private members.  See the comment in the source code for details.
23348         (FilterWithClosure): Reverted this back to revision 1.197; renamed
23349         `closure_start_type' to `closure_qualifier_type' and check whether
23350         it's not null.  It was not this filter being broken, it was just
23351         being called with the wrong arguments.
23353         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
23354         and pass it the correct `qualifier_type'; this also does the error
23355         handling for us.
23357 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
23359         * expression.cs (Invocation.EmitParams): If the we are dealing
23360         with a non-built-in value type, load its address as well.
23362         (ArrayCreation): Use a a pretty constant instead
23363         of the hardcoded value 2.   Use 6 instead of 2 for the number of
23364         static initializers.  
23366         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
23367         because they are not really value types, just glorified integers. 
23369         * driver.cs: Do not append .exe, the CSC compiler does not do it.
23371         * ecore.cs: Remove redundant code for enumerations, make them use
23372         the same code path as everything else, fixes the casting issue
23373         with enumerations in Windows.Forms.
23375         * attribute.cs: Do only cast to string if it is a string, the
23376         validation happens later.
23378         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
23379         people upgrade their corlibs.
23381         * ecore.cs: Oops, enumerations were not following the entire code path
23383 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
23385         * typemanager.cs (FilterWithClosure): Commented out the test for
23386         1540 in typemanager.cs, as it has problems when accessing
23387         protected methods from a parent class (see test-174.cs). 
23389         * attribute.cs (Attribute.ValidateGuid): new method.
23390         (Attribute.Resolve): Use above.
23392 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
23394         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
23396         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
23397         handling for enumerations, as we only needed the TypeContainer
23398         functionality to begin with (this is required for the fix below to
23399         work for enums that reference constants in a container class for
23400         example). 
23402         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
23404         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
23405         a valid TypeBuilder to perform lookups on.o
23407         * class.cs (InheritableMemberSignatureCompare): Use true in the
23408         call to GetGetMethod and GetSetMethod, because we are comparing
23409         the signature, and we need to get the methods *even* if they are
23410         private. 
23412         (PropertyBase.CheckBase): ditto.
23414         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
23415         GotoCase.Resolve): Use Peel on EmpytCasts.
23417         * ecore.cs (EmptyCast): drop child, add Peel method.
23419 2002-11-17  Martin Baulig  <martin@ximian.com>
23421         * ecore.cs (EmptyCast.Child): New public property.
23423         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
23424         label resolved to an EmptyCast.  Fixes #34162.
23425         (GotoCase.Resolve): Likewise.
23426         (Block.EmitMeta): Likewise.
23428 2002-11-17  Martin Baulig  <martin@ximian.com>
23430         * expression.cs (Invocation.BetterConversion): Prefer int over
23431         uint; short over ushort; long over ulong for integer literals.
23432         Use ImplicitConversionExists instead of StandardConversionExists
23433         since we also need to check for user-defined implicit conversions.
23434         Fixes #34165.  Added test-173.cs.
23436 2002-11-16  Martin Baulig  <martin@ximian.com>
23438         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
23439         with the `true' and `false' literals.  Fixes #33151.
23441 2002-11-16  Martin Baulig  <martin@ximian.com>
23443         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
23444         October 22nd; don't do the cs1540 check for static members.
23446         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
23447         now using our own filter here and doing the cs1540 check again.
23449 2002-11-16  Martin Baulig  <martin@ximian.com>
23451         * support.cs (InternalParameters): Don't crash if we don't have
23452         any fixed parameters.  Fixes #33532.
23454 2002-11-16  Martin Baulig  <martin@ximian.com>
23456         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
23457         when looking up static methods to make this work on Windows.
23458         Fixes #33773.
23460 2002-11-16  Martin Baulig  <martin@ximian.com>
23462         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
23463         a setter rather than using PropertyInfo.CanWrite.
23465 2002-11-15  Nick Drochak  <ndrochak@gol.com>
23467         * class.cs: Allow acces to block member by subclasses. Fixes build
23468         breaker.
23470 2002-11-14  Martin Baulig  <martin@ximian.com>
23472         * class.cs (Constructor.Emit): Added the extern/block check.
23473         Fixes bug #33678.
23475 2002-11-14  Martin Baulig  <martin@ximian.com>
23477         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
23478         iteration while looking for indexers, this is needed because the
23479         indexer may have a different name in our base classes.  Fixed the
23480         error reporting (no indexers at all, not get accessor, no
23481         overloaded match).  Fixes bug #33089.
23482         (IndexerAccess.DoResolveLValue): Likewise.
23484 2002-11-14  Martin Baulig  <martin@ximian.com>
23486         * class.cs (PropertyBase.CheckBase): Make this work for multiple
23487         indexers.  Fixes the first part of bug #33089.
23488         (MethodSignature.InheritableMemberSignatureCompare): Added support
23489         for properties.
23491 2002-11-13  Ravi Pratap  <ravi@ximian.com>
23493         * attribute.cs (Attribute.Resolve): Catch the
23494         NullReferenceException and report it since it isn't supposed to
23495         happen. 
23497 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
23499         * expression.cs (Binary.EmitBranchable): Also handle the cases for
23500         LogicalOr and LogicalAnd that can benefit from recursively
23501         handling EmitBranchable.  The code now should be nice for Paolo.
23503 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
23505         * typemanager.cs (LookupType): Added a negative-hit hashtable for
23506         the Type lookups, as we perform quite a number of lookups on
23507         non-Types.  This can be removed once we can deterministically tell
23508         whether we have a type or a namespace in advance.
23510         But this might require special hacks from our corlib.
23512         * TODO: updated.
23514         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
23515         and double which avoids a conversion from an integer to a double.
23517         * expression.cs: tiny optimization, avoid calling IsConstant,
23518         because it effectively performs the lookup twice.
23520 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
23522         But a bogus return here to keep the semantics of the old code
23523         until the Mono runtime is fixed.
23525         * pending.cs (GetMissingInterfaces): New method used to remove all
23526         the interfaces that are already implemented by our parent
23527         classes from the list of pending methods. 
23529         * interface.cs: Add checks for calls after ResolveTypeExpr.
23531 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
23533         * class.cs (Class.Emit): Report warning 67: event not used if the
23534         warning level is beyond 3.
23536         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
23537         being a NullLiteral.
23539         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
23540         specifiers. 
23542         * class.cs (TypeContainer.GetClassBases): Cover a missing code
23543         path that might fail if a type can not be resolved.
23545         * expression.cs (Binary.Emit): Emit unsigned versions of the
23546         operators. 
23548         * driver.cs: use error 5.
23550 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
23552         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
23554 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
23556         * cs-parser.jay (switch_section): A beautiful patch from Martin
23557         Baulig that fixed 33094.
23559 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
23561         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
23562         Check whether the base is abstract and report an error if so.
23564         * expression.cs (IndexerAccess.DoResolveLValue,
23565         IndexerAccess.DoResolve): ditto. 
23567         (Invocation.DoResolve): ditto.
23569         (Invocation.FullMethodDesc): Improve the report string.
23571         * statement.cs (Block): Eliminate IsVariableDefined as it is
23572         basically just a wrapper for GetVariableInfo.
23574         * ecore.cs (SimpleName): Use new 
23576         * support.cs (ReflectionParamter.ParameterType): We unwrap the
23577         type, as we return the actual parameter ref/unref state on a
23578         different call.
23580 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
23582         * support.cs: Return proper flags REF/OUT fixing the previous
23583         commit.  
23585         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
23586         not used to mean `ref' but `ref or out' in ParameterReference
23588         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
23589         full type signature instead of calling TypeManger.CSharpName
23590         ourselves. 
23592         * support.cs (InternalParameters.ParameterDesc): Do not compare
23593         directly to the modflags, because REF/OUT will actually be bitsets
23594         if set. 
23596         * delegate.cs (VerifyMethod): Check also the modifiers.
23598         * cs-tokenizer.cs: Fix bug where floating point values with an
23599         exponent where a sign was missing was ignored.
23601         * driver.cs: Allow multiple assemblies to be specified in a single
23602         /r: argument
23604 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
23606         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
23607         because identifiers after a parenthesis would end up in this kind
23608         of production, and we needed to desamiguate it for having casts
23609         like:
23611                 (UserDefinedType *) xxx
23613 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
23615         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
23616         we should set on the Bindingflags.NonPublic, but not turn on
23617         private_ok.  private_ok controls whether a Private member is
23618         returned (this is chekced on the filter routine), while the
23619         BindingFlags.NonPublic just controls whether private/protected
23620         will be allowed.   This fixes the problem part of the problem of
23621         private properties being allowed to be used in derived classes.
23623         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
23624         so we can call the children DoResolveLValue method (this will
23625         properly signal errors on lvalue assignments to base properties)
23627         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
23628         getter are null, and we have a property info, we know that this
23629         happened because the lookup failed, so we report an error 122 for
23630         protection level violation.
23632         We also silently return if setter and getter are null in the
23633         resolve functions, this condition only happens if we have flagged
23634         the error before.  This is the other half of the problem. 
23636         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
23637         not have accessibility information, that is why we were returning
23638         true in the filter function in typemanager.cs.
23640         To properly report 122 (property is inaccessible because of its
23641         protection level) correctly, we report this error in ResolveAccess
23642         by failing if both the setter and the getter are lacking (ie, the
23643         lookup failed). 
23645         DoResolve and DoLResolve have been modified to check for both
23646         setter/getter being null and returning silently, the reason being
23647         that I did not want to put the knowledge about this error in upper
23648         layers, like:
23650         int old = Report.Errors;
23651         x = new PropertyExpr (...);
23652         if (old != Report.Errors)
23653                 return null;
23654         else
23655                 return x;
23657         So the property expr is returned, but it is invalid, so the error
23658         will be flagged during the resolve process. 
23660         * class.cs: Remove InheritablePropertySignatureCompare from the
23661         class, as we no longer depend on the property signature to compute
23662         whether it is possible to implement a method or not.
23664         The reason is that calling PropertyInfo.GetGetMethod will return
23665         null (in .NET, in Mono it works, and we should change this), in
23666         cases where the Get Method does not exist in that particular
23667         class.
23669         So this code:
23671         class X { public virtual int A { get { return 1; } } }
23672         class Y : X { }
23673         class Z : Y { public override int A { get { return 2; } } }
23675         Would fail in Z because the parent (Y) would not have the property
23676         defined.  So we avoid this completely now (because the alternative
23677         fix was ugly and slow), and we now depend exclusively on the
23678         method names.
23680         (PropertyBase.CheckBase): Use a method-base mechanism to find our
23681         reference method, instead of using the property.
23683         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
23684         routines are gone now.
23686         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
23687         names, they were incorrectly named.
23689         * cs-tokenizer.cs: Return are more gentle token on failure. 
23691         * pending.cs (PendingImplementation.InterfaceMethod): This routine
23692         had an out-of-sync index variable, which caused it to remove from
23693         the list of pending methods the wrong method sometimes.
23695 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
23697         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
23698         CanWrite, because those refer to this particular instance of the
23699         property, and do not take into account the fact that we can
23700         override single members of a property.
23702         Constructor requires an EmitContext.  The resolution process does
23703         not happen here, but we need to compute the accessors before,
23704         because the resolution does not always happen for properties.
23706         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
23707         subclass, before we did not update this flag, but we did update
23708         bindingflags. 
23710         (GetAccessors): Drop this routine, as it did not work in the
23711         presence of partially overwritten set/get methods. 
23713         Notice that this broke the cs1540 detection, but that will require
23714         more thinking. 
23716 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23718         * class.cs:
23719         * codegen.cs:
23720         * driver.cs: issue a warning instead of an error if we don't support
23721         debugging for the platform. Also ignore a couple of errors that may
23722         arise when trying to write the symbols. Undo my previous patch.
23724 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23726         * driver.cs: ignore /debug switch except for Unix platforms.
23728 2002-10-23  Nick Drochak  <ndrochak@gol.com>
23730         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
23732 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
23734         * driver.cs: Do not make mcs-debug conditional, so we do not break
23735         builds that use it.
23737         * statement.cs (UsageVector.MergeChildren): I would like Martin to
23738         review this patch.  But basically after all the children variables
23739         have been merged, the value of "Breaks" was not being set to
23740         new_breaks for Switch blocks.  I think that it should be set after
23741         it has executed.  Currently I set this to the value of new_breaks,
23742         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
23743         conservative, but I do not understand this code very well.
23745         I did not break anything in the build, so that is good ;-)
23747         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
23749 2002-10-20  Mark Crichton  <crichton@gimp.org>
23751         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
23753 2002-10-20  Nick Drochak  <ndrochak@gol.com>
23755         * cfold.cs: Fixed compile blocker.
23757 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
23759         * driver.cs: I was chekcing the key, not the file.
23761 2002-10-19  Ravi Pratap  <ravi@ximian.com>
23763         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
23764         message that we were generating - we just need to silently return
23765         a null.
23767 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
23769         * class.cs (Event.Define): Change my previous commit, as this
23770         breaks the debugger.  This is a temporary hack, as it seems like
23771         the compiler is generating events incorrectly to begin with.
23773         * expression.cs (Binary.ResolveOperator): Added support for 
23774         "U operator - (E x, E y)"
23776         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
23777         y)".
23779         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
23780         init-only variables, but this path did not take into account that
23781         there might be also instance readonly variables.  Correct this
23782         problem. 
23784         This fixes bug 32253
23786         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
23787         delegates as well.
23789         * driver.cs: Change the extension for modules to `netmodule'
23791         * cs-parser.jay: Improved slightly the location tracking for
23792         the debugger symbols.
23794         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
23795         modifiers that were specified instead of the hardcoded value
23796         (FamAndAssem).  This was basically ignoring the static modifier,
23797         and others.  Fixes 32429.
23799         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
23800         fixed a bug in the process (32476)
23802         * expression.cs (ArrayAccess.EmitAssign): Patch from
23803         hwang_rob@yahoo.ca that fixes bug 31834.3
23805 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
23807         * driver.cs: Make the module extension .netmodule.
23809 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
23811         * driver.cs: Report an error if the resource file is not found
23812         instead of crashing.
23814         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
23815         false, like Emit does.
23817 2002-10-16  Nick Drochak  <ndrochak@gol.com>
23819         * typemanager.cs: Remove unused private member.  Also reported mcs
23820         bug to report this as a warning like csc.
23822 2002-10-15  Martin Baulig  <martin@gnome.org>
23824         * statement.cs (Statement.Emit): Made this a virtual method; emits
23825         the line number info and calls DoEmit().
23826         (Statement.DoEmit): New protected abstract method, formerly knows
23827         as Statement.Emit().
23829         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
23831 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
23833         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
23834         have fixed a remaining problem: not every AddXXXX was adding a
23835         fully qualified name.  
23837         Now everyone registers a fully qualified name in the DeclSpace as
23838         being defined instead of the partial name.  
23840         Downsides: we are slower than we need to be due to the excess
23841         copies and the names being registered this way.  
23843         The reason for this is that we currently depend (on the corlib
23844         bootstrap for instance) that types are fully qualified, because
23845         we dump all the types in the namespace, and we should really have
23846         types inserted into the proper namespace, so we can only store the
23847         basenames in the defined_names array.
23849 2002-10-10  Martin Baulig  <martin@gnome.org>
23851         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
23852         from bug #31834, see the bug report for a testcase which is
23853         miscompiled.
23855 2002-10-10  Martin Baulig  <martin@gnome.org>
23857         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
23858         flow analysis code for this.
23860         * statement.cs (Do, While, For): Tell the flow analysis code about
23861         infinite loops.
23862         (FlowBranching.UsageVector): Added support for infinite loops.
23863         (Block.Resolve): Moved the dead code elimination here and use flow
23864         analysis to do it.
23866 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
23868         * class.cs (Field.Define): Catch cycles on struct type
23869         definitions. 
23871         * typemanager.cs (IsUnmanagedtype): Do not recursively check
23872         fields if the fields are static.  We only need to check instance
23873         fields. 
23875         * expression.cs (As.DoResolve): Test for reference type.
23877         * statement.cs (Using.ResolveExpression): Use
23878         ConvertImplicitRequired, not ConvertImplicit which reports an
23879         error on failture
23880         (Using.ResolveLocalVariableDecls): ditto.
23882         * expression.cs (Binary.ResolveOperator): Report errors in a few
23883         places where we had to.
23885         * typemanager.cs (IsUnmanagedtype): Finish implementation.
23887 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
23889         * expression.cs: Use StoreFromPtr instead of extracting the type
23890         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
23892         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
23893         an enumeration value to a System.Enum, but System.Enum is not a
23894         value type, but an class type, so we need to box.
23896         (Expression.ConvertExplicit): One codepath could return
23897         errors but not flag them.  Fix this.  Fixes #31853
23899         * parameter.cs (Resolve): Do not allow void as a parameter type.
23901 2002-10-06  Martin Baulig  <martin@gnome.org>
23903         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
23904         if it's a class type and not a struct.  Fixes #31815.
23906 2002-10-06  Martin Baulig  <martin@gnome.org>
23908         * statement.cs: Reworked the flow analysis code a bit to make it
23909         usable for dead code elimination.
23911 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23913         * cs-parser.jay: allow empty source files. Fixes bug #31781.
23915 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
23917         * expression.cs (ComposedCast.DoResolveType): A quick workaround
23918         to fix the test 165, will investigate deeper.
23920 2002-10-04  Martin Baulig  <martin@gnome.org>
23922         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
23923         finally blocks actually work.
23924         (Try.Resolve): We don't need to create a sibling for `finally' if
23925         there is no finally block.
23927 2002-10-04  Martin Baulig  <martin@gnome.org>
23929         * class.cs (Constructor.Define): The default accessibility for a
23930         non-default constructor is private, not public.
23932 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
23934         * class.cs (Constructor): Make AllowedModifiers public, add
23935         EXTERN.
23937         * cs-parser.jay: Perform the modifiers test here, as the
23938         constructor for the Constructor class usually receives a zero
23939         because of the way we create it (first we create, later we
23940         customize, and we were never checking the modifiers).
23942         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
23943         is a version of LookupTypeReflection that includes the type-name
23944         cache.  This can be used as a fast path for functions that know
23945         the fully qualified name and are only calling into *.GetType() to
23946         obtain a composed type.
23948         This is also used by TypeManager.LookupType during its type
23949         composition.
23951         (LookupType): We now also track the real type name, as sometimes
23952         we can get a quey for the real type name from things like
23953         ComposedCast.  This fixes bug 31422.
23955         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
23956         complete type fullname, it does not have to go through the type
23957         resolution system to obtain the composed version of the type (for
23958         obtaining arrays or pointers).
23960         (Conditional.Emit): Use the EmitBoolExpression to
23961         generate nicer code, as requested by Paolo.
23963         (ArrayCreation.CheckIndices): Use the patch from
23964         hwang_rob@yahoo.ca to validate the array initializers. 
23966 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
23968         * class.cs (ConstructorInitializer.Emit): simplify code by using
23969         Invocation.EmitCall, and at the same time, fix the bugs in calling
23970         parent constructors that took variable arguments. 
23972         * ecore.cs (Expression.ConvertNumericExplicit,
23973         Expression.ImplicitNumericConversion): Remove the code that
23974         manually wrapped decimal (InternalTypeConstructor call is now gone
23975         as well).
23977         * expression.cs (Cast.TryReduce): Also handle decimal types when
23978         trying to perform a constant fold on the type.
23980         * typemanager.cs (IsUnmanagedtype): Partially implemented.
23982         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
23983         that only turned off an error report, and did nothing else. 
23985 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
23987         * driver.cs: Handle and ignore /fullpaths
23989 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
23991         * expression.cs (Binary.ResolveOperator): Catch the case where
23992         DoNumericPromotions returns true, 
23994         (Binary.DoNumericPromotions): Simplify the code, and the tests.
23996 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
23998         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
23999         report error 70.
24001 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
24003         * ecore.cs (ConvertNumericExplicit): It is not enough that the
24004         conversion exists, but it is also required that the conversion be
24005         performed.  This manifested in "(Type64Enum) 2".  
24007         * class.cs (TypeManager.AddMethod): The fix is not to change
24008         AddEnum, because that one was using a fully qualified name (every
24009         DeclSpace derivative does), but to change the AddMethod routine
24010         that was using an un-namespaced name.  This now correctly reports
24011         the duplicated name.
24013         Revert patch until I can properly fix it.  The issue
24014         is that we have a shared Type space across all namespaces
24015         currently, which is wrong.
24017         Options include making the Namespace a DeclSpace, and merge
24018         current_namespace/current_container in the parser.
24020 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
24022         * cs-parser.jay: Improve error reporting when we get a different
24023         kind of expression in local_variable_type and
24024         local_variable_pointer_type. 
24026         Propagate this to avoid missleading errors being reported.
24028         * ecore.cs (ImplicitReferenceConversion): treat
24029         TypeManager.value_type as a target just like object_type.   As
24030         code like this:
24032         ValueType v = 1;
24034         Is valid, and needs to result in the int 1 being boxed before it
24035         is assigned to the value type v.
24037         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
24038         to validate the enumeration name.
24040         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
24041         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
24042         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
24044         * ecore.cs (TryImplicitIntConversion): When doing an
24045         implicit-enumeration-conversion, check if the type is 64-bits and
24046         perform a conversion before passing to EnumConstant.
24048 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
24050         * decl.cs (Error_AmbiguousTypeReference); New routine used to
24051         report ambiguous type references.  Unlike the MS version, we
24052         report what the ambiguity is.   Innovation at work ;-)
24054         (DeclSpace.FindType): Require a location argument to
24055         display when we display an ambiguous error.
24057         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
24059         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
24061         * expression.cs (EmitDynamicInitializers): Apply patch from
24062         hwang_rob@yahoo.ca that fixes the order in which we emit our
24063         initializers. 
24065 2002-09-21  Martin Baulig  <martin@gnome.org>
24067         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
24068         delegate takes no arguments.
24070 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
24072         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
24073         from integers.
24075         * expression.cs: Extract the underlying type.
24077         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
24079         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
24081 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
24083         * class.cs (TypeContainer.DefineType): We can not use the nice
24084         PackingSize with the size set to 1 DefineType method, because it
24085         will not allow us to define the interfaces that the struct
24086         implements.
24088         This completes the fixing of bug 27287
24090         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
24091         means also structs.  This fixes part of the problem. 
24092         (Expresion.ImplicitReferenceConversionExists): ditto.
24094         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
24095         error if there were no errors reported during the type lookup
24096         process, to avoid duplicates or redundant errors.  Without this
24097         you would get an ambiguous errors plus a type not found.  We have
24098         beaten the user enough with the first error.  
24100         (DeclSparce.FindType): Emit a warning if we have an ambiguous
24101         reference. 
24103         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
24104         during the resolution process, stop the lookup, this avoids
24105         repeated error reports (same error twice).
24107         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
24109         * typemanager.cs (LookupType): Redo the type lookup code to match
24110         the needs of System.Reflection.  
24112         The issue is that System.Reflection requires references to nested
24113         types to begin with a "+" sign instead of a dot.  So toplevel
24114         types look like: "NameSpace.TopLevelClass", and nested ones look
24115         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
24116         levels. 
24118 2002-09-19  Martin Baulig  <martin@gnome.org>
24120         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
24121         says that a method always returns or always throws an exception,
24122         don't report the CS0161.
24124         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
24125         set `Returns = new_returns'.
24127 2002-09-19  Martin Baulig  <martin@gnome.org>
24129         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
24130         to an enum constant, check for a CS0176.
24132 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
24134         * class.cs (TypeContainer.CheckPairedOperators): Now we check
24135         for operators that must be in pairs and report errors.
24137         * ecore.cs (SimpleName.DoResolveType): During the initial type
24138         resolution process, when we define types recursively, we must
24139         check first for types in our current scope before we perform
24140         lookups in the enclosing scopes.
24142         * expression.cs (MakeByteBlob): Handle Decimal blobs.
24144         (Invocation.VerifyArgumentsCompat): Call
24145         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
24146         I thought we were supposed to always call this, but there are a
24147         few places in the code where we dont do it.
24149 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
24151         * driver.cs: Add support in -linkres and -resource to specify the
24152         name of the identifier.
24154 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
24156         * ecore.cs (StandardConversionExists): Sync with the conversion
24157         code: allow anything-* to void* conversions.
24159         (FindMostSpecificSource): Use an Expression argument
24160         instead of a Type, because we might be handed over a Literal which
24161         gets a few more implicit conversions that plain types do not.  So
24162         this information was being lost.
24164         Also, we drop the temporary type-holder expression when not
24165         required.
24167 2002-09-17  Martin Baulig  <martin@gnome.org>
24169         * class.cs (PropertyBase.CheckBase): Don't check the base class if
24170         this is an explicit interface implementation.
24172 2002-09-17  Martin Baulig  <martin@gnome.org>
24174         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
24175         different `IndexerName' attributes.
24177         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
24178         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
24179         virtual CommonResolve().
24181 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
24183         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
24184         and convert that to the UnderlyingType.
24186         * statement.cs (Foreach.Resolve): Indexers are just like variables
24187         or PropertyAccesses.
24189         * cs-tokenizer.cs (consume_string): Track line numbers and columns
24190         inside quoted strings, we were not doing this before.
24192 2002-09-16  Martin Baulig  <martin@gnome.org>
24194         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
24195         resolve it.  This is needed for the definite assignment check of the
24196         instance expression, fixes bug #29846.
24197         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
24199 2002-09-16  Nick Drochak  <ndrochak@gol.com>
24201         * parameter.cs: Fix compile error.  Cannot reference static member
24202         from an instance object.  Is this an mcs bug?
24204 2002-09-14  Martin Baulig  <martin@gnome.org>
24206         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
24207         multiple times.  Fixes bug #30295, added test-166.cs.
24209 2002-09-14  Martin Baulig  <martin@gnome.org>
24211         * statement.cs (Block.Emit): Don't emit unreachable code.
24212         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
24213         `break' statements.
24214         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
24216 2002-09-14  Martin Baulig  <martin@gnome.org>
24218         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
24219         is set.
24221 2002-09-14  Martin Baulig  <martin@gnome.org>
24223         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
24224         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
24225         be false on the ms runtime.
24227 2002-09-13  Martin Baulig  <martin@gnome.org>
24229         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
24230         the CS0038 error message.
24232 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
24234         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
24235         constant inside, return it.
24237 2002-09-12  Martin Baulig  <martin@gnome.org>
24239         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
24240         implicit conversion can be done between enum types.
24242         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
24243         check whether an implicit conversion to the current enum's UnderlyingType
24244         exists and report an error if not.
24246         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
24247         without debugging support.
24249         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
24250         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
24252 2002-09-12  Martin Baulig  <martin@gnome.org>
24254         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
24256         * ecore.cs (IMemberExpr.DeclaringType): New property.
24257         (SimpleName.SimpleNameResolve): Check whether we're accessing a
24258         nonstatic member of an outer type (CS0038).
24260 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
24262         * driver.cs: Activate the using-error detector at warning level
24263         4 (at least for MS-compatible APIs).
24265         * namespace.cs (VerifyUsing): Small buglett fix.
24267         * pending.cs (PendingImplementation): pass the container pointer. 
24269         * interface.cs (GetMethods): Allow for recursive definition.  Long
24270         term, I would like to move every type to support recursive
24271         definitions, not the current ordering mechanism that we have right
24272         now.
24274         The situation is this: Attributes are handled before interfaces,
24275         so we can apply attributes to interfaces.  But some attributes
24276         implement interfaces, we will now handle the simple cases
24277         (recursive definitions will just get an error).  
24279         * parameter.cs: Only invalidate types at the end if we fail to
24280         lookup all types.  
24282 2002-09-09  Martin Baulig  <martin@gnome.org>
24284         * ecore.cs (PropertyExpr.Emit): Also check for
24285         TypeManager.system_int_array_get_length so this'll also work when
24286         compiling corlib.  Fixes #30003.
24288 2002-09-09  Martin Baulig  <martin@gnome.org>
24290         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
24291         and throw an exception if we can't get the type's size.  Fixed #30040,
24292         added test-165.cs.
24294 2002-09-09  Martin Baulig  <martin@gnome.org>
24296         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
24298         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
24299         context.  Fixes bug #30027.
24301         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
24302         virtual functions.  Fixes bug #30043, added test-164.cs.
24304 2002-09-08  Ravi Pratap  <ravi@ximian.com>
24306         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
24308 2002-09-08  Nick Drochak  <ndrochak@gol.com>
24310         * driver.cs: Use an object to get the windows codepage since it's not a
24311         static property.
24313 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
24315         * statement.cs (For.Emit): for infinite loops (test == null)
24316         return whether there is a break inside, not always "true".
24318         * namespace.cs (UsingEntry): New struct to hold the name of the
24319         using definition, the location where it is defined, and whether it
24320         has been used in a successful type lookup.
24322         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
24323         strings.
24325         * decl.cs: ditto.
24327 2002-09-06  Ravi Pratap  <ravi@ximian.com>
24329         * attribute.cs : Fix incorrect code which relied on catching
24330         a NullReferenceException to detect a null being passed in
24331         where an object was expected.
24333 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
24335         * statement.cs (Try): flag the catch variable as assigned
24337         * expression.cs (Cast): Simplified by using ResolveType instead of
24338         manually resolving.
24340         * statement.cs (Catch): Fix bug by using ResolveType.
24342 2002-09-06  Ravi Pratap  <ravi@ximian.com>
24344         * expression.cs (BetterConversion): Special case for when we have
24345         a NullLiteral as the argument and we have to choose between string
24346         and object types - we choose string the way csc does.
24348         * attribute.cs (Attribute.Resolve): Catch the
24349         NullReferenceException and report error #182 since the Mono
24350         runtime no more has the bug and having this exception raised means
24351         we tried to select a constructor which takes an object and is
24352         passed a null.
24354 2002-09-05  Ravi Pratap  <ravi@ximian.com>
24356         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
24357         message (1502, 1503) when we can't locate a method after overload
24358         resolution. This is much more informative and closes the bug
24359         Miguel reported.
24361         * interface.cs (PopulateMethod): Return if there are no argument
24362         types. Fixes a NullReferenceException bug.
24364         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
24365         expressions too. Previously we were checking only in one place for
24366         positional arguments leaving out named arguments.
24368         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
24369         type to the enum type is not allowed. Remove code corresponding to
24370         that.
24372         (ConvertNumericExplicit): Allow explicit conversions from
24373         the underlying type to enum type. This precisely follows the spec
24374         and closes a bug filed by Gonzalo.
24376 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24378         * compiler.csproj:
24379         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
24381 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
24383         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
24384         it was important that we stored the right value after the
24385         reduction in `converted'.
24387 2002-09-04  Martin Baulig  <martin@gnome.org>
24389         * location.cs (Location.SymbolDocument): Use full pathnames for the
24390         source files.
24392 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
24394         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
24395         of the expression resolve mechanism, because that will catch the
24396         SimpleName error failures.
24398         (Conditional): If we can not resolve the
24399         expression, return, do not crash.
24401 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24403         * cs-tokenizer.cs:
24404         (location): display token name instead of its number.
24406 2002-08-28  Martin Baulig  <martin@gnome.org>
24408         * expression.cs (Binary.ResolveOperator): Don't silently return
24409         but return an error if an operator cannot be applied between two
24410         enum types.
24412 2002-08-28  Martin Baulig  <martin@gnome.org>
24414         * class.cs (Constructor.Define): Set the permission attributes
24415         correctly instead of making all constructors public.
24417 2002-08-28  Martin Baulig  <martin@gnome.org>
24419         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
24420         for private members before reporting a CS0103; if we find anything,
24421         it's a CS0122.
24423 2002-08-28  Martin Baulig  <martin@gnome.org>
24425         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
24426         to check whether `closure_start_type == closure_invocation_type',
24427         we also need to check whether `m.DeclaringType == closure_invocation_type'
24428         before bypassing the permission checks.  We might be accessing
24429         protected/private members from the base class.
24430         (TypeManager.RealMemberLookup): Only set private_ok if private
24431         members were requested via BindingFlags.NonPublic.
24433         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
24435         * expression.cs (MemberAccess.ResolveMemberAccess): Set
24436         MethodGroupExpr.IsExplicitImpl if appropriate.
24437         (Invocation.DoResolve): Don't report the CS0120 for explicit
24438         interface implementations.
24440 2002-08-27  Martin Baulig  <martin@gnome.org>
24442         * expression.cs (Invocation.DoResolve): If this is a static
24443         method and we don't have an InstanceExpression, we must report
24444         a CS0120.
24446 2002-08-25  Martin Baulig  <martin@gnome.org>
24448         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
24449         `==' between a valuetype and an object.
24451 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
24453         * ecore.cs (TypeExpr): Provide a ToString method.
24455 2002-08-24  Martin Baulig  <martin@gnome.org>
24457         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
24458         now called proggie.dbg and it's a binary file.
24460 2002-08-23  Martin Baulig  <martin@gnome.org>
24462         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
24464 2002-08-23  Martin Baulig  <martin@gnome.org>
24466         * struct.cs (MyStructInfo.ctor): Make this work with empty
24467         structs; it's not allowed to use foreach() on null.
24469 2002-08-23  Martin Baulig  <martin@gnome.org>
24471         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
24472         writer the full pathname of the generated assembly.
24474 2002-08-23  Martin Baulig  <martin@gnome.org>
24476         * statements.cs (FlowBranching.UsageVector.MergeChildren):
24477         A `finally' block never returns or breaks; improved handling of
24478         unreachable code.
24480 2002-08-23  Martin Baulig  <martin@gnome.org>
24482         * statement.cs (Throw.Resolve): Allow `throw null'.
24484 2002-08-23  Martin Baulig  <martin@gnome.org>
24486         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
24487         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
24488         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
24489         MemberLookup would return a wrong event if this is an explicit
24490         interface implementation and the class has an event with the same
24491         name.
24493 2002-08-23  Martin Baulig  <martin@gnome.org>
24495         * statement.cs (Block.AddChildVariableNames): New public method.
24496         (Block.AddChildVariableName): Likewise.
24497         (Block.IsVariableNameUsedInChildBlock): Likewise.
24498         (Block.AddVariable): Check whether a variable name has already
24499         been used in a child block.
24501         * cs-parser.jay (declare_local_variables): Mark all variable names
24502         from the current block as being used in a child block in the
24503         implicit block.
24505 2002-08-23  Martin Baulig  <martin@gnome.org>
24507         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
24508         find the symbol writer.
24510         * driver.cs: csc also allows the arguments to /define being
24511         separated by commas, not only by semicolons.
24513 2002-08-23  Martin Baulig  <martin@gnome.org>
24515         * interface.cs (Interface.GetMembers): Added static check for events.
24517 2002-08-15  Martin Baulig  <martin@gnome.org>
24519         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
24520         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
24522         * ecore.cs (Expression.MemberLookup): Added documentation and explained
24523         why the MethodData.EmitDestructor() change was necessary.
24525 2002-08-20  Martin Baulig  <martin@gnome.org>
24527         * class.cs (TypeContainer.FindMembers): Added static check for events.
24529         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
24531         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
24532         use Type.GetEvents(), not Type.FindMembers().
24534 2002-08-20  Martin Baulig  <martin@gnome.org>
24536         * decl.cs (MemberCache): Added a special method cache which will
24537         be used for method-only searched.  This ensures that a method
24538         search will return a MethodInfo with the correct ReflectedType for
24539         inherited methods.      
24541 2002-08-20  Martin Baulig  <martin@gnome.org>
24543         * decl.cs (DeclSpace.FindMembers): Made this public.
24545 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24547         * delegate.cs: fixed build on windows.
24548         [FIXME:  Filed as bug #29150: MCS must report these errors.]
24550 2002-08-19  Ravi Pratap  <ravi@ximian.com>
24552         * ecore.cs (StandardConversionExists): Return a false
24553         if we are trying to convert the void type to anything else
24554         since that is not allowed.
24556         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
24557         we flag error 70 in the event an event is trying to be accessed
24558         directly from outside the declaring type.
24560 2002-08-20  Martin Baulig  <martin@gnome.org>
24562         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
24563         MemberCache from typemanager.cs to decl.cs.
24565 2002-08-19  Martin Baulig  <martin@gnome.org>
24567         * class.cs (TypeContainer): Implement IMemberContainer.
24568         (TypeContainer.DefineMembers): Create the MemberCache.
24569         (TypeContainer.FindMembers): Do better BindingFlags checking; only
24570         return public members if BindingFlags.Public was given, check
24571         whether members are static.
24573 2002-08-16  Martin Baulig  <martin@gnome.org>
24575         * decl.cs (DeclSpace.Define): Splitted this in Define and
24576         DefineMembers.  DefineMembers is called first and initializes the
24577         MemberCache.
24579         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
24580         DefineMembers() on all our DeclSpaces.
24582         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
24583         but call DefineMembers() on all nested interfaces.  We call their
24584         Define() in our new Define() function.
24586         * interface.cs (Interface): Implement IMemberContainer.
24587         (Interface.Define): Moved all code except the attribute stuf to
24588         DefineMembers().
24589         (Interface.DefineMembers): Initialize the member cache.
24591         * typemanager.cs (IMemberFinder): Removed this interface, we don't
24592         need this anymore since we can use MemberCache.FindMembers directly.
24594 2002-08-19  Martin Baulig  <martin@gnome.org>
24596         * typemanager.cs (MemberCache): When creating the cache for an
24597         interface type, add all inherited members.
24598         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
24599         to `out bool used_cache' and documented it.
24600         (TypeManager.MemberLookup): If we already used the cache in the first
24601         iteration, we don't need to do the interfaces check.
24603 2002-08-19  Martin Baulig  <martin@gnome.org>
24605         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
24606         here from IMemberFinder and don't implement this interface anymore.
24607         (DeclSpace.MemberCache): Moved here from IMemberFinder.
24609         * typemanager.cs (IMemberFinder): This interface is now only used by
24610         classes which actually support the member cache.
24611         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
24612         since we only put DeclSpaces into this Hashtable.
24613         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
24614         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
24616 2002-08-16  Martin Baulig  <martin@gnome.org>
24618         * typemanager.cs (ICachingMemberFinder): Removed.
24619         (IMemberFinder.MemberCache): New property.
24620         (TypeManager.FindMembers): Merged this with RealFindMembers().
24621         This function will never be called from TypeManager.MemberLookup()
24622         so we can't use the cache here, just the IMemberFinder.
24623         (TypeManager.MemberLookup_FindMembers): Check whether the
24624         IMemberFinder has a MemberCache and call the cache's FindMembers
24625         function.
24626         (MemberCache): Rewrote larger parts of this yet another time and
24627         cleaned it up a bit.
24629 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
24631         * driver.cs (LoadArgs): Support quoting.
24633         (Usage): Show the CSC-like command line arguments.
24635         Improved a few error messages.
24637 2002-08-15  Martin Baulig  <martin@gnome.org>
24639         * typemanager.cs (IMemberContainer.Type): New property.
24640         (IMemberContainer.IsInterface): New property.
24642         The following changes are conditional to BROKEN_RUNTIME, which is
24643         defined at the top of the file.
24645         * typemanager.cs (MemberCache.MemberCache): Don't add the base
24646         class'es members, but add all members from TypeHandle.ObjectType
24647         if we're an interface.
24648         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
24649         is the current type.
24650         (MemberCache.CacheEntry.Container): Removed this field.
24651         (TypeHandle.GetMembers): Include inherited members.
24653 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24655         * typemanager.cs: fixed compilation and added a comment on a field that
24656         is never used.
24658 2002-08-15  Martin Baulig  <martin@gnome.org>
24660         * class.cs (ConstructorInitializer.Resolve): In the
24661         Expression.MemberLookup call, use the queried_type as
24662         invocation_type.
24664         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
24665         declared' attribute, it's always true.
24666         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
24667         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
24668         temporary wrapper for FindMembers which tells MemberLookup whether
24669         members from the base classes are included in the return value.
24670         This will go away soon.
24671         (TypeManager.MemberLookup): Use this temporary hack here; once the
24672         new MemberCache is completed, we don't need to do the DeclaredOnly
24673         looping here anymore since the MemberCache will take care of this.
24674         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
24675         (MemberCache): When creating the MemberCache for a class, get
24676         members from the current class and all its base classes.
24677         (MemberCache.CacheEntry.Container): New field.  This is a
24678         temporary hack until the Mono runtime is fixed to distinguish
24679         between ReflectedType and DeclaringType.  It allows us to use MCS
24680         with both the MS runtime and the unfixed Mono runtime without
24681         problems and without accecting performance.
24682         (MemberCache.SearchMembers): The DeclaredOnly looping from
24683         TypeManager.MemberLookup is now done here.      
24685 2002-08-14  Martin Baulig  <martin@gnome.org>
24687         * statement.cs (MyStructInfo.MyStructInfo): Don't call
24688         Type.GetFields on dynamic types but get the fields from the
24689         corresponding TypeContainer.
24690         (MyStructInfo.GetStructInfo): Added check for enum types.
24692         * typemanager.cs (MemberList.IsSynchronized): Implemented.
24693         (MemberList.SyncRoot): Implemented.
24694         (TypeManager.FilterWithClosure): No need to check permissions if
24695         closure_start_type == closure_invocation_type, don't crash if
24696         closure_invocation_type is null.
24698 2002-08-13  Martin Baulig  <martin@gnome.org>
24700         Rewrote TypeContainer.FindMembers to use a member cache.  This
24701         gives us a speed increase of about 35% for the self-hosting MCS
24702         build and of about 15-20% for the class libs (both on GNU/Linux).
24704         * report.cs (Timer): New class to get enhanced profiling.  This
24705         whole class is "TIMER" conditional since it remarkably slows down
24706         compilation speed.
24708         * class.cs (MemberList): New class.  This is an IList wrapper
24709         which we're now using instead of passing MemberInfo[]'s around to
24710         avoid copying this array unnecessarily.
24711         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
24712         (ICachingMemberFinder, IMemberContainer): New interface.
24713         (TypeManager.FilterWithClosure): If `criteria' is null, the name
24714         has already been checked, otherwise use it for the name comparision.
24715         (TypeManager.FindMembers): Renamed to RealMemberFinder and
24716         provided wrapper which tries to use ICachingMemberFinder.FindMembers
24717         if possible.  Returns a MemberList, not a MemberInfo [].
24718         (TypeHandle): New class, implements IMemberContainer.  We create
24719         one instance of this class per type, it contains a MemberCache
24720         which is used to do the member lookups.
24721         (MemberCache): New class.  Each instance of this class contains
24722         all members of a type and a name-based hash table.
24723         (MemberCache.FindMembers): This is our new member lookup
24724         function.  First, it looks up all members of the requested name in
24725         the hash table.  Then, it walks this list and sorts out all
24726         applicable members and returns them.
24728 2002-08-13  Martin Baulig  <martin@gnome.org>
24730         In addition to a nice code cleanup, this gives us a performance
24731         increase of about 1.4% on GNU/Linux - not much, but it's already
24732         half a second for the self-hosting MCS compilation.
24734         * typemanager.cs (IMemberFinder): New interface.  It is used by
24735         TypeManager.FindMembers to call FindMembers on a TypeContainer,
24736         Enum, Delegate or Interface.
24737         (TypeManager.finder_to_member_finder): New PtrHashtable.
24738         (TypeManager.finder_to_container): Removed.
24739         (TypeManager.finder_to_delegate): Removed.
24740         (TypeManager.finder_to_interface): Removed.
24741         (TypeManager.finder_to_enum): Removed.
24743         * interface.cs (Interface): Implement IMemberFinder.
24745         * delegate.cs (Delegate): Implement IMemberFinder.
24747         * enum.cs (Enum): Implement IMemberFinder.
24749         * class.cs (TypeContainer): Implement IMemberFinder.
24751 2002-08-12  Martin Baulig  <martin@gnome.org>
24753         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
24755 2002-08-12  Martin Baulig  <martin@gnome.org>
24757         * ecore.cs (ITypeExpression): New interface for expressions which
24758         resolve to a type.
24759         (TypeExpression): Renamed to TypeLookupExpression.
24760         (Expression.DoResolve): If we're doing a types-only lookup, the
24761         expression must implement the ITypeExpression interface and we
24762         call DoResolveType() on it.
24763         (SimpleName): Implement the new ITypeExpression interface.
24764         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
24765         hack, the situation that we're only looking up types can't happen
24766         anymore when this method is called.  Moved the type lookup code to
24767         DoResolveType() and call it.
24768         (SimpleName.DoResolveType): This ITypeExpression interface method
24769         is now doing the types-only lookup.
24770         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
24771         (ResolveFlags): Added MaskExprClass.
24773         * expression.cs (MemberAccess): Implement the ITypeExpression
24774         interface.
24775         (MemberAccess.DoResolve): Added support for a types-only lookup
24776         when we're called via ITypeExpression.DoResolveType().
24777         (ComposedCast): Implement the ITypeExpression interface.
24779         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
24780         Expression.Resolve() with ResolveFlags.Type instead.
24782 2002-08-12  Martin Baulig  <martin@gnome.org>
24784         * interface.cs (Interface.Define): Apply attributes.
24786         * attribute.cs (Attribute.ApplyAttributes): Added support for
24787         interface attributes.
24789 2002-08-11  Martin Baulig  <martin@gnome.org>
24791         * statement.cs (Block.Emit): Only check the "this" variable if we
24792         do not always throw an exception.
24794         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
24795         whether the property has a set accessor.
24797 2002-08-11  Martin Baulig  <martin@gnome.org>
24799         Added control flow analysis support for structs.
24801         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
24802         with control flow analysis turned off.
24803         (IVariable): New interface.
24804         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
24805         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
24806         (FieldExpr.DoResolve): Resolve the instance expression with flow
24807         analysis turned off and do the definite assignment check after the
24808         resolving when we know what the expression will resolve to.
24810         * expression.cs (LocalVariableReference, ParameterReference):
24811         Implement the new IVariable interface, only call the flow analysis
24812         code if ec.DoFlowAnalysis is true.
24813         (This): Added constructor which takes a Block argument.  Implement
24814         the new IVariable interface.
24815         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
24816         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
24817         This does the definite assignment checks for struct members.
24819         * class.cs (Constructor.Emit): If this is a non-static `struct'
24820         constructor which doesn't have any initializer, call
24821         Block.AddThisVariable() to tell the flow analysis code that all
24822         struct elements must be initialized before control returns from
24823         the constructor.
24825         * statement.cs (MyStructInfo): New public class.
24826         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
24827         argument to this indexer.  If non-zero, check an individual struct
24828         member, not the whole struct.
24829         (FlowBranching.CheckOutParameters): Check struct members.
24830         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
24831         overloaded versions of these methods which take an additional
24832         `int field_idx' argument to check struct members.
24833         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
24834         overloaded versions of these methods which take an additional
24835         `string field_name' argument to check struct member.s
24836         (VariableInfo): Implement the IVariable interface.
24837         (VariableInfo.StructInfo): New public property.  Returns the
24838         MyStructInfo instance of the variable if it's a struct or null.
24839         (Block.AddThisVariable): New public method.  This is called from
24840         Constructor.Emit() for non-static `struct' constructor which do
24841         not have any initializer.  It creates a special variable for the
24842         "this" instance variable which will be checked by the flow
24843         analysis code to ensure that all of the struct's fields are
24844         initialized before control returns from the constructor.
24845         (UsageVector): Added support for struct members.  If a
24846         variable/parameter is a struct with N members, we reserve a slot
24847         in the usage vector for each member.  A struct is considered fully
24848         initialized if either the struct itself (slot 0) or all its
24849         members are initialized.
24851 2002-08-08  Martin Baulig  <martin@gnome.org>
24853         * driver.cs (Driver.MainDriver): Only report an error CS5001
24854         if there were no compilation errors.
24856         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
24857         `UnsafeContext' property to determine whether the parent is in
24858         unsafe context rather than checking the parent's ModFlags:
24859         classes nested in an unsafe class are unsafe as well.
24861 2002-08-08  Martin Baulig  <martin@gnome.org>
24863         * statement.cs (UsageVector.MergeChildren): Distinguish between
24864         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
24865         we return.  Added test17() and test18() to test-154.cs.
24867 2002-08-08  Martin Baulig  <martin@gnome.org>
24869         * typemanager.cs (TypeManager.FilterWithClosure): If we have
24870         Family access, make sure the invoking type isn't a subclass of the
24871         queried type (that'd be a CS1540).
24873         * ecore.cs (Expression.MemberLookup): Added overloaded version of
24874         this method which takes an additional `Type invocation_type'.
24876         * expression.cs (BaseAccess.DoResolve): Use the base type as
24877         invocation and query type.
24878         (MemberAccess.DoResolve): If the lookup failed and we're about to
24879         report a CS0122, try a lookup with the ec.ContainerType - if this
24880         succeeds, we must report a CS1540.
24882 2002-08-08  Martin Baulig  <martin@gnome.org>
24884         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
24885         (MethodGroupExpr): Implement the IMemberExpr interface.
24887         * expression (MemberAccess.ResolveMemberAccess): No need to have
24888         any special code for MethodGroupExprs anymore, they're now
24889         IMemberExprs.   
24891 2002-08-08  Martin Baulig  <martin@gnome.org>
24893         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
24894         Family, FamANDAssem and FamORAssem permissions.
24895         (TypeManager.IsSubclassOrNestedChildOf): New public method.
24897 2002-08-08  Martin Baulig  <martin@gnome.org>
24899         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
24900         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
24901         or loop block.
24903 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
24905         * driver.cs: implemented /resource option to embed managed resources.
24907 2002-08-07  Martin Baulig  <martin@gnome.org>
24909         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
24910         (FieldBase.HasFieldInitializer): New public property.
24911         (FieldBase.GetInitializerExpression): New public method.  Resolves and
24912         returns the field initializer and makes sure it is only resolved once.
24913         (TypeContainer.EmitFieldInitializers): Call
24914         FieldBase.GetInitializerExpression to get the initializer, this ensures
24915         that it isn't resolved multiple times.
24917         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
24918         the resolving process (SimpleName/MemberLookup) that we're currently
24919         emitting a field initializer (which must not access any instance members,
24920         this is an error CS0236).
24922         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
24923         argument, if the `IsFieldInitializer' flag is set, we must report and
24924         error CS0236 and not an error CS0120.   
24926 2002-08-07  Martin Baulig  <martin@gnome.org>
24928         * ecore.cs (IMemberExpr): New public interface.
24929         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
24930         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
24931         if the expression is an IMemberExpr.
24933         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
24934         to be null, implicitly default to `this' if we're non-static in
24935         this case.  Simplified the code a lot by using the new IMemberExpr
24936         interface.  Also fixed bug #28176 here.
24938 2002-08-06  Martin Baulig  <martin@gnome.org>
24940         * cs-parser.jay (SimpleLookup): Removed.  We need to create
24941         ParameterReferences during semantic analysis so that we can do a
24942         type-only search when resolving Cast, TypeOf and SizeOf.
24943         (block): Pass the `current_local_parameters' to the Block's
24944         constructor.
24946         * class.cs (ConstructorInitializer): Added `Parameters parameters'
24947         argument to the constructor.
24948         (ConstructorInitializer.Resolve): Create a temporary implicit
24949         block with the parameters.
24951         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
24952         references here if we aren't doing a type-only search.
24954         * statement.cs (Block): Added constructor which takes a
24955         `Parameters parameters' argument.
24956         (Block.Parameters): New public property.
24958         * support.cs (InternalParameters.Parameters): Renamed `parameters'
24959         to `Parameters' and made it public readonly.
24961 2002-08-06  Martin Baulig  <martin@gnome.org>
24963         * ecore.cs (Expression.Warning): Made this public as well.
24965         * report.cs (Report.Debug): Print the contents of collections.
24967 2002-08-06  Martin Baulig  <martin@gnome.org>
24969         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
24970         used to tell Resolve() which kinds of expressions it may return.
24971         (Expression.Resolve): Added overloaded version of this method which
24972         takes a `ResolveFlags flags' argument.  This can be used to tell
24973         Resolve() which kinds of expressions it may return.  Reports a
24974         CS0118 on error.
24975         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
24976         ResolveFlags.SimpleName.
24977         (Expression.Error118): Added overloaded version of this method which
24978         takes a `ResolveFlags flags' argument.  It uses the flags to determine
24979         which kinds of expressions are allowed.
24981         * expression.cs (Argument.ResolveMethodGroup): New public method.
24982         Resolves an argument, but allows a MethodGroup to be returned.
24983         This is used when invoking a delegate.
24985         * TODO: Updated a bit.
24987 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24989         Fixed compilation with csc.
24991         * ecore.cs: Expression.Error made public. Is this correct? Should
24992         Warning be made public too?
24994         * expression.cs: use ea.Location instead of ea.loc.
24995         [FIXME:  Filed as bug #28607: MCS must report these errors.]
24997 2002-08-06  Martin Baulig  <martin@gnome.org>
24999         * ecore.cs (Expression.loc): Moved the location here instead of
25000         duplicating it in all derived classes.
25001         (Expression.Location): New public property.
25002         (Expression.Error, Expression.Warning): Made them non-static and
25003         removed the location argument.
25004         (Expression.Warning): Added overloaded version which takes an
25005         `int level' argument.
25006         (Expression.Error118): Make this non-static and removed the
25007         expression and location arguments.
25008         (TypeExpr): Added location argument to the constructor.
25010         * expression.cs (StaticCallExpr): Added location argument to
25011         the constructor.
25012         (Indirection, PointerArithmetic): Likewise.
25013         (CheckedExpr, UnCheckedExpr): Likewise.
25014         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
25015         (StringPtr): Likewise.
25018 2002-08-05  Martin Baulig  <martin@gnome.org>
25020         * expression.cs (BaseAccess.DoResolve): Actually report errors.
25022         * assign.cs (Assign.DoResolve): Check whether the source
25023         expression is a value or variable.
25025         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
25026         while resolving the corresponding blocks.
25028         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
25029         an error, don't silently return null.
25031         * statement.cs (Block.AddVariable): Do the error reporting here
25032         and distinguish between CS0128 and CS0136.
25033         (Block.DoResolve): Report all unused labels (warning CS0164).
25034         (LabeledStatement): Pass the location to the constructor.
25035         (LabeledStatement.HasBeenReferenced): New property.
25036         (LabeledStatement.Resolve): Set it to true here.
25038         * statement.cs (Return.Emit): Return success even after reporting
25039         a type mismatch error (CS0126 or CS0127), this is what csc does and
25040         it avoids confusing the users with any consecutive errors.
25042 2002-08-05  Martin Baulig  <martin@gnome.org>
25044         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
25046         * const.cs (Const.LookupConstantValue): Catch circular definitions.
25048         * expression.cs (MemberAccess.DoResolve): Silently return if an
25049         error has already been reported.
25051         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
25052         error has already been reported.
25054 2002-08-05  Martin Baulig  <martin@gnome.org>
25056         * statement.cs (UsageVector): Only initialize the `parameters'
25057         vector if we actually have any "out" parameters.
25059 2002-08-05  Martin Baulig  <martin@gnome.org>
25061         * expression.cs (Binary.ResolveOperator): When combining delegates,
25062         they must have the same type.
25064 2002-08-05  Martin Baulig  <martin@gnome.org>
25066         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
25067         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
25068         work with the ms runtime and we also don't need it: if we're a
25069         PropertyBuilder and not in the `indexer_arguments' hash, then we
25070         are a property and not an indexer.
25072         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
25073         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
25074         since the latter one doesn't work with the ms runtime.
25076 2002-08-03  Martin Baulig  <martin@gnome.org>
25078         Fixed bugs #27998 and #22735.
25080         * class.cs (Method.IsOperator): New public field.
25081         (Method.CheckBase): Report CS0111 if there's already a method
25082         with the same parameters in the current class.  Report CS0508 when
25083         attempting to change the return type of an inherited method.
25084         (MethodData.Emit): Report CS0179 if a method doesn't have a body
25085         and it's not marked abstract or extern.
25086         (PropertyBase): New abstract base class for Property and Indexer.
25087         (PropertyBase.CheckBase): Moved here from Property and made it work
25088         for indexers.
25089         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
25090         the same so we can reuse it there.
25091         (Property, Indexer): Derive from PropertyBase.
25092         (MethodSignature.inheritable_property_signature_filter): New delegate
25093         to find properties and indexers.
25095         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
25096         argument and improved error reporting.
25098         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
25099         EmptyReadOnlyParameters and made it a property.
25101         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
25102         version of this method which takes a `PropertyInfo indexer'.
25103         (TypeManager.RegisterIndexer): New method.
25105         * class.cs: Added myself as author of this file :-)
25107 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25109         * class.cs: fixed compilation on windoze.
25111 2002-08-03  Martin Baulig  <martin@gnome.org>
25113         * interface.cs (Interface.GetInterfaceBases): Check whether all
25114         base interfaces are at least as accessible than the current one.
25116         * class.cs (TypeContainer.GetClassBases): Check whether base types
25117         are at least as accessible than the current type.
25118         (TypeContainer.AsAccessible): Implemented and made non-static.
25119         (MemberBase.CheckParameters): Report errors if the accessibility
25120         checks fail.
25122         * delegate.cs (Delegate.Delegate): The default visibility is
25123         internal for top-level types and private for nested types.
25124         (Delegate.Define): Report errors if the accessibility checks fail.
25126         * enum.cs (Enum.Enum): The default visibility is internal for
25127         top-level types and private for nested types.
25128         (Enum.DefineType): Compute the correct visibility.
25130         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
25131         function which takes a `bool is_toplevel' instead of a TypeContainer.
25133         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
25134         builtin type.
25136 2002-08-02  Martin Baulig  <martin@gnome.org>
25138         * expression.cs (LocalVariableReferenc): Added constructor which
25139         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
25140         (LocalVariableReference.IsReadOnly): New property.
25141         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
25142         variable is readonly, use our own readonly flag to do this; you can
25143         use the new constructor to get a writable reference to a read-only
25144         variable.
25146         * cs-parser.jay (foreach_statement, using_statement): Get a writable
25147         reference to the local variable.
25149 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
25151         * rootcontext.cs (ResolveCore): Also include System.Exception
25153         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
25154         we reach an EmptyStatement.
25156         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
25157         is also fine.
25159         * expression.cs (Binary.ResolveOperator): Check error result in
25160         two places.
25162         use brtrue/brfalse directly and avoid compares to null.
25164 2002-08-02  Martin Baulig  <martin@gnome.org>
25166         * class.cs (TypeContainer.Define): Define all nested interfaces here.
25167         Fixes bug #28407, added test-155.cs.
25169 2002-08-01  Martin Baulig  <martin@gnome.org>
25171         * class.cs (Event.EmitDefaultMethod): Make this work with static
25172         events.  Fixes #28311, added verify-3.cs.
25174 2002-08-01  Martin Baulig  <martin@gnome.org>
25176         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
25177         `is_disposable' fields.
25178         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
25179         `hm.is_disposable' if we're using the collection pattern.
25180         (Foreach.EmitCollectionForeach): Use the correct type for the
25181         enumerator's local variable, only emit the try/finally block if
25182         necessary (fixes #27713).
25184 2002-08-01  Martin Baulig  <martin@gnome.org>
25186         * ecore.cs (Expression.report118): Renamed to Error118 and made
25187         it public static.
25189         * statement.cs (Throw.Resolve): Check whether the expression is of
25190         the correct type (CS0118) and whether the type derives from
25191         System.Exception (CS0155).
25192         (Catch.Resolve): New method.  Do the type lookup here and check
25193         whether it derives from System.Exception (CS0155).
25194         (Catch.CatchType, Catch.IsGeneral): New public properties.
25196         * typemanager.cs (TypeManager.exception_type): Added.
25198 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
25200         * driver.cs: Updated About function.
25202 2002-07-31  Martin Baulig  <martin@gnome.org>
25204         Implemented Control Flow Analysis.
25206         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
25207         (EmitContext.CurrentBranching): Added.
25208         (EmitContext.StartFlowBranching): Added.
25209         (EmitContext.EndFlowBranching): Added.
25210         (EmitContext.KillFlowBranching): Added.
25211         (EmitContext.IsVariableAssigned): Added.
25212         (EmitContext.SetVariableAssigned): Added.
25213         (EmitContext.IsParameterAssigned): Added.
25214         (EmitContext.SetParameterAssigned): Added.
25215         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
25216         Added control flow analysis stuff here.
25218         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
25219         resolve the expression as lvalue.
25220         (LocalVariableReference.DoResolve): Check whether the variable has
25221         already been assigned.
25222         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
25223         the parameter as assigned here.
25224         (ParameterReference.DoResolve): Check whether the parameter has already
25225         been assigned.
25226         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
25227         expression as lvalue.
25229         * statement.cs (FlowBranching): New class for the flow analysis code.
25230         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
25231         (LabeledStatement.IsDefined): New public property.
25232         (LabeledStatement.AddUsageVector): New public method to tell flow
25233         analyis that the label may be reached via a forward jump.
25234         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
25235         flow analysis.
25236         (VariableInfo.Number): New public field.  This is used by flow analysis
25237         to number all locals of a block.
25238         (Block.CountVariables): New public property.  This is the number of
25239         local variables in this block (including the locals from all parent
25240         blocks).
25241         (Block.EmitMeta): Number all the variables.
25243         * statement.cs: Added flow analysis support to all classes.
25245 2002-07-31  Martin Baulig  <martin@gnome.org>
25247         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
25248         To get debugging messages, compile mcs with /define:MCS_DEBUG and
25249         then use this argument.
25251         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
25253         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
25254         use this to specify /define options.
25256 2002-07-29  Martin Baulig  <martin@gnome.org>
25258         * statement.cs (Fixed): Moved all code that does variable lookups
25259         and resolvings from Emit to Resolve.
25261         * statement.cs (For): Moved all code that does variable lookups
25262         and resolvings from Emit to Resolve.
25264         * statement.cs (Using): Moved all code that does variable lookups
25265         and resolvings from Emit to Resolve.
25267 2002-07-29  Martin Baulig  <martin@gnome.org>
25269         * attribute.cs (Attribute.Resolve): Explicitly catch a
25270         System.NullReferenceException when creating the
25271         CustromAttributeBuilder and report a different warning message.
25273 2002-07-29  Martin Baulig  <martin@gnome.org>
25275         * support.cs (ParameterData.ParameterName): Added method to
25276         get the name of a parameter.
25278         * typemanager.cs (TypeManager.IsValueType): New public method.
25280 2002-07-29  Martin Baulig  <martin@gnome.org>
25282         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
25283         is a flag which specifies that it's either ref or out.
25284         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
25285         the out parameter to `out Parameter.Modifier mod', also set the
25286         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
25288         * support.cs (InternalParameters.ParameterModifier): Distinguish
25289         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
25290         Parameter.Modifier.ISBYREF flag if it's either ref or out.
25292         * expression.cs (Argument.GetParameterModifier): Distinguish
25293         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
25294         Parameter.Modifier.ISBYREF flag if it's either ref or out.
25296 2002-07-29  Martin Baulig  <martin@gnome.org>
25298         * expression.cs (ParameterReference.ParameterReference): Added
25299         `Location loc' argument to the constructor.
25301         * cs-parser.jay: Pass location to ParameterReference.
25303 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
25305         * statement.cs (Try): Initialize the location.
25307         * cs-parser.jay: pass location to Try.
25309         * expression.cs (Unary.Reduce): Change the prototype to return
25310         whether a constant fold could be performed or not.  The result is
25311         returned in an out parameters.  In the case of Indirection and
25312         AddressOf, we want to perform the full tests.
25314 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
25316         * statement.cs (Statement.Emit): Flag dead code.
25318 2002-07-27  Andrew Birkett  <andy@nobugs.org>
25320         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
25322 2002-07-27  Martin Baulig  <martin@gnome.org>
25324         * class.cs (MethodData.Define): Put back call to
25325         TypeManager.AddMethod(), accidentally commented this out.
25327         * report.cs (Debug): New public method to print debugging information,
25328         this is `[Conditional ("DEBUG")]'.
25330 2002-07-26  Martin Baulig  <martin@gnome.org>
25332         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
25333         (switch_statement): Push the current_block to the switch_stack and
25334         pop it again when we're done with the switch.
25335         (switch_section): The new block is a child of the current_block.
25336         Fixes bug #24007, added test-152.cs.
25338 2002-07-27  Martin Baulig  <martin@gnome.org>
25340         * expression.cs (Invocation.EmitArguments): When calling a varargs
25341         function with only its fixed arguments, we need to pass an empty
25342         array.
25344 2002-07-27  Martin Baulig  <martin@gnome.org>
25346         Mono 0.13 has been released.
25348 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
25350         * driver.cs: Rename --resource to --linkres, because that is what
25351         we do currently, we dont support --resource yet.
25353         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
25355 2002-07-25  Martin Baulig  <martin@gnome.org>
25357         * class.cs (MethodData): New public class.  This is a `method builder'
25358         class for a method or one accessor of a Property/Indexer/Event.
25359         (MethodData.GetMethodFlags): Moved here from MemberBase.
25360         (MethodData.ApplyAttributes): Likewise.
25361         (MethodData.ApplyObsoleteAttribute): Likewise.
25362         (MethodData.ApplyConditionalAttribute): Likewise.
25363         (MethodData.ApplyDllImportAttribute): Likewise.
25364         (MethodData.CheckAbstractAndExternal): Likewise.
25365         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
25366         (MethodData.Emit): Formerly known as Method.Emit().
25367         (MemberBase): Moved everything which was specific to a single
25368         accessor/method to MethodData.
25369         (Method): Create a new MethodData and call Define() and Emit() on it.
25370         (Property, Indexer, Event): Create a new MethodData objects for each
25371         accessor and call Define() and Emit() on them.
25373 2002-07-25  Martin Baulig  <martin@gnome.org>
25375         Made MethodCore derive from MemberBase to reuse the code from there.
25376         MemberBase now also checks for attributes.
25378         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
25379         (MemberBase.GetMethodFlags): Moved here from class Method and marked
25380         as virtual.
25381         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
25382         `CallingConventions cc' and `Attributes opt_attrs' arguments.
25383         (MemberBase.ApplyAttributes): New virtual method; applies the
25384         attributes to a method or accessor.
25385         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
25386         (MemberBase.ApplyConditionalAttribute): Likewise.
25387         (MemberBase.ApplyDllImportAttribute): Likewise.
25388         (MemberBase.CheckAbstractAndExternal): Likewise.
25389         (MethodCore.ParameterTypes): This is now a property instead of a
25390         method, it's initialized from DoDefineParameters().
25391         (MethodCore.ParameterInfo): Removed the set accessor.
25392         (MethodCore.DoDefineParameters): New protected virtual method to
25393         initialize ParameterTypes and ParameterInfo.
25394         (Method.GetReturnType): We can now simply return the MemberType.
25395         (Method.GetMethodFlags): Override the MemberBase version and add
25396         the conditional flags.
25397         (Method.CheckBase): Moved some code from Define() here, call
25398         DoDefineParameters() here.
25399         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
25400         here to avoid some larger code duplication.
25401         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
25402         ensure that abstract and external accessors don't declare a body.
25404         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
25405         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
25406         lookup in the attribute's parent classes, so we need to abort as soon
25407         as we found the first match.
25408         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
25409         the attribute has no arguments.
25411         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
25412         of a Method.
25414 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25416         * cs-parser.jay: reverted previous patch.
25418 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25420         * cs-parser.jay: fixed bug #22119.
25422 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25424         * attribute.cs: fixed compilation. The error was:
25425         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
25426         be assigned to before control leaves the current method."
25427         [FIXME:  Filed as bug #28186: MCS must report this error.]
25429 2002-07-25  Martin Baulig  <martin@gnome.org>
25431         * attribute.cs (Attribute.Conditional_GetConditionName): New static
25432         method to pull the condition name ouf of a Conditional attribute.
25433         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
25434         the obsolete message and error flag out of an Obsolete attribute.
25436         * class.cs (Method.GetMethodFlags): New public method to get the
25437         TypeManager.MethodFlags for this method.
25438         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
25439         private methods.
25440         (Method.Define): Get and apply the Obsolete and Conditional attributes;
25441         if we're overriding a virtual function, set the new private variable
25442         `parent_method'; call the new TypeManager.AddMethod().
25444         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
25445         the MethodBuilder and the Method in a PtrHashtable.
25446         (TypeManager.builder_to_method): Added for this purpose.
25447         (TypeManager.MethodFlags): Added IsObsoleteError.
25448         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
25449         Obsolete and Conditional arguments in MethodBuilders.  If we discover
25450         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
25451         the message from the attribute.
25453 2002-07-24  Martin Baulig  <martin@gnome.org>
25455         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
25456         preprocessor directives, ensure that the argument to #define/#undef is
25457         exactly one identifier and that it's actually an identifier.
25459         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
25460         did not work ....
25462 2002-07-24  Martin Baulig  <martin@gnome.org>
25464         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
25465         initialize it to TypeManager.object_type in the constructor.
25466         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
25467         of the `hm.get_current' method if we're using the collection pattern.
25468         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
25469         for the explicit conversion to make it work when we're using the collection
25470         pattern and the `Current' property has a different return type than `object'.
25471         Fixes #27713.
25473 2002-07-24  Martin Baulig  <martin@gnome.org>
25475         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
25476         does not match, but don't report any errors.  This method is called in
25477         order for all methods in a MethodGroupExpr until a matching method is
25478         found, so we don't want to bail out if the first method doesn't match.
25479         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
25480         matches, report the 123.  Fixes #28070.
25482 2002-07-24  Martin Baulig  <martin@gnome.org>
25484         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
25485         TypeManager.TypeToCoreType() to the top of the method so the
25486         following equality checks will work.  Fixes #28107.
25488 2002-07-24  Martin Baulig  <martin@gnome.org>
25490         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
25491         operand is of type uint, and the other operand is of type sbyte,
25492         short or int, the operands are converted to type long." -
25493         Actually do what this comment already told us.  Fixes bug #28106,
25494         added test-150.cs.
25496 2002-07-24  Martin Baulig  <martin@gnome.org>
25498         * class.cs (MethodBase): New abstract class.  This is now a base
25499         class for Property, Indexer and Event to avoid some code duplication
25500         in their Define() and DefineMethods() methods.
25501         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
25502         generic methods for Define() and DefineMethods().
25503         (FieldBase): Derive from MemberBase, not MemberCore.
25504         (Property): Derive from MemberBase, not MemberCore.
25505         (Property.DefineMethod): Moved all the code from this method to the
25506         new MethodBase.DefineAccessor(), just call it with appropriate
25507         argumetnts.
25508         (Property.Define): Call the new Property.DoDefine(), this does some
25509         sanity checks and we don't need to duplicate the code everywhere.
25510         (Event): Derive from MemberBase, not MemberCore.
25511         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
25512         accessors, this will also make them work with interface events.
25513         (Indexer): Derive from MemberBase, not MemberCore.
25514         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
25515         (Indexer.Define): Use the new MethodBase functions.
25517         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
25518         argument to the constructor.
25519         (Interface.FindMembers): Added support for interface events.
25520         (Interface.PopluateEvent): Implemented.
25522         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
25524 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
25526         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
25527         but this is required to check for a method name being the same as
25528         the containing class.  
25530         Handle this now.
25532 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25534         * interface.cs: initialize variable.
25536 2002-07-23  Martin Baulig  <martin@gnome.org>
25538         Implemented the IndexerName attribute in interfaces.
25540         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
25541         name if this is an explicit interface implementation.
25542         (Indexer.InterfaceIndexerName): New public variable.  If we're
25543         implementing an interface indexer, this is the IndexerName in that
25544         interface.  Otherwise, it's the IndexerName.
25545         (Indexer.DefineMethod): If we're implementing interface indexer,
25546         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
25547         and Pending.ImplementIndexer methods.
25548         (Indexer.Define): Also define the PropertyBuilder if we're
25549         implementing an interface indexer and this is neither an explicit
25550         interface implementation nor do the IndexerName match the one in
25551         the interface.
25553         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
25554         If a method is defined here, then we always need to create a proxy
25555         for it.  This is used when implementing interface indexers.
25556         (Pending.IsInterfaceIndexer): New public method.
25557         (Pending.ImplementIndexer): New public method.
25558         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
25559         This is used when implementing interface indexers to define a proxy
25560         if necessary.
25561         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
25562         define a proxy if necessary.
25564         * interface.cs (Interface.IndexerName): New public variable.
25565         (Interface.PopulateIndexer): Set the IndexerName.
25566         (Interface.DefineIndexers): New private method.  Populate all the
25567         indexers and make sure their IndexerNames match.
25569         * typemanager.cs (IndexerPropertyName): Added support for interface
25570         indexers.
25572 2002-07-22  Martin Baulig  <martin@gnome.org>
25574         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
25575         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
25576         ret if HasReturnLabel.
25577         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
25578         variables.
25580         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
25581         and set the ec.LoopBeginTryCatchLevel.
25582         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
25583         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
25584         the current ec.TryCatchLevel, the branch goes out of an exception
25585         block.  In this case, we need to use Leave and not Br.
25587 2002-07-22  Martin Baulig  <martin@gnome.org>
25589         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
25590         block unless the block does not always return or it is contained in
25591         another try { ... } catch { ... } block.  Fixes bug #26506.
25592         Added verify-1.cs to the test suite.
25594 2002-07-22  Martin Baulig  <martin@gnome.org>
25596         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
25597         then we do not always return.  Fixes bug #24985.
25599 2002-07-22  Martin Baulig  <martin@gnome.org>
25601         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
25602         lookup on a per-class level; ie. walk up the class hierarchy until we
25603         found at least one applicable method, then choose the best among them.
25604         Fixes bug #24463 and test-29.cs.
25606 2002-07-22  Martin Baulig  <martin@gnome.org>
25608         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
25609         return types of the methods.  The return type is not part of the
25610         signature and we must not check it to make the `new' modifier work.
25611         Fixes bug #27999, also added test-147.cs.
25612         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
25614         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
25615         on the method's return type.
25617 2002-07-21  Martin Baulig  <martin@gnome.org>
25619         * assign.cs: Make this work if the rightmost source is a constant and
25620         we need to do an implicit type conversion.  Also adding a few more tests
25621         to test-38.cs which should have caught this.
25623         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
25624         target in the makefile for this.  The makefile.gnu is primarily intended
25625         for end-users who don't want to debug the compiler.
25627 2002-07-21  Martin Baulig  <martin@gnome.org>
25629         * assign.cs: Improved the Assign class so it can now handle embedded
25630         assignments (X = Y = Z = something).  As a side-effect this'll now also
25631         consume less local variables.  test-38.cs now passes with MCS, added
25632         a few new test cases to that test.
25634 2002-07-20  Martin Baulig  <martin@gnome.org>
25636         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
25637         instructions.  Fixes bug #27977, also added test-146.cs.
25639 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25641         * cs-tokenizer.cs: fixed getHex ().
25643 2002-07-19  Martin Baulig  <martin@gnome.org>
25645         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
25646         not Type.GetType() to lookup the array type.  This is needed when
25647         we're constructing an array of a user-defined type.
25648         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
25649         single-dimensional arrays, but also for single-dimensial arrays of
25650         type decimal.
25652 2002-07-19  Martin Baulig  <martin@gnome.org>
25654         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
25655         this function is called, it's not allowed to share LocalBuilders
25656         among ILGenerators.
25658 2002-07-19  Martin Baulig  <martin@gnome.org>
25660         * expression.cs (Argument.Resolve): Report an error 118 when trying
25661         to pass a type as argument.
25663 2002-07-18  Martin Baulig  <martin@gnome.org>
25665         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
25666         Conv_R_Un for the signed `long' type.
25668 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
25670         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
25671         `expr' for the temporary result, as that will fail if we do
25672         multiple resolves on the same expression.
25674 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
25676         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
25677         ec.TypeContainer for looking up aliases. 
25679         * class.cs (TypeContainer): Remove LookupAlias from here.
25681         * decl.cs (DeclSpace); Move here.
25683 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
25685         * class.cs (FindMembers): Only call filter if the constructor
25686         bulider is not null.
25688         Also handle delegates in `NestedTypes' now.  Now we will perform
25689         type lookups using the standard resolution process.  This also
25690         fixes a bug.
25692         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
25693         This uses Expressions (the limited kind that can be parsed by the
25694         tree) instead of strings.
25696         * expression.cs (ComposedCast.ToString): Implement, used to flag
25697         errors since now we have to render expressions.
25699         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
25700         FormArrayType. 
25702         * ecore.cs (SimpleName.ToString): ditto.
25704         * cs-parser.jay: Instead of using strings to assemble types, use
25705         Expressions to assemble the type (using SimpleName, ComposedCast,
25706         MemberAccess).  This should fix the type lookups in declarations,
25707         because we were using a different code path for this.
25709         * statement.cs (Block.Resolve): Continue processing statements
25710         even when there is an error.
25712 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
25714         * class.cs (Event.Define): Also remove the `remove' method from
25715         the list of pending items.
25717         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
25718         generate more compact code. 
25720 2002-07-17  Martin Baulig  <martin@gnome.org>
25722         * const.cs (Const.LookupConstantValue): Add support for constant
25723         `unchecked' and `checked' expressions.
25724         Also adding test case test-140.cs for this.
25726 2002-07-17  Martin Baulig  <martin@gnome.org>
25728         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
25729         check whether mi.ReturnType implements the IEnumerator interface; the
25730         `==' and the IsAssignableFrom() will fail in this situation.
25732 2002-07-16  Ravi Pratap  <ravi@ximian.com>
25734         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
25735         here too.
25737 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25739         * expression.cs: fixed bug #27811.
25741 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
25743         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
25744         Molaro: when we are a ref, the value already contains a pointer
25745         value, do not take the address of it.
25747 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
25748         * removed mb-parser.jay and mb-tokenizer.cs
25750 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
25752         * expression.cs: check against the building corlib void type.
25754 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
25756         * ecore.cs: fix for valuetype static readonly fields: when 
25757         initializing them, we need their address, not the address of a copy.
25759 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
25761         * typemanager.cs: register also enum_type in corlib.
25763 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
25765         * class.cs: allow calling this (but not base) initializers in structs.
25767 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
25769         * ecore.cs: make sure we compare against the building base types
25770         in GetTypeSize ().
25772 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
25774         * typemanager.cs: fix TypeToCoreType() to handle void and object
25775         (corlib gets no more typerefs after this change).
25777 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
25779         * expression.cs (ArrayCreation.EmitArrayArguments): use
25780         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
25782         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
25783         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
25784         array indexes, the runtime actually forbids them.
25786         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
25787         for array arguments here.
25789         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
25790         instead of the default for ValueTypes.
25792         (New.DoEmit): Use IsValueType instead of
25793         IsSubclassOf (value_type)
25794         (New.DoResolve): ditto.
25795         (Invocation.EmitCall): ditto.
25797         * assign.cs (Assign): ditto.
25799         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
25800         Statements *are* currently doing part of their resolution during
25801         Emit.  
25803         Expressions do always resolve during resolve, but statements are
25804         only required to propagate resolution to their children.
25806 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
25808         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
25810         (LoadAssembly): Do not add the dll if it is already specified
25812         (MainDriver): Add the System directory to the link path at the end,
25813         after all the other -L arguments. 
25815         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
25816         wrong opcode for loading bytes and bools (ldelem.i1 instead of
25817         ldelem.u1) and using the opposite for sbytes.
25819         This fixes Digger, and we can finally run it.
25821         * driver.cs (UnixParseOption): Move the option parsing here.  
25822         (CSCParseOption): Implement CSC-like parsing of options.
25824         We now support both modes of operation, the old Unix way, and the
25825         new CSC-like way.  This should help those who wanted to make cross
25826         platform makefiles.
25828         The only thing broken is that /r:, /reference: and /lib: are not
25829         implemented, because I want to make those have the same semantics
25830         as the CSC compiler has, and kill once and for all the confussion
25831         around this.   Will be doing this tomorrow.
25833         * statement.cs (Unsafe.Resolve): The state is checked during
25834         resolve, not emit, so we have to set the flags for IsUnsfe here.
25836 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
25838         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
25839         not catch the Error_ObjectRefRequired in SimpleName (as it is
25840         possible to have a class/instance variable name that later gets
25841         deambiguated), we have to check this here.      
25843 2002-07-10  Ravi Pratap  <ravi@ximian.com>
25845         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
25846         make static and put into Expression.
25848         (Event.Define): Register the private field of the event with the 
25849         TypeManager so that GetFieldFromEvent can get at it.
25851         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
25852         keep track of the private field associated with an event which
25853         has no accessors.
25855         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
25856         private field.
25858         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
25860 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
25862         * expression.cs (Binary.EmitBranchable): this routine emits the
25863         Binary expression in a branchable context.  This basically means:
25864         we need to branch somewhere, not just get the value on the stack.
25866         This works together with Statement.EmitBoolExpression.
25868         * statement.cs (Statement.EmitBoolExpression): Use
25869         EmitBranchable. 
25871 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
25873         * statement.cs (For): Reduce the number of jumps in loops.
25875         (For): Implement loop inversion for the For statement.
25877         (Break): We can be breaking out of a Try/Catch controlled section
25878         (foreach might have an implicit try/catch clause), so we need to
25879         use Leave instead of Br.
25881         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
25882         now).  If the instace expression supports IMemoryLocation, we use
25883         the AddressOf method from the IMemoryLocation to extract the
25884         address instead of emitting the instance.
25886         This showed up with `This', as we were emitting the instance
25887         always (Emit) instead of the Address of This.  Particularly
25888         interesting when This is a value type, as we dont want the Emit
25889         effect (which was to load the object).
25891 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
25893         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
25895         * statement.cs (Checked): Set the CheckedState during the resolve
25896         process too, as the ConvCast operations track the checked state on
25897         the resolve process, and not emit.
25899         * cs-parser.jay (namespace_member_declaration): Flag that we have
25900         found a declaration when we do.  This is used to flag error 1529
25902         * driver.cs: Report ok when we display the help only.
25904 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
25906         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
25908 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
25910         * cs-tokenizer.cs (define): We also have to track locally the
25911         defines.  AllDefines is just used for the Conditional Attribute,
25912         but we also need the local defines for the current source code. 
25914 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
25916         * statement.cs (While, For, Do): These loops can exit through a
25917         Break statement, use this information to tell whether the
25918         statement is the last piece of code.
25920         (Break): Flag that we break.
25922         * codegen.cs (EmitContexts): New `Breaks' state variable.
25924 2002-07-03  Martin Baulig  <martin@gnome.org>
25926         * class.cs (TypeContainer.MethodModifiersValid): Allow override
25927         modifiers in method declarations in structs.  Otherwise, you won't
25928         be able to override things like Object.Equals().
25930 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
25932         * class.cs (Method, Property, Indexer): Do not allow the public
25933         modifier to be used in explicit interface implementations.
25935         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
25936         override modifiers in method declarations in structs
25938 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
25940         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
25941         integer or real overflow, report an error
25943 2002-07-02  Martin Baulig  <martin@gnome.org>
25945         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
25946         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
25947         to tell the runtime about our newly created System.Object and
25948         System.ValueType types.
25950 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
25952         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
25953         struct instead of Ldarg/Starg.
25955 2002-07-02  Martin Baulig  <martin@gnome.org>
25957         * expression.cs (Indirection.Indirection): Call
25958         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
25960 2002-07-02  Martin Baulig  <martin@gnome.org>
25962         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
25963         ValueType, call TypeManager.TypeToCoreType() on it.
25964         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
25965         the OpCodes.Newarr argument.
25967 2002-07-02  Martin Baulig  <martin@gnome.org>
25969         * expression.cs (Invocation.EmitCall): When compiling corlib,
25970         replace all calls to the system's System.Array type to calls to
25971         the newly created one.
25973         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
25974         System.Array methods.
25975         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
25976         from the system's System.Array type which must be replaced.
25978 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
25980         * typemanager.cs: load unverifiable_code_ctor so we can build
25981         corlib using the correct type. Avoid using GetTypeCode() with
25982         TypeBuilders.
25983         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
25984         TypeManager.object_type to allow building corlib.
25986 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
25988         * ecore.cs: handle System.Enum separately in LoadFromPtr().
25990 2002-07-01  Martin Baulig  <martin@gnome.org>
25992         * class.cs: Make the last change actually work, we need to check
25993         whether `ifaces != null' to avoid a crash.
25995 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
25997         * class.cs: when we build structs without fields that implement
25998         interfaces, we need to add the interfaces separately, since there is
25999         no API to both set the size and add the interfaces at type creation
26000         time.
26002 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
26004         * expression.cs: the dimension arguments to the array constructors
26005         need to be converted if they are a long.
26007 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
26009         * class.cs: don't emit ldarg.0 if there is no parent constructor
26010         (fixes showstopper for corlib).
26012 2002-06-29  Martin Baulig  <martin@gnome.org>
26014         MCS now compiles corlib on GNU/Linux :-)
26016         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
26017         ie. check for MethodImplOptions.InternalCall.
26019         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
26020         and TypeManager.attribute_type are null, so we must explicitly check
26021         whether parent is not null to find out whether it's an attribute type.
26022         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
26023         and SetBuilder, not only if the property is neither abstract nor external.
26024         This is necessary to set the MethodImplOptions on the accessor methods.
26025         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
26026         SetBuilder, see Property.Emit().
26028         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
26029         populate "System.Object", "System.ValueType" and "System.Attribute" since
26030         they've already been populated from BootCorlib_PopulateCoreTypes().
26032 2002-06-29  Martin Baulig  <martin@gnome.org>
26034         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
26035         is the NullLiteral, we also need to make sure that target_type is not
26036         an enum type.   
26038 2002-06-29  Martin Baulig  <martin@gnome.org>
26040         * rootcontext.cs (RootContext.ResolveCore): We must initialize
26041         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
26042         before calling BootstrapCorlib_ResolveDelegate ().
26044 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26046         * statement.cs: fixed build-breaker. All tests passed ok.
26048 2002-06-27  Martin Baulig  <martin@gnome.org>
26050         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
26051         for System.Decimal when compiling corlib.
26053 2002-06-27  Martin Baulig  <martin@gnome.org>
26055         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
26056         switch blocks which contain nothing but a default clause.
26058 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
26060        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
26062 2002-06-27  Martin Baulig  <martin@gnome.org>
26064         * ecore.cs (PropertyExpr.PropertyExpr): Call
26065         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
26067         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
26068         is already a TypeBuilder.
26070 2002-06-27  Martin Baulig  <martin@gnome.org>
26072         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
26073         `target_type == TypeManager.array_type', not IsAssignableFrom() in
26074         the "from an array-type to System.Array" case.  This makes it work
26075         when compiling corlib.
26077 2002-06-27  Martin Baulig  <martin@gnome.org>
26079         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
26080         non-static PropertyExpr, set its InstanceExpression.  This makes
26081         the `ICollection.Count' property work in System/Array.cs.
26083 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
26085         * driver.cs: Made error handling more consistent.  Errors now
26086         tracked by Report class, so many methods which used to return int
26087         now return void.  Main() now prints success/failure and 
26088         errors/warnings message.
26090         Renamed '--probe' compiler argument to '--expect-error'.  Removed
26091         the magic number return values (123 and 124).  Now, if the
26092         expected error occurs, the compiler exits with success (exit value
26093         0).  If the compilation completes without seeing that particular
26094         error, the compiler exits with failure (exit value 1).  The
26095         makefile in mcs/errors has been changed to handle the new behaviour.
26097         * report.cs: Made 'expected error' number a property and renamed
26098         it from 'Probe' to 'ExpectedError'.
26100         * genericparser.cs: Removed error handling support, since it is
26101         now all done by Report class.
26103         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
26104         class, so parse() no longer returns an int.
26106         * namespace.cs: Use Report.Error instead of GenericParser.error
26108 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
26110         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
26111         TypeContainer.AddOperator): At the front of the list put the
26112         explicit implementations, so they get resolved/defined first. 
26114 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
26116         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
26117         interface type is implemented by this TypeContainer.  Used during
26118         explicit interface implementation.
26120         (Property.Define, Indexer.Define, Method.Define): Validate that
26121         the given interface in the explicit implementation is one of the
26122         base classes for the containing type.
26124         Also if we are explicitly implementing an interface, but there is
26125         no match in the pending implementation table, report an error.
26127         (Property.Define): Only define the property if we are
26128         not explicitly implementing a property from an interface.  Use the
26129         correct name also for those properties (the same CSC uses,
26130         although that is really not needed).
26132         (Property.Emit): Do not emit attributes for explicitly implemented
26133         properties, as there is no TypeBuilder.
26135         (Indexer.Emit): ditto.
26137         Hiding then means that we do not really *implement* a pending
26138         implementation, which makes code fail.
26140 2002-06-22  Martin Baulig  <martin@gnome.org>
26142         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
26143         the return value of Object.GetType().  [FIXME: we need to do this whenever
26144         we get a type back from the reflection library].
26146 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
26148         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
26150 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
26152         * attribute.cs: Return null if we can not look up the type.
26154         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
26155         the interface types found.
26157         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
26158         interface types found.
26160         * typemanager.cs (GetInterfaces): Make this routine returns alll
26161         the interfaces and work around the lame differences between
26162         System.Type and System.Reflection.Emit.TypeBuilder in the results
26163         result for GetInterfaces.
26165         (ExpandInterfaces): Given an array of interface types, expand and
26166         eliminate repeated ocurrences of an interface.  This expands in
26167         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
26168         be IA, IB, IC.
26170 2002-06-21  Martin Baulig  <martin@gnome.org>
26172         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
26173         on System.Enum.
26175 2002-06-21  Martin Baulig  <martin@gnome.org>
26177         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
26178         and called with one of the core types, return the corresponding typebuilder for
26179         that type.
26181         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
26182         element type.
26184 2002-06-21  Martin Baulig  <martin@gnome.org>
26186         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
26187         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
26188         (Expression.ConvertReferenceExplicit): Likewise.
26190         * expression.cs (ElementAccess.DoResolve): Likewise.
26191         (ElementAccess.DoResolveLValue): Likewise.
26193 2002-06-10  Martin Baulig  <martin@gnome.org>
26195         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
26196         add the "value" parameter to the parameter list.
26198         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
26199         to our caller.
26201 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
26203         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
26204         the argument to an int, uint, long or ulong, per the spec.  Also
26205         catch negative constants in array creation.
26207 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
26209         * class.cs: do not allow the same interface to appear twice in
26210         the definition list.
26212 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
26214         * ecore.cs: don't use ldlen with System.Array.
26216 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
26218         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
26220 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
26222         * modifiers.cs: produce correct field attributes for protected
26223         internal. Easy fix so miguel can work on ther harder stuff:-)
26225 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
26227         * pending.cs: New file.  Move the code from class.cs here.
26228         Support clearning the pending flag for all methods (when not doing
26229         explicit interface implementation).
26231 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
26233         * rootcontext.cs: added a couple more types needed to bootstrap.
26235 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
26237         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
26238         constructor in the type, instead of any constructor in the type
26239         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
26240         a bug in the Mono runtime when applying the params attribute). 
26242 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
26243         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
26245 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
26247         * expression.cs (Unary.ResolveOperator): Use TypeManager
26248         to resolve the type.
26250 2002-06-13  Ravi Pratap  <ravi@ximian.com>
26252         * cs-parser.jay (enum_member_declaration): Pass in the attributes
26253         attached.
26255         * enum.cs (AddEnumMember): Add support to store the attributes associated 
26256         with each member too.
26258         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
26259         field builders too - this takes care of the enum member case.
26261 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
26263         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
26264         address-of operator on both value types and pointers.
26266 2002-06-10  Martin Baulig  <martin@gnome.org>
26268         * interface.cs (Interface.PopulateIndexer): Add the indexer's
26269         PropertyBuilder to the `property_builders' list.
26271         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
26272         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
26273         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
26274         find any indexers which are inherited from an interface.
26276 2002-06-09  Martin Baulig  <martin@gnome.org>
26278         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
26279         the same type as the constant if necessary.  There's also a test-130.cs
26280         for this.
26282         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
26284         * typemanager.cs (TypeManager.ChangeType): Previously known as
26285         Enum.ChangeEnumType().
26287 2002-06-09  Martin Baulig  <martin@gnome.org>
26289         * expression.cs (Cast.TryReduce): Added support for consts.
26291 2002-06-08  Ravi Pratap  <ravi@ximian.com>
26293         * class.cs (Accessor): Hold attributes information so we can pass
26294         it along.
26296         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
26297         Modify to pass in attributes attached to the methods.
26299         (add_accessor_declaration, remove_accessor_declaration): Ditto.
26301         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
26302         to handle the Accessor kind :-)
26304         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
26306 2002-06-08  Martin Baulig  <martin@gnome.org>
26308         * expression.cs (Unary.TryReduceNegative): Added support for
26309         ULongConstants.
26311 2002-06-08  Martin Baulig  <martin@gnome.org>
26313         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
26314         name can't be found in the `defined_names' - the caller will do a
26315         MemberLookup in this case and thus find methods in System.Enum
26316         such as Enum.IsDefined().
26318 2002-06-08  Martin Baulig  <martin@gnome.org>
26320         * enum.cs (Enum.ChangeEnumType): This is a custom version of
26321         Convert.ChangeType() which works with TypeBuilder created types.
26322         (Enum.LookupEnumValue, Enum.Define): Use it here.
26324         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
26325         `TypeBuilder.BaseType != null' check.
26326         (TypeContainer.FindMembers): Only lookup parent members if we
26327         actually have a parent.
26328         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
26329         (ConstructorInitializer.Resolve): Likewise.
26331         * interface.cs (Interface.FindMembers): Added
26332         `TypeBuilder.BaseType != null' check.
26334         * rootcontext.cs (RootContext.ResolveCore): Added
26335         "System.Runtime.CompilerServices.IndexerNameAttribute" to
26336         classes_second_stage.
26338         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
26339         debug_type and trace_type when compiling with --nostdlib.       
26341 2002-06-07  Martin Baulig  <martin@gnome.org>
26343         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
26344         (AddField): Set it to true when adding a non-static field.
26345         (DefineType): Use `have_nonstatic_fields' to find out whether we
26346         have non-static fields, not `Fields != null'.
26348 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
26350         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
26351         dereferencing a null on the static-field code path)
26353 2002-05-30  Martin Baulig  <martin@gnome.org>
26355         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
26356         to take command line arguments.  Use reflection to call the new
26357         custom `Initialize' function on the symbol writer and pass it the
26358         command line arguments.
26360         * driver.cs (--debug-args): New command line argument to pass command
26361         line arguments to the symbol writer.
26363 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
26365         * assign.cs (DoResolve): Forgot to do the implicit conversion to
26366         the target type for indexers and properties.  Thanks to Joe for
26367         catching this.
26369 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
26371         * typemanager.cs (MethodFlags): returns the method flags
26372         (Obsolete/ShouldIgnore) that control warning emission and whether
26373         the invocation should be made, or ignored. 
26375         * expression.cs (Invocation.Emit): Remove previous hack, we should
26376         not do this on matching a base type, we should do this based on an attribute
26378         Only emit calls to System.Diagnostics.Debug and
26379         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
26380         on the command line.
26382         * rootcontext.cs: Global settings for tracing and debugging.
26384         * cs-tokenizer.cs (define): New utility function to track
26385         defines.   Set the global settings for TRACE and DEBUG if found.
26387 2002-05-25  Ravi Pratap  <ravi@ximian.com>
26389         * interface.cs (Populate*): Pass in the TypeContainer as well as
26390         the DeclSpace as parameters so that we can create EmitContexts and
26391         then use that to apply attributes etc.
26393         (PopulateMethod, PopulateEvent, PopulateProperty)
26394         (PopulateIndexer): Apply attributes everywhere.
26396         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
26397         etc.
26399         (ApplyAttributes): Update accordingly.
26401         We now apply interface attributes for all members too.
26403 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
26405         * class.cs (Indexer.Define); Correctly check if we are explicit
26406         implementation (instead of checking the Name for a ".", we
26407         directly look up if the InterfaceType was specified).
26409         Delay the creation of the PropertyBuilder.
26411         Only create the PropertyBuilder if we are not an explicit
26412         interface implementation.   This means that explicit interface
26413         implementation members do not participate in regular function
26414         lookups, and hence fixes another major ambiguity problem in
26415         overload resolution (that was the visible effect).
26417         (DefineMethod): Return whether we are doing an interface
26418         implementation. 
26420         * typemanager.cs: Temporary hack until we get attributes in
26421         interfaces (Ravi is working on that) and we get IndexerName
26422         support in interfaces.
26424         * interface.cs: Register the indexers as properties.
26426         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
26427         warning, I have verified that this is a bug in the .NET runtime
26428         (JavaScript suffers of the same problem).
26430         * typemanager.cs (MemberLookup): When looking up members for
26431         interfaces, the parent of an interface is the implicit
26432         System.Object (so we succeed in searches of Object methods in an
26433         interface method invocation.  Example:  IEnumerable x;  x.ToString
26434         ()) 
26436 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
26438         * class.cs (Event): Events should also register if they do
26439         implement the methods that an interface requires.
26441         * typemanager.cs (MemberLookup); use the new GetInterfaces
26442         method. 
26444         (GetInterfaces): The code used to lookup interfaces for a type is
26445         used in more than one place, factor it here. 
26447         * driver.cs: Track the errors at the bottom of the file, we kept
26448         on going.
26450         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
26451         instance if the method we are calling is static!
26453 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
26455         * attribute.cs (ApplyAttributes): Make this function filter out
26456         the IndexerName attribute (as that attribute in reality is never
26457         applied) and return the string constant for the IndexerName
26458         attribute. 
26460         * class.cs (TypeContainer.Emit): Validate that all the indexers
26461         have the same IndexerName attribute, and if so, set the
26462         DefaultName attribute on the class. 
26464         * typemanager.cs: The return value might contain other stuff (not
26465         only methods).  For instance, consider a method with an "Item"
26466         property and an Item method.
26468         * class.cs: If there is a problem with the parameter types,
26469         return. 
26471 2002-05-24  Ravi Pratap  <ravi@ximian.com>
26473         * ecore.cs (ImplicitConversionExists): Wrapper function which also
26474         looks at user defined conversion after making a call to 
26475         StandardConversionExists - we need this for overload resolution.
26477         * expression.cs : Update accordingly the various method calls.
26479         This fixes 2 bugs filed against implicit user defined conversions 
26481 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
26483         * statement.cs: Track the result of the assignment.
26485 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
26487         * expression.cs (MemberAccess): Improved error reporting for
26488         inaccessible members.
26490 2002-05-22  Martin Baulig  <martin@gnome.org>
26492         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
26493         itself with debugging support.
26495 2002-05-22  Martin Baulig  <martin@gnome.org>
26497         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
26498         Removed, this isn't needed anymore.
26500 2002-05-20  Martin Baulig  <martin@gnome.org>
26502         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
26503         be underlying type for an enum.
26505 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
26507         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
26508         that splits out the loading of just the core types.
26510         * rootcontext.cs (ResolveCore): Split the struct resolution in
26511         two, so we can load the enumeration underlying types before any
26512         enums are used.
26514         * expression.cs (Is): Bandaid until we fix properly Switch (see
26515         bug #24985 for details).
26517         * typemanager.cs (ImplementsInterface): The hashtable will contain
26518         a null if there are no interfaces implemented.
26520 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
26522         * cs-parser.jay (indexer_declarator): It is fine to have array
26523         parameters
26525 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
26527         * typemanager.cs: (RegisterBuilder): New function used to register
26528         TypeBuilders that implement interfaces.  Since
26529         TypeBuilder.GetInterfaces (as usual) does not work with lame
26530         Reflection.Emit. 
26531         (AddUserType): register interfaces.
26533         (ImplementsInterface): Use the builder_to_ifaces hash if we are
26534         dealing with TypeBuilder.  Also, arrays are showing up as
26535         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
26536         methods can not be invoked on them!
26538         * ecore.cs (ExplicitReferenceConversionExists): Made public.
26539         (ImplicitReferenceConversionExists): Split out from
26540         StandardConversionExists. 
26542         * expression.cs (As): We were only implementing one of the three
26543         cases for the as operator.  We now implement them all.
26544         (Is): Implement the various other cases for Is as well.
26546         * typemanager.cs (CACHE): New define used to control if we want or
26547         not the FindMembers cache.  Seems to have a negative impact on
26548         performance currently
26550         (MemberLookup): Nested types have full acess to
26551         enclosing type members
26553         Remove code that coped with instance/static returns for events, we
26554         now catch this in RealFindMembers.
26556         (RealFindMembers): only perform static lookup if the instance
26557         lookup did not return a type or an event.  
26559 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
26561         * assign.cs (CompoundAssign): We pass more semantic information
26562         now to Compound Assignments than we did before: now we have all
26563         the information at hand, and now we resolve the target *before* we
26564         do the expression expansion, which allows the "CacheValue" method
26565         to have the effect we intended (before, a [x] += 1 would generate
26566         two differen ArrayAccess expressions from the ElementAccess,
26567         during the resolution process).
26569         (CompoundAssign.DoResolve): Resolve target and original_source here.
26571 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
26573         * expression.cs (ArrayAccess): dropped debugging information. 
26575         * typemanager.cs: Small bug fix: I was always returning i_members,
26576         instead of one of i_members or s_members (depending on which had
26577         the content).
26579         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
26580         method is invoked before any code generation takes place, and it
26581         is a mechanism to inform that the expression will be invoked more
26582         than once, and that the method should use temporary values to
26583         avoid having side effects
26585         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
26587         * ecore.cs (Expression.CacheTemporaries): Provide empty default
26588         implementation.
26590         * expression.cs (Indirection, ArrayAccess): Add support for
26591         CacheTemporaries in these two bad boys. 
26593         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
26594         ldobj or ldind_ref.  
26595         (StoreFromPtr): Handle stobj as well.
26597         * expression.cs (UnaryMutator): Share more code.
26599         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
26600         down: I was not tracking the Filter function as well, which
26601         was affecting the results of the cache.
26603 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
26605         * attribute.cs: Remove the hack to handle the CharSet property on
26606         StructLayouts. 
26608 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
26610         * attribute.cs (DoResolve): More uglyness, we now only try to
26611         resolve the attribute partially, to extract the CharSet
26612         information (only if we are a StructLayout attribute).  Otherwise 
26614         (GetExtraTypeInfo): Add some code to conditionally kill in the
26615         future this.   I am more and more convinced that the .NET
26616         framework has special code to handle the attribute setting on
26617         certain elements.
26619         * expression.cs (IsParamsMethodApplicable): Revert my previous
26620         foreach change here, it was wrong.
26622 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
26624         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
26625         (pp_expr): do not abort on unknown input, just return.
26626         (eval): abort if there are pending chars.
26628         * attribute.cs (Attribute.Resolve): Positional parameters are
26629         optional.  Deal with that case.
26631         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
26632         the Ansi/Unicode/Auto information for the type.
26634         (TypeContainer.DefineType): instantiate the EmitContext here, as
26635         we will be using it during the type definition (to resolve
26636         attributes) and during the emit phase.
26638         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
26639         to pull type information out of the attributes
26641         (Attribute.Resolve): track the constructor builder, and allow for
26642         multiple invocations (structs and classes will use this).
26644         * ecore.cs (MemberLookupFinal): new version with all the
26645         parameters customizable.
26647         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
26648         constructors.  Return if the result value is null (as the error
26649         would have been flagged already by MemberLookupFinal)
26651         Do not allow instances of abstract classes or interfaces to be
26652         created.
26654         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
26655         We have to compare the assembly property here when dealing with
26656         FamANDAssem and Assembly access modifiers, because we might be
26657         creating an assembly from *modules* (that means that we are not
26658         getting TypeBuilders for types defined in other modules that are
26659         part of this assembly).
26661         (Method.Emit): If the method is marked abstract and has a body,
26662         emit an error. 
26664         (TypeContainer.DefineMembers): If both the defined member and the
26665         parent name match are methods, then do not emit any warnings: let
26666         the Method.Define routine take care of flagging warnings.  But if
26667         there is a mismatch (method overrides something else, or method is
26668         overriwritten by something, then emit warning).
26670         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
26671         set to null, this means `do not check for the return type on the
26672         signature'. 
26674         (Method.Define): set the return type for the method signature to
26675         null, so that we get methods with the same name and parameters and
26676         different return types.  This is used to flag warning 114 (you are
26677         hiding a method, and you probably want to use the new/override
26678         keywords instead).
26680         * typemanager.cs (MemberLookup): Implemented proper access
26681         control, closing a long standing set of bug reports.  The problem
26682         was that the Framework only has two bits: Public and NonPublic,
26683         and NonPublic includes private and protected methods, but we need
26684         to enforce the FamANDAssem, FamOrAssem and Family. 
26686 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
26688         * statement.cs (GotoCase): Return true: Ammounts to giving up
26689         knowledge on whether we return or not, and letting the other case
26690         be responsible for it.
26692 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
26694         * driver.cs: Do not load directories for each file processed, only
26695         do it if there is a pattern.
26697         * ecore.cs: Report readonly assigns here as well, as we might have
26698         been resolved only by MemberAccess.
26700         (SimpleName.SimpleNameResolve): Also be useful for LValue
26701         resolution.   We need this to propagate assign to local readonly variables
26703         * typemanager.cs: Use a ptrhashtable for the criteria, because we
26704         do not want to reuse potential criteria memory.
26706         * class.cs (MyEventBuilder): Set reflected_type;
26708         * ecore.cs (Constantify): Added support for constifying bools.
26710         (RootContext.LookupType): Added a cache for values looked up in
26711         the declaration space.
26713         * typemanager.cs (FindMembers): Now is a front-end to
26714         RealFindMembers, and provides a two-level hashtable-based cache to
26715         the request.  
26717         15% performance improvement: from 22.5 to 19.2 seconds.
26719         * expression.cs (IsParamsMethodApplicable): use foreach.
26720         (Invocation.DoResolve): ditto.
26721         (New.DoResolve): ditto.
26722         (ArrayCreation.DoResolve): ditto.
26724         * ecore.cs (FindMostEncompassingType): use foreach.
26726         * delegate.cs (NewDelegate.DoResolve): Use foreach
26728         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
26729         (RemoveMethods): use foreach.
26731         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
26732         nested foreach statements instead of for, and also break out of
26733         the inner loop once a match is found.
26735         (Invocation.OverloadResolve): Use foreach, simplify the code. 
26737 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
26739         * cfold.cs (BinaryFold): During an enumeration evaluation context,
26740         we actually unwrap the expression to allow for extra information
26741         to be extracted. 
26743         * expression.cs: Use Shr_Un on unsigned operations. 
26745 2002-05-08  Ravi Pratap  <ravi@ximian.com>
26747         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
26748         applicable operators was not being considered correctly. This closes
26749         the bug Miguel reported.
26751 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
26753         * attribute.cs: check that the type derives from System.Attribute
26754         and report the correct error in that case (moved the duplicate code to
26755         its own method, too).
26757 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
26759         * attribute.cs: lookup attribute type name as the spec says: first the
26760         bare attribute name and then name + "Attribute" (nant compiles with
26761         mcs after this fix).
26763 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
26765         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
26766         Because of the way we parse things, we should try to see if a
26767         UIntConstant can fit in an integer.
26769 2002-05-07  Ravi Pratap  <ravi@ximian.com>
26771         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
26772         when we are in an explicit context.
26774         (ConvertReferenceExplicit): When converting from Iface type S to Class
26775         T make sure the rules are implemented as an OR.
26777         * parameter.cs (ParameterType): Make it a property for now although the
26778         purpose really isn't anything immediate.
26780         * expression.cs (Is*Applicable): Do better checking on the parameter type
26781         of a ref/out parameter. The ones from the system assemblies are already 
26782         marked with the correct type so we don't need to do any correction.
26784         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
26785         the object type is standard too so include that.
26787 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
26789         * ecore.cs (StandardConversionExists): Augment with missing code:
26790         deal with IntConstant, LongConstants and Enumerations.
26792         * assign.cs: Report the error, instead of failing silently
26794         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
26795         typecontainer that they are declared, because the
26796         typecontainer/namespace will have the list of using clauses that
26797         need to be applied.
26799         Assembly Attributes were escaping the normal registration
26800         mechanism. 
26802         (EmitCode): Apply attributes within an EmitContext that represents
26803         the container they were declared on.
26805         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
26807 2002-05-06  Ravi Pratap  <ravi@ximian.com>
26809         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
26810         Revamp completely - make much cleaner as we now operate only
26811         on a set of Types.
26813         (FindMostSpecificSource, FindMostSpecificTarget): New methods
26814         to implement the logic detailed in the spec more correctly.
26816         (UserDefinedConversion): Update accordingly.
26818 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
26820         * statement.cs: Return flow analysis information up.
26822         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
26823         and the default.
26825         (token): Do not consume an extra character before calling
26826         decimal_digits.
26828 2002-05-06  Piers Haken <piersh@friskit.com>
26830         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
26832 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
26834         * class.cs (Constructor.Emit): Set the IsStatic flag in the
26835         EmitContext during the instance constructor initializer
26836         resolution, to stop access to instance variables.
26838         This is mandated by the spec, last paragraph of the `constructor
26839         initializers' section. 
26841 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
26843         * cs-parser.jay, class.cs (Accessor): new class used to represent
26844         an accessor (get or set).  In the past we used `null' to represent
26845         a missing accessor.  But this is ambiguous because there was no
26846         way to tell in abstract indexers/properties if one of them was
26847         specified.
26849         Now there is a way of addressing that.
26851         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
26852         instead of FindMembers.
26854         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
26855         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
26857         * attribute.cs: Treat indexers and properties as the same in terms
26858         of applying attributes
26860         * ecore.cs (FindMostEncompassedType): Use statically initialized
26861         EmptyExpressions()s like we do elsewhere to avoid creating useless
26862         objects (and we take this out of the tight loop).
26864         (GetConversionOperators): Move the code to extract the actual
26865         operators to a separate routine to clean things up.
26867 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
26869         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
26870         events are always registered FieldBuilders.
26872         * class.cs (FieldBase): New class shared by Fields 
26874         * delegate.cs: If we are a toplevel delegate, use our full name.
26875         If we are a nested delegate, then only use our tail name.
26877 2002-05-02  Ravi Pratap  <ravi@ximian.com>
26879         * expression.cs (IsApplicable): Ensure that we add the "&" to
26880         ref/out types before comparing it with the type of the argument.
26882         (IsParamsMethodApplicable): Ditto.
26884         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
26885         silly me ;-)
26887         * delegate.cs : Handle the case when we have more than one applicable
26888         method. Flag an error only when we finish checking all.
26890 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
26892         * expression.cs: Add support for boolean static initializers.
26894 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
26896         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
26898         * parameter.cs (ComputeParameterTypes,
26899         ComputeAndDefineParameterTypes): Better error handling: now we
26900         clear the `types' cache if we fail during any of the type lookups.
26901         We also return the status code correctly to our caller
26903         * delegate.cs: If we fail to define a delegate, abort the extra
26904         steps. 
26906         * expression.cs (Binary.ResolveOperator): for
26907         operator==(object,object) and operator !=(object, object) we also
26908         have to verify that there is an implicit conversion from one to
26909         the other.
26911         (ArrayAccess.DoResolve): Array Access can operate on
26912         non-variables. 
26914 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
26916         * assign.cs (CompoundAssign): A new class used as a "flag" that
26917         the assignment actually is happening as part of a compound
26918         assignment operator.
26920         During compound assignment, a few new rules exist to enable things
26921         like:
26923         byte b |= 1 + 2
26925         From the spec:
26927         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
26928         to the type of x) if y is implicitly convertible to the type of x,
26929         and the operator is a builtin operator and the return type of the
26930         operator is explicitly convertible to the type of x. 
26932         * rootcontext.cs: Reset warning level to 2.  4 catches various
26933         "interesting" features in mcs, we must clean this up at some
26934         point, but currently am trying to kill other bugs ;-)
26936         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
26937         in container classes as well.  
26939         * expression.cs (Binary.ResolveOperator): Handle string case
26940         before anything else (as operator overloading does emit an error
26941         before doing anything else).
26943         This code could go away when we move to a table driven model, but
26944         i could not come up with a good plan last night.
26946 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
26948         * typemanager.cs (CSharpName): reimplementation using regex.
26949         * class.cs: added null check for fields in Emit
26950         * rootcontext.cs: set warninglevel to 4
26952 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
26954         * typemanager.cs (CSharpName): reimplemented with Lupus
26955         suggestion.
26957 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
26959         * statement.cs (If): correclty implement Resolve, because we were
26960         not catching sem errors in there.  The same process is needed
26961         everywhere else. 
26962         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
26965         (Statement.Warning_DeadCodeFound): Factorize code.
26966         (While): Report dead code here too.
26968         (Statement): Added Resolve virtual method to allow
26969         for resolution split from the emit code.
26971 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
26973         * statement.cs (EmitBoolExpression): No longer try to resolve the
26974         expression here.    
26975         (MakeBoolean): New utility function that resolve, implicitly
26976         converts to boolean and tags the expression. 
26979         (If, Do): Implement dead code elimination.
26980         (While): Implement loop inversion
26982         (Do, While, For, If): Resolve the expression prior to calling our
26983         code generation.
26985 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
26987         * class.cs:
26988           - added method Report28 (warning: program has more than one entry point)
26989           - added method IsEntryPoint, implements paragraph 10.1 of the spec
26990           - modified method Method.Define, the part at the end of the method
26992         * rootcontext.cs: added static public Location EntryPointLocation;
26993           
26994         * ../errors/cs0028.cs : Add test case for the above warning.              
26996         * typemanager.cs:
26997           - modified method CSharpName to allow arrays of primitive type to
26998             be printed nicely (e.g. instead of System.Int32[][] it now prints
26999             int[][])
27000           - added method CSharpSignature: returns the signature of a method
27001             in string format to be used in reporting errors, warnings, etc.
27003         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
27004         with String.Empty.
27006 2002-04-26  Ravi Pratap  <ravi@ximian.com>
27008         * delegate.cs (Define): Fix extremely silly bug where I was
27009         setting the type of the 'object' parameter of the BeginInvoke
27010         method to System.IAsyncResult instead of System.Object ;-)
27012 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
27014         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
27015         here. 
27017         (Constructor.Emit): return if we fail to initialize the
27018         constructor.  Another door closed!  
27020         * expression.cs (New.DoResolve): Improve error message (from -6 to
27021         1501).  Use DeclaredOnly lookup to find the exact constructor.
27023         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
27024         loop.  This is useful.
27026         * cs-parser.jay: Adjust the default parameters so that destructors
27027         have the proper signature.
27029 2002-04-26  Martin Baulig  <martin@gnome.org>
27031         * driver.cs (LoadAssembly): If `assembly' contains any characters
27032         which are only valid in path names and not in assembly names
27033         (currently slash, backslash and point), use Assembly.LoadFrom ()
27034         instead of Assembly.Load () on the `assembly' (before iteration
27035         over the link_paths).
27037 2002-04-26  Martin Baulig  <martin@gnome.org>
27039         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
27041 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
27043         * class.cs (Property): use the new typemanager.MemberLookup
27045         (TypeContainer.MemberLookup): Implement using the
27046         TypeManager.MemberLookup now. 
27048         * typemanager.cs: Make MemberLookup a function of the TypeManager,
27049         and return MemberInfos, so that these can be used without an
27050         EmitContext (what we had before).
27052 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
27054         * expression.cs: Fix the case where the argument to params if the
27055         type of the params.  I omitted handling this before.   Fixed
27057 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
27059         * driver.cs: Call BootCorlib_PopulateCoreType
27061         * class.cs (Property.CheckBase): Check for properties only, not
27062         for all members. 
27064         * interface.cs: Temporary hack: try/catch around the
27065         CustomAttributeBuilder, because I am getting an exception that I
27066         do not understand.
27068         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
27069         types whose definitions are required to be there (attributes are
27070         defined before standard types).
27072         Compute definitions as we boot the various types, as they are used
27073         immediately (value_type class will need object_type, but if we do
27074         not initialize object_type, we will pass a null, which will let
27075         the runtime pick the System.Object from the existing corlib, which
27076         is not what we want).
27078 2002-04-22  Patrik Torstensson <totte@labs2.com>
27080         * cs-tokenizer.cs: fixed a number of trim() issues.
27082 2002-04-22  Ravi Pratap  <ravi@ximian.com>
27084         * expression.cs (Argument.Type): Ensure that we return the correct
27085         type when we have out or ref parameters [in which case we 
27086         append a "&"].
27088 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
27090         * class.cs (Property, Indexer): Allow extern modifier in there. 
27092         * typemanager.cs (InitBaseTypes): Initializes object_type and
27093         value_type, since those will be used early on during the bootstrap
27094         process to compile corlib.
27096         (InitCoreTypes): Move code from here to InitBaseTypes.
27098 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
27100         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
27101         single-dimension arrays as using the ldlen opcode.  
27103         Daniel Lewis discovered this optimization.  
27105         * typemanager.cs: Add signature for System.Array::get_Length
27107 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27109         * statement.cs: report the error when the foreach does not apply to an
27110         array nor a collection.
27112 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
27114         * expression.cs: Add implicit conversions to the operator ~.
27116         * constant.cs (DecimalConstant.Emit): Emit decimal value.
27118         * typemanager.cs: Locate the decimal constructor.
27120 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27122         * attribute.cs: use the new property of TypeOf.
27123         * expression.cs: added 'get' property around typearg.
27125         These changes fix a build breaker reported by NickD. Is this the
27126         correct way to fix?  If not, please, revert my changes and make it
27127         work :-).
27129 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
27131         * attribute.cs: Add support for typeof in attribute invocations.
27132         I am not sure that this is right though.
27134 2002-04-14  Duncan Mak  <duncan@ximian.com>
27136         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
27137         Binary.Operator.Division case.
27139 2002-04-13  Ravi Pratap  <ravi@ximian.com>
27141         * class.cs (DefineType): Ensure that we do a proper check on
27142         attribute types and also register it with the TypeManager.
27144         (TypeContainer.Targets): The default for attribute types is
27145         AttributeTargets.All.
27147         * attribute.cs (ApplyAttributes): Registering the attribute type
27148         is done elsewhere, not when we discover we have a Usage attribute.
27150 2002-04-12  Ravi Pratap  <ravi@ximian.com>
27152         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
27153         and get rid of is_delegate parameter.
27155         * everywhere : update.
27157 2002-04-12  Ravi Pratap  <ravi@ximian.com>
27159         * cs-parser.jay (compilation_unit): Revamp completely to use
27160         some new ideas that I got from Rhys' grammar to solve the problems
27161         with assembly level attributes.
27163         (outer_declaration): New grammar production.
27165         (attribute_sections): Add.
27167         (opt_attributes): Base on attribute_sections
27169         (namespace_declaration): Allow opt_attributes to tackle the case
27170         when we have assembly level attributes - we are clever in this
27171         regard now ;-)
27173         * attribute.cs (ApplyAttributes): Do not worry about assembly 
27174         attributes in the non-global context.
27176         * rootcontext.cs (AddGlobalAttributes): Go back to using this
27177         instead of SetGlobalAttributes.
27179         * class.cs, rootcontext.cs : Ensure we define and generate 
27180         attribute types before anything else.
27182         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
27183         and flag the new error -20 for the case when the attribute type
27184         does not have valid targets specified. csc does not catch this.
27186         * ../errors/errors.txt : update for error # -20
27188 2002-04-11  Ravi Pratap  <ravi@ximian.com>
27190         * support.cs (InternalParameters.ParameterModifier): Do some null
27191         checking and return sane values.
27193         * class.cs (Method.Define): If we are a PInvoke method, ensure
27194         that we are static and extern. Report error # 601
27196         * ../errors/cs0601.cs : Add test case for the above error.
27198 2002-04-07  Ravi Pratap  <ravi@ximian.com>
27200         * rootcontext.cs (attribute_types): We need to keep type of
27201         all attribute types separately and emit code for them first.
27203         (RegisterAttribute) : Implement.
27205         * class.cs (DefineType): Check if the current Type is a custom
27206         attribute type and register it accordingly.
27208         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
27209         adding the first attribute twice and rename to
27211         (SetGlobalAttributes): this.
27213         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
27214         lookups.
27216         * attribute.cs (ApplyAttributes): Take an additional argument telling us
27217         if we are processing global arguments. Hmm, I am unsure of this.
27219 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27221         * expression.cs: added static array of strings to avoid calling
27222         Enum.ToString () for Operator in Binary. Significant recover of
27223         performance.
27225 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
27227         * class.cs (FindMembers): Allow the Builders of the various
27228         members to be null.  If they are skip them.  This only happens
27229         during the PInvoke declaration.
27231 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
27233         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
27234         failure, so we do not keep going afterwards.
27236         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
27237         wanted to pass `false' as the `is_delegate' argument.  If this is
27238         the case, why not use delegate_type == null to mean `is_delegate =
27239         false' and anything else as is_delegate = true.
27241 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
27243         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
27244         code for the section, not the beginning of the tests.
27246 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
27248         * cfold.cs: Handle operator + (Enum x, Underlying x) 
27250         * expression.cs (Binary): same.  Warn about errors where we have
27251         Enum/Enum in operator + as well.
27253 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
27255         * statement.cs:
27256                 - added support for switch(bool)
27257                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
27258                 - add TableSwitchEmit() to handle table-based switch statements
27260 2002-04-05  Ravi Pratap  <ravi@ximian.com>
27262         * expression.cs (Invocation.OverloadResolve): Factor out code which
27263         does parameter compatibility checking with arguments so that we can 
27264         re-use the code even from Delegate.VerifyApplicability
27266         (VerifyArgumentsCompat): Move above code here.
27268         * delegate.cs (VerifyApplicability): Get rid of duplicate code
27269         and instead make a call to the above method.
27271 2002-03-31  Ravi Pratap  <ravi@ximian.com>
27273         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
27274         We use it to keep track of classes which are attribute types.
27276 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
27278         * delegate.cs (Delegate.Define): Correctly define the types in the
27279         presence of fixed and array parameters.
27281         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
27282         doing FindMembers.
27284         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
27285         include NonPublic after the first iteration.
27287         * class.cs (Indexer.CheckBase): Only check if both parents are
27288         non-null. 
27290         * cs-parser.jay (accessor_body): If empty, set to null.
27292         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
27293         same code path here to resolve constants names that we did have in
27294         MemberAccess.DoResolve.  There is too much code duplicated here.
27296 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
27298         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
27300         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
27301         to MakeUnionSet.
27303         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
27304         tokens, numbers and strings.
27306         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
27307         parenthesis.
27309         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
27310         asyncronous parameters and the regular parameters.  
27312         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
27313         specify the target directory.
27315         * expression.cs: (This.DoResolve): Simplify
27316         (As.Emit): Optimize, do not generate IsInst if the expression is
27317         always of the given type.
27319         (Is.DoResolve): Bug fix, we were reporting both always/never for
27320         the is expression.
27322         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
27323         creating too many unnecessary arrays.
27325 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
27327         * class.cs (EmitFieldInitializer): Use Assign expression to assign
27328         fields instead of rolling our own initializer.   Takes care of all
27329         implicit conversions, and drops unnecessary static checks/argument.
27331 2002-03-31  Dick Porter  <dick@ximian.com>
27333         * driver.cs: use the GetDirectories() return values properly, and
27334         use "/" as path separator.
27336 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
27338         * expression.cs (Unary): Optimize - - expr into expr.
27339         (Binary): Optimize a + (-b) into a -b.
27341         * codegen.cs (CodeGen): Made all methods static.
27343 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
27345         * rootcontext.cs: 
27347         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
27348         TypeBuilder property.
27350         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
27351         instead. 
27353         * tree.cs: Removed the various RecordXXXX, and replaced with a
27354         single RecordDecl.  Removed all the accessor methods, and just
27355         left a single access point Type 
27357         * enum.cs: Rename DefineEnum to DefineType.
27359         * decl.cs: New abstract method `DefineType' used to unify the
27360         Defines for Enumerations, Interfaces, TypeContainers and
27361         Delegates.
27363         (FindType): Moved LookupInterfaceOrClass here.  Moved the
27364         LookupBaseClasses method that used to live in class.cs and
27365         interface.cs here, and renamed to FindType.
27367         * delegate.cs: Implement DefineType.  Take advantage of the
27368         refactored pattern for locating the parent builder without taking
27369         the parent_builder argument (which we know does not work if we are
27370         nested, and triggering a toplevel definition).
27372 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27374         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
27375         accessibility of a member has changed during override and report
27376         an error if so.
27378         * class.cs (Method.Define, Property.Define): Only complain on
27379         overrides if the method is private, any other accessibility is
27380         fine (and since we just checked the permission is the same, we are
27381         good to go).
27383         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
27384         and elif are processed always.  The other pre-processing
27385         directives are only processed if we are "taking" the path
27387 2002-03-29  Martin Baulig  <martin@gnome.org>
27389         * class.cs (Method.Emit): Only emit symbolic debugging info if the
27390         current location is not Null.
27392         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
27393         a separate method so we can profile it.
27395         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
27396         `span.Seconds' are just seconds, but no minutes or hours.
27397         (MainDriver): Profile the CodeGen.SaveSymbols calls.
27399 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27401         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
27402         Remove the gratuitous set of Final:
27404                                 // If an interface implementation, then we can set Final.
27405                                 if (((flags & MethodAttributes.Abstract) == 0) &&
27406                                     implementing.DeclaringType.IsInterface)
27407                                         flags |= MethodAttributes.Final;
27409         I do not know what I was smoking when I used that.
27412         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
27413         step into fixing the name resolution issues for delegates and
27414         unifying the toplevel name resolution.
27416 2002-03-28  Martin Baulig  <martin@gnome.org>
27418         * class.cs (Method.Emit): If we have a symbol writer, call its
27419         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
27420         tell it about the current method.
27422         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
27423         writer that we're going to emit the first byte of IL code for a new
27424         statement (a new source line).
27425         (EmitContext.EmitTopBlock): If we have a symbol writer, call
27426         EmitContext.Mark() before emitting any code.
27428         * location.cs (SymbolDocument): Return null when we're Null.
27430         * statement.cs (Statement): Moved the `Location loc' variable here.
27431         (Statement.EmitBoolExpression): If we have a symbol writer, call
27432         ec.Mark() before emitting any code to tell it that we're at the
27433         beginning of a new statement.
27434         (StatementExpression): Added `Location' argument to the constructor.
27435         (Block): Added public readonly variable `StartLocation' and public
27436         variable `EndLocation'.  The latter is to be set using SetEndLocation().
27437         (Block): Added constructor which takes a start and end location.
27438         (Block.SetEndLocation): New method. This sets the end location.
27439         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
27440         local variables we create.
27441         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
27442         each statement and do also mark the begin and end of the block.
27444         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
27445         tell it the current lexer.Location, use Location.Null for the end of the
27446         block.
27447         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
27448         current block, set its end location using SetEndLocation().
27449         (statement_expression): StatementExpression constructor now takes the
27450         lexer.Location as additional argument.
27451         (for_statement, declare_local_variables): Likewise.
27452         (declare_local_variables): When creating a new implicit block, use the
27453         new Block constructor and pass it the lexer.Location.
27455 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27457         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
27458         members also on the parent interfaces recursively.
27460 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
27462         * report.cs: Use new formats, since Gonzalo finished the missing
27463         bits. 
27465         * expression.cs (Binary.ResolveOperator): added missing operator|
27466         operator& and operator^ for bool/bool.
27468         * cs-parser.jay: CheckDef now takes a Location argument that is
27469         used to report errors more precisly (instead of reporting the end
27470         of a definition, we try to track something which is a lot closer
27471         to the source of the problem).
27473         * cs-tokenizer.cs: Track global token use, so we can properly flag
27474         the use of #define/#undef after the first token has been seen.
27476         Also, rename the reportXXXX to Error_DescriptiveName
27478         * decl.cs (DeclSpace.IsTopLevel): Move property here from
27479         TypeContainer, so that Enum and Interface can use this too.
27481         * class.cs (TypeContainer.LookupInterfaceOrClass,
27482         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
27483         `builder' argument.  Typically this was used to pass the parent
27484         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
27485         the definition).  
27487         The problem is that a nested class could trigger the definition of
27488         a toplevel class, and the builder would be obviously wrong in that
27489         case. 
27491         So we drop this argument, and we compute dynamically the
27492         TypeBuilder/ModuleBuilder (the correct information was available
27493         to us anyways from DeclSpace.Parent)
27495         * interface.cs (Interface.DefineInterface): Drop builder
27496         parameter cleanup like class.cs
27498         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
27499         like class.cs
27501         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
27502         values. 
27504         (Try.Emit): Propagate the returns value from the statement.
27506         (Return.Emit): Even if we are leavning 
27508         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
27510         * modifiers.cs: Fix the computation of MethodAttributes flags.
27512 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
27514         * driver.cs: allow compilation of files that start with '/'.
27515         Add a default case when checking the argument of --target.
27517 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
27519         * interface.cs: Implement the same search algorithm for types in
27520         the interface code.
27522         * delegate.cs: Do not allow multiple definition.
27524         * Recovered ChangeLog that got accidentally amputated
27526         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
27528         * rootcontext.cs: Load manually enum to allow core classes to
27529         contain enumerations.
27531         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
27532         Update to new static methods in TypeManager.
27534         * typemanager.cs (GetMethod, GetConstructor): Use our
27535         implementation of FindMembers to find the members, since during
27536         corlib compilation, the types are TypeBuilders and GetMethod and
27537         GetConstructor do not work.
27539         Make all methods in TypeManager static.
27541         (InitCodeHelpers): Split the functionality from
27542         the InitCodeTypes function.
27544         * driver.cs: Call InitCodeHelpers after we have populated the
27545         types. 
27547         * cs-parser.jay (delegate_declaration): we did not used to compute
27548         the delegate name correctly for void delegates.
27550 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
27552         * rootcontext.cs (RootContext): Init the interface_resolve_order
27553         and type_container_resolve_order always.
27555         (ResolveCore, BootstrapCorlib_ResolveClass,
27556         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
27557         compiler when compiling with --nostdlib
27559         * class.cs (TypeContainer.DefineType): Check that our parent is
27560         not null.  This test is most important when we are bootstraping
27561         the core types.
27563         * codegen.cs: Split out the symbol writing code.
27565 2002-03-25  Martin Baulig  <martin@gnome.org>
27567         * driver.cs (-g): Made -g an alias for --debug.
27569 2002-03-24  Martin Baulig  <martin@gnome.org>
27571         * codegen.cs (SymbolWriter): New public variable. Returns the
27572         current symbol writer.
27573         (CodeGen): Added `bool want_debugging_support' argument to the
27574          constructor. If true, tell the ModuleBuild that we want debugging
27575         support and ask it for the ISymbolWriter.
27576         (Save): If we have a symbol writer, call it's Close() method after
27577         saving the assembly.
27579         * driver.c (--debug): New command line argument to create a
27580         debugger information file.
27582         * location.cs (SymbolDocument): New public property. Returns an
27583         ISymbolDocumentWriter object for the current source file or null
27584         if we don't have a symbol writer.
27586 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
27588         * driver.cs (LoadAssembly): Correctly return when all the paths
27589         have been tried and not before.
27591         * statement.cs (Switch.Emit): return the actual coverage for this
27592         statement (returns/not-returns)
27594         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
27595         switch of the statement if we are the last switch section.  That
27596         kills two problems: try/catch problems (we used to emit an empty
27597         nop at the end) and switch statements where all branches would
27598         return. 
27600 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
27602         * driver.cs: Add default assemblies (the equivalent to the
27603         Microsoft CSC.RSP file)
27605         * cs-tokenizer.cs: When updating `cols and setting it to zero,
27606         also update tokens_seen and set it to false.
27608         * driver.cs: Implement --recurse for Mike.
27610         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
27611         correctly splitting out the paths.
27613 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
27615         * interface.cs (Interface.PopulateProperty): Instead of using
27616         `parent' as the declaration space for the set parameters, use
27617         `this' 
27619         * support.cs (InternalParameters): InternalParameters constructor
27620         takes a DeclSpace instead of a TypeContainer.
27622         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
27623         types are being initialized, load the address of it before calling
27624         the function.  
27626         (New): Provide a mechanism to disable the generation of local
27627         value type temporaries when the caller will be providing us with
27628         an address to store it.
27630         (ArrayCreation.EmitDynamicInitializers): Use it.
27632 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
27634         * expression.cs (Invocation.EmitArguments): Only probe for array
27635         property if there is more than one argument.  Sorry about that.
27637         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
27638         empty param arrays.
27640         * class.cs (Method.LabelParameters): Fix incorrect code path that
27641         prevented the `ParamArrayAttribute' from being applied to the
27642         params attribute.
27644 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
27646         * support.cs (ReflectionParameters): Correctly compute whether the
27647         last argument is a params array.  Fixes the problem with
27648         string.Split ('a')
27650         * typemanager.cs: Make the assemblies array always be non-null
27651         (empty, but non-null)
27653         * tree.cs (RecordDecl): New function that abstracts the recording
27654         of names.  This reports error 101, and provides a pointer to the
27655         previous declaration.  Fixes a crash in the compiler.
27657         * cs-parser.jay (constructor_declaration): Update to new grammar,
27658         and provide a constructor_body that can be empty.
27660 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
27662         * driver.cs: Add support for --resources.
27664         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
27665         Make all types for the various array helper methods be integer.
27667         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
27668         CheckState to ConvCast.
27670         (ConvCast): Now it takes a `checked' state argument, to avoid
27671         depending on the emit context for the conversion, and just using
27672         the resolve time setting.
27674         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
27675         instead of Invocation.EmitArguments.  We do not emit the original
27676         arguments, instead we emit those which have been converted to
27677         unsigned int expressions.
27679         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
27681         * codegen.cs: ditto.
27683         * expression.cs (LocalVariableReference): Drop the use of the
27684         Store function that depended on the variable index.
27686         * statement.cs (VariableInfo): Drop the `Idx' property from this
27687         class, as this is not taking into account the indexes for
27688         temporaries tat we generate during the execution, getting the
27689         indexes wrong.
27691         * class.cs: First emit class initializers, then call the parent
27692         constructor. 
27694         * expression.cs (Binary): Fix opcode emision.
27695         (UnaryMutator.EmitCode): Support checked code generation
27697         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
27698         matches for events for both the Static and Instance scans,
27699         pointing to the same element.   Fix that.
27701 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
27703         * rootcontext.cs (ResolveTree): Always set the
27704         interface_resolve_order, because nested interfaces will be calling
27705         into us.
27707         * class.cs (GetInterfaceOrClass): Track the same resolution
27708         process used by TypeManager.LookupType.  This fixes the nested
27709         type lookups in class declarations (separate path from
27710         LookupType). 
27712         (TypeContainer.DefineType): Also define nested interfaces.
27713         (TypeContainer.RegisterOrder): New public function used to
27714         register the order in which child interfaces need to be closed.
27716         Nested interfaces need to be closed after their parents have been
27717         created. 
27719         * interface.cs (InterfaceAttr): Put all the logic for computing
27720         the interface attribute here. 
27722         (DefineInterface): Register our interface order with the
27723         RootContext or with the TypeContainer depending on the case.
27725 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
27727         * cs-parser.jay: rework foreach statement to work with the new
27728         changes to the policy on SimpleNames.
27730         * report.cs: support Stacktrace on warnings as well.
27732         * makefile: drop --unsafe and /unsafe from the compile.
27734 2002-03-13  Ravi Pratap  <ravi@ximian.com>
27736         * ecore.cs (StandardConversionExists): Modify to take an Expression
27737         as the first parameter. Ensure we do null -> reference type conversion
27738         checking.
27740         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
27741         temporary Expression objects.
27743 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
27745         * interface.cs: workaround bug in method overloading resolution
27746         (there is already a bugzilla bug for it).
27748 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
27750         We could also solve this problem by having a separate path for
27751         performing type lookups, instead of DoResolve, we could have a
27752         ResolveType entry point, and only participating pieces of the
27753         production (simplename, deref, array) would implement this. 
27755         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
27756         signal SimpleName to only resolve type names and not attempt to
27757         resolve anything else.
27759         * expression.cs (Cast): Set the flag.
27761         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
27763         * class.cs: Only report 108 if there is no `new' modifier.
27765         * cs-parser.jay: rework foreach statement to work with the new
27766         changes to the policy on SimpleNames.
27768         * report.cs: support Stacktrace on warnings as well.
27770         * makefile: drop --unsafe and /unsafe from the compile.
27772 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
27774         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
27775         lookups here, instead of doing that at parse time.  This means
27776         that our grammar will not introduce `LocalVariableReferences' as
27777         expressions at this point.  That solves the problem of code like
27778         this:
27780         class X {
27781            static void Main ()
27782            { int X = 1;
27783             { X x = null }}}
27785         This is only half the fix.  The full fix requires parameters to
27786         also be handled in this way.
27788         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
27789         makes the use more obvious of the DeclSpace.  The
27790         ec.TypeContainer.TypeBuilder is now only used to pull the
27791         TypeBuilder for it.
27793         My theory is that I can get rid of the TypeBuilder completely from
27794         the EmitContext, and have typecasts where it is used (from
27795         DeclSpace to where it matters).  
27797         The only pending problem is that the code that implements Aliases
27798         is on TypeContainer, and probably should go in DeclSpace.
27800         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
27801         lookups here, instead of doing that at parse time.  This means
27802         that our grammar will not introduce `LocalVariableReferences' as
27803         expressions at this point.  That solves the problem of code like
27804         this:
27806         class X {
27807            static void Main ()
27808            { int X = 1;
27809             { X x = null }}}
27811         This is only half the fix.  The full fix requires parameters to
27812         also be handled in this way.
27814         * class.cs (Property.DefineMethod): When implementing an interface
27815         method, set newslot, when implementing an abstract method, do not
27816         set the flag (before we tried never setting it, or always setting
27817         it, which is the difference).
27818         (Indexer.DefineMethod): same.
27819         (Method.DefineMethod): same.
27821         * ecore.cs: Only set the status used flag if we get back a Field.
27823         * attribute.cs: Temporary hack, so Paolo can keep working.
27825 2002-03-08  Ravi Pratap  <ravi@ximian.com>
27827         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
27828         the unmanaged type in the case we have a MarshalAs attribute.
27830         (Resolve): Handle the case when we are parsing the special MarshalAs
27831         attribute [we need to store the unmanaged type to use later]
27833         * typemanager.cs (marshal_as_attr_type): Built in type for the 
27834         MarshalAs Attribute.
27836         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
27837         on parameters and accordingly set the marshalling info.
27839 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
27841         * class.cs: Optimizing slightly by removing redundant code after
27842         we switched to the `NoTypes' return value.
27843         (Property.DefineMethod): use NoTypes here too.
27845         This fixes the bug I introduced in my last batch of changes.
27847 2002-03-05  Ravi Pratap  <ravi@ximian.com>
27849         * tree.cs (RecordEnum): Add. We now keep track of enums too.
27851         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
27852         Enums since those are types too. 
27854         * cs-parser.jay (enum_declaration): Record enums as we parse them.
27856         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
27857         thanks to a call during the lookup process.
27859 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
27861         * statement.cs (Foreach): Lots of work to accomodate a particular
27862         kind of foreach statement that I had not kept in mind.  It is
27863         possible to have foreachs on classes that provide a GetEnumerator
27864         method that return objects that implement the "pattern" for using
27865         a foreach, there is no need to support GetEnumerator
27866         specifically. 
27868         This is needed to compile nant.
27870         * decl.cs: Only report 114 if the member is not `Finalize' and if
27871         the warning level is at least 2.
27873         * class.cs: Moved the compare function from Method to
27874         MethodSignature. 
27876         (MethodSignature.InheritableMemberSignatureCompare): Add new
27877         filter function that is used to extract inheritable methods from a
27878         class. 
27880         (Method.Define): Use the new `inheritable_method_signature_filter'
27881         delegate
27883         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
27884         command. 
27886 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
27888         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
27890         * cs-parser.jay: Add opt_semicolon to the interface declaration.
27892         * expression.cs: Pass location information to
27893         ConvertImplicitStandard. 
27895         * class.cs: Added debugging code to track return values from
27896         interfaces. 
27898 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
27900         * expression.cs (Is.DoResolve): If either side of the `is' is an
27901         interface, do not flag the warning.
27903         * ecore.cs (ImplicitReferenceConversion): We need a separate test
27904         for interfaces
27906         * report.cs: Allow for --fatal to be used with --probe.
27908         * typemanager.cs (NoTypes): Move the definition for the empty Type
27909         array here. 
27911         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
27912         properties. 
27913         (TypeContainer.DefineProxy): New function used to proxy to parent
27914         implementations when implementing interfaces.
27915         (TypeContainer.ParentImplements): used to lookup if our parent
27916         implements a public function that is required by an interface.
27917         (TypeContainer.VerifyPendingMethods): Hook this up.
27919         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
27920         `modules' and `assemblies' arraylists into arrays.  We only grow
27921         these are the very early start up of the program, so this improves
27922         the speedof LookupType (nicely measured).
27924         * expression.cs (MakeByteBlob): Replaced unsafe code with
27925         BitConverter, as suggested by Paolo.
27927         * cfold.cs (ConstantFold.Binary): Special case: perform constant
27928         folding of string concatenation, but if either side is a string,
27929         and the other is not, then return null, and let the runtime use
27930         the concatenation on the string plus the object (using
27931         `Object.ToString'). 
27933 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
27935         Constant Folding has been implemented now.
27937         * expression.cs (Unary.Reduce): Do not throw an exception, catch
27938         the error instead on types that are not supported in one's
27939         complement. 
27941         * constant.cs (Constant and all children): New set of functions to
27942         perform implict and explicit conversions.
27944         * ecore.cs (EnumConstant): Implement the new functions to perform
27945         conversion by proxying to the child expression.
27947         * codegen.cs: (ConstantCheckState): Constant evaluation has its
27948         own separate setting that can not be turned off from the command
27949         line using --unchecked or --checked and is only controlled using
27950         the checked/unchecked statements and expressions.  This setting is
27951         used by the constant folder to flag errors.
27953         * expression.cs (CheckedExpr, UncheckedExpr): Set the
27954         ConstantCheckState as well.   
27956         During Resolve, they also have to flag the state, because the
27957         constant folder runs completely in the Resolve phase.
27959         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
27960         well.
27962 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
27964         * cfold.cs: New file, this file contains the constant folder.
27966         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
27967         argument to track whether we are using the resulting address to
27968         load or store a value and provide better error messages. 
27970         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
27971         new AddressOf arguments.
27973         * statement.cs (Foreach.EmitCollectionForeach): Update
27975         * expression.cs (Argument.Emit): Call AddressOf with proper
27976         arguments to track usage.
27978         (New.DoEmit): Call AddressOf with new arguments.
27980         (Unary.Emit): Adjust AddressOf call.
27982 2002-03-01  Ravi Pratap  <ravi@ximian.com>
27984         * cs-parser.jay (member_access): Change the case for pre-defined types
27985         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
27986         this suggestion.
27988         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
27989         a method body.
27991         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
27992         essentially like methods and apply attributes like MethodImplOptions to them too.
27994         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
27995         not being null.
27997         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
27998         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
27999         is the DeclSpace.
28001         * Update code everywhere accordingly.
28003         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
28005         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
28007 2002-02-28  Ravi Pratap  <ravi@ximian.com>
28009         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
28010         try performing lookups against those instead of jumping straight into using
28011         the 'using' clauses.
28013         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
28015         (LookupType): Perform lookups in implicit parents too.
28017         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
28018         sequence as RootContext.LookupType. 
28020         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
28021         the various cases of namespace lookups into this method.
28023 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
28025         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
28026         in positional arguments)
28028         * class.cs (Operator): Update the AllowedModifiers to contain
28029         extern. 
28031         * cs-parser.jay: Update operator declaration to allow for the
28032         operator body to be empty.
28034         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
28035         values. 
28037 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
28039         * class.cs (Method.Emit): Label parameters.
28041         * driver.cs: Return 1 or 0 as the program exit code.
28043 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
28045         * expression.cs: Special case the `null' object when trying to
28046         auto-compute the type, as anything can be explicitly converted to
28047         that. 
28049         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
28050         spotting this Paolo.
28052         (Expression.ImplicitNumericConversion): Perform comparissions of
28053         the type using the underlying type in the case of an enumeration
28054         rather than using the enumeration type for the compare.
28056         Cope with the underlying == type case, which is not possible to
28057         catch before. 
28059         (Expression.ConvertNumericExplicit): Perform comparissions of
28060         the type using the underlying type in the case of an enumeration
28061         rather than using the enumeration type for the compare.
28063         * driver.cs: If the user does not supply an extension, assume .exe
28065         * cs-parser.jay (if_statement): Rewrote so that we can track the
28066         location for the if statement.
28068         * expression.cs (Binary.ConstantFold): Only concat strings when
28069         the operation is "+", not everything ;-)
28071         * statement.cs (Statement.EmitBoolExpression): Take a location
28072         argument. 
28073         (If, While, Do): Track location.
28075         * expression.cs (Binary.ResolveOperator): In the object + string
28076         case, I was missing a call to ConvertImplicit
28078 2002-02-25  Ravi Pratap  <ravi@ximian.com>
28080         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
28081         Location arguments. Ensure we use RootContext.LookupType to do our work
28082         and not try to do a direct Type.GetType and ModuleBuilder.GetType
28084         * interface.cs (PopulateMethod): Handle the type of the parameter being
28085         null gracefully.
28087         * expression.cs (Invocation.BetterFunction): Handle the case when we 
28088         have a params method with no fixed arguments and a call is made with no
28089         arguments.
28091 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
28093         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
28094         the verbatim-string-literal
28096         * support.cs (InternalParameters.ParameterModifier): handle null
28097         fixed parameters.
28098         (InternalParameters.ParameterType): ditto.
28100         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
28101         duplicating the name of the variable parameter.
28102         (GetParameterByName): Fix bug where we were not looking up array
28103         paramters if they were the only present (thanks Paolo!).
28104         (GetParameterInfo): We only have an empty set of types if both
28105         fixed and array are set to null.
28106         (GetParameterInfo-idx): Handle FixedParameter == null
28108         * cs-parser.jay: Handle the case where there is no catch
28109         statements (missing null test).
28111 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
28113         * driver.cs (MainDriver): Be conservative on our command line
28114         handling.
28116         Catch DirectoryNotFoundException when calling GetFiles.
28118         (SplitPathAndPattern): Used to split the input specification into
28119         a path and a pattern that we can feed to Directory.GetFiles.
28121 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
28123         * statement.cs (Fixed): Implement the last case of the Fixed
28124         statement (string handling).
28126         * expression.cs (StringPtr): New class used to return a char * to
28127         a string;  Used by the Fixed statement.
28129         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
28131         * expression.cs (Binary.ResolveOperator): Remove redundant
28132         MemberLookup pn parent type.
28133         Optimize union call, we do not need a union if the types are the same.
28134         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
28135         type.
28137         Specialize the use of MemberLookup everywhere, instead of using
28138         the default settings. 
28140         (StackAlloc): Implement stackalloc keyword.
28142         * cs-parser.jay: Add rule to parse stackalloc.
28144         * driver.cs: Handle /h, /help, /?
28146         * expression.cs (MakeByteBlob): Removed the hacks we had in place
28147         before we supported unsafe code.
28149         * makefile: add --unsafe to the self compilation of mcs.
28151 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
28153         * expression.cs (PointerArithmetic): New class that is used to
28154         perform pointer arithmetic.
28155         (Binary.Resolve): Handle pointer arithmetic
28156         Handle pointer comparission.
28157         (ArrayPtr): Utility expression class that is used to take the
28158         address of an array.
28160         (ElementAccess): Implement array access for pointers
28162         * statement.cs (Fixed): Implement fixed statement for arrays, we
28163         are missing one more case before we are done.
28165         * expression.cs (Indirection): Implement EmitAssign and set the
28166         ExprClass to Variable.  This allows pointer dereferences to be
28167         treated as variables, and to have values assigned to them.
28169         * ecore.cs (Expression.StoreFromPtr): New utility function to
28170         store values dereferencing.
28172 2002-02-20  Ravi Pratap  <ravi@ximian.com>
28174         * expression.cs (Binary.ResolveOperator): Ensure that we are
28175         not trying to operate on a void type - this fixes the reported
28176         bug.
28178         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
28179         the parent implementation is sealed.
28181         * ../errors/cs0239.cs : Add.
28183         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
28185         * typemanager.cs (unverifiable_code_type): Corresponds to 
28186         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
28187         which have unsafe code in them.
28189         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
28190         unsafe context.
28192 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
28194         * cs-tokenizer.cs: Add support for @"litreal strings"
28196         Make tokenizer accept pre-processor directives
28197         on any column (remove the old C-like limitation). 
28199         * rootcontext.cs (EmitCode): Emit any global attributes.
28200         (AddGlobalAttributes): Used to keep track of assembly attributes. 
28202         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
28204         * cs-parser.jay: Add support for global attributes.  
28206 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
28208         * expression.cs (Indirection): New helper class.  Unary will
28209         create Indirection classes to be able to implement the
28210         IMemoryLocation interface on it.
28212 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
28214         * cs-parser.jay (fixed_statement): reference the right statement.
28216         * statement.cs (Fixed.Emit): Finish implementing the fixed
28217         statement for the &x case.
28219 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
28221         * class.cs (Property.Define, Method.Define): Remove newslot when
28222         `implementing'.  
28224         * modifiers.cs: My use of NewSlot when `Abstract' was set was
28225         wrong.  NewSlot should only be used if the `new' keyword is present.
28227         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
28228         locating our system dir.  Sorry about this.
28230 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
28232         * driver.cs (GetSystemDir): Compute correctly the location of our
28233         system assemblies.  I was using the compiler directory instead of
28234         the library directory.
28236 2002-02-13  Ravi Pratap  <ravi@ximian.com>
28238         * expression.cs (BetterFunction): Put back in what Miguel commented out
28239         since it is the correct fix. The problem is elsewhere ;-)
28241         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
28242         parameters of the parms method are themselves compatible or not !
28244         (StandardConversionExists): Fix very dangerous bug where we were forgetting
28245         to check that a class implements an interface before saying that an implicit
28246         conversion was allowed. Use ImplementsInterface to do the checking.
28248 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
28250         * class.cs (Method.Define): Track whether we are an explicit
28251         implementation or not.  And only call DefineMethodOverride if we
28252         are an explicit implementation.
28254         (Property.DefineMethod): Ditto.
28256 2002-02-11  Ravi Pratap  <ravi@ximian.com>
28258         * expression.cs (BetterFunction): Catch hideous bug which was
28259          preventing us from detecting ambiguous calls due to implicit casts i.e
28260         cs0121.
28262 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
28264         * support.cs (Pair): Remove un-needed method.  I figured why I was
28265         getting the error in cs-parser.jay, the variable in a foreach loop
28266         is readonly, and the compiler does not really treat this as a variable.
28268         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
28269         instead of EQUALS in grammar.  
28271         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
28273         * expression.cs (Unary.DoResolve): Check whether the argument is
28274         managed or not.
28276 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
28278         * support.cs: Api for Pair to set a value.  Despite the fact that
28279         the variables are public the MS C# compiler refuses to compile
28280         code that accesses the field if the variable is part of a foreach
28281         statement. 
28283         * statement.cs (Fixed): Begin implementation of the fixed
28284         statement.
28286         (Block.AddVariable): Return the VariableInfo on success and null
28287         on failure instead of true/false. 
28289         * cs-parser.jay (foreach): Catch errors on variables already
28290         defined (we were ignoring this value before) and properly unwind
28291         the block hierarchy
28293         (fixed_statement): grammar for the fixed statement.
28295 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
28297         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
28298         pointer types to be incretemented.
28300         (SizeOf): Implement.
28302         * cs-parser.jay (pointer_member_access): Implement
28303         expr->IDENTIFIER production.
28305         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
28306         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
28307         on safe contexts.
28309         (Unary): Implement indirection.
28311         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
28312         use in non-unsafe context).
28314         (SimpleName.DoResolve): Check for pointers in field access on safe
28315         contexts. 
28317         (Expression.LoadFromPtr): Factor the load-indirect code in this
28318         function.  This was duplicated in UnboxCast and ParameterReference
28320 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
28322         * expression.cs (ComposedCast): report an error if a pointer cast
28323         is used in a safe region.
28325         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
28326         pointer type casts in unsafe context.
28328         * codegen.cs (EmitContext): Set up IsUnsafe.
28330         * cs-parser.jay (non_expression_type): Add productions for pointer
28331         casts. 
28333         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
28334         code.  We should not use force into static mode if the method is
28335         not virtual.  Fixes bug in MIS
28337         * statement.cs (Do.Emit, While.Emit, For.Emit,
28338         Statement.EmitBoolExpression): Add support to Do and While to
28339         propagate infinite loop as `I do return' semantics.
28341         Improve the For case to also test for boolean constants.
28343         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
28344         to the list of attributes we can add.
28346         Remove `EmitContext' argument.
28348         * class.cs (Method.Define): Apply parameter attributes.
28349         (Constructor.Define): Apply parameter attributes.
28350         (MethodCore.LabelParameters): Move here the core of labeling
28351         parameters. 
28353         * support.cs (ReflectionParameters.ParameterModifier,
28354         InternalParameters.ParameterModifier): Use IsByRef on the type and
28355         only return the OUT bit for these parameters instead of in/out/ref
28356         flags.
28358         This is because I miss-understood things.  The ParameterInfo.IsIn
28359         and IsOut represent whether the parameter has the [In] and [Out]
28360         attributes set.  
28362 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
28364         * ecore.cs (FieldExpr.Emit): Release temporaries.
28366         * assign.cs (LocalTemporary.Release): new function.
28368         * codegen.cs (EmitContext.GetTemporaryStorage,
28369         EmitContext.FreeTemporaryStorage): Rework the way we deal with
28370         temporary storage.  Now we can "put back" localbuilders when we
28371         are done with them
28373 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
28375         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
28376         need to make a copy of the variable to generate verifiable code.
28378 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
28380         * driver.cs: Compute dynamically the system directory.
28382         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
28383         Slower, but more generally useful.  Used by the abstract
28384         registering implementation. 
28386         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
28387         the rules for the special rule on Type/instances.  First check if
28388         we have the same name, and if so, try that special static path
28389         rather than the instance path.
28391 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
28393         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
28394         for, while and if.
28396         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
28397         Enum, ValueType, Delegate or Array for non-corlib compiles.
28399         * cs-tokenizer.cs: Catch long identifiers (645)
28401         * typemanager.cs (IndexerPropetyName): Ravi never tested this
28402         piece of code.
28404         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
28405         fix, we were returning too early, so we were not registering
28406         pending methods from abstract classes.
28408         Do not register pending methods if the class is abstract.
28410         * expression.cs (Conditional.DoResolve): Report circular implicit
28411         conversions when we neecd to compute it for conditional
28412         expressions. 
28414         (Is.DoResolve): If the expression is always of the provided type,
28415         flag warning 183.  If the expression can not ever be of the
28416         provided type flag warning 184.
28418         * class.cs: Catch 169 as well.
28420         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
28421         read. 
28423 2002-01-18  Nick Drochak  <ndrochak@gol.com>
28425         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
28427 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
28429         * interface.cs: (PopulateMethod): Check for pointers being defined
28430         only if the unsafe context is active.
28431         (PopulateProperty): ditto.
28432         (PopulateIndexer): ditto.
28434         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
28435         specified.  If pointers are present, make sure that they are
28436         present in an unsafe context.
28437         (Constructor, Constructor.Define): ditto.
28438         (Field, Field.Define): ditto.
28439         (Property, Property.Define): ditto.
28440         (Event, Event.Define): ditto.
28442         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
28443         hashtable if there are classes or structs defined.
28445         * expression.cs (LocalVariableReference.DoResolve): Simplify this
28446         code, as the constant resolution moved.
28448         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
28449         the metadata, so we can flag error 133. 
28451         * decl.cs (MemberCore.UnsafeOK): New function to test that a
28452         pointer is being declared in an unsafe context.
28454 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
28456         * modifiers.cs (Modifiers.Check): Require a Location argument.
28457         Report error 227 for Unsafe use.
28459         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
28461         * statement.cs (For.Emit): If the test is null, then report that
28462         we do `return', as we wont reach anything afterwards.
28464         (Switch.SwitchGoverningType): Track the expression that matched
28465         the conversion.
28467         * driver.cs: Allow negative numbers as an error code to flag.
28469         * cs-parser.jay: Handle 1551.
28471         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
28473 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
28475         * cs-parser.jay: Report 1518 (type declaration can only contain
28476         class, struct, interface, enum or delegate)
28478         (switch_label): Report 1523 (keywords `case' or `default' must
28479         preced code)
28481         (opt_switch_sections): Report 1522 (empty switch)
28483         * driver.cs: Report 1515 (response file specified multiple times)
28484         Report 1516 (Source file specified multiple times).
28486         * expression.cs (Argument.Resolve): Signal 1510
28488         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
28489         access not allowed in static code)
28491 2002-01-11  Ravi Pratap  <ravi@ximian.com>
28493         * typemanager.cs (IsPointerType): Utility method which we are going
28494         to need a lot.
28496         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
28497         the object type, so we take care of that.
28499         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
28501         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
28502         added to non-params parameters :-)
28504         * typemanager.cs (CSharpName): Include 'void' type too. 
28506         (void_ptr_type): Include in the set of core types.
28508         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
28509         duplicating code.
28511         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
28512         an unsafe context.
28514         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
28515         completely forgotten about it.
28517 2002-01-10  Ravi Pratap  <ravi@ximian.com>
28519         * cs-parser.jay (pointer_type): Add. This begins our implementation
28520         of parsing rules for unsafe code.
28522         (unsafe_statement): Implement.
28524         (embedded_statement): Modify to include the above.
28526         * statement.cs (Unsafe): Implement new class for unsafe blocks.
28528         * codegen.cs (EmitContext.InUnsafe): Add. This determines
28529         if the current context is an unsafe one.
28531         * cs-parser.jay (local_variable_pointer_type): Since local variable types
28532         are handled differently, we need separate rules for them.
28534         (local_variable_declaration): Update to use local_variable_pointer_type
28535         to allow variable declarations of unmanaged pointer types.
28537         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
28538         in unsafe contexts.
28540         * ../errors/cs0214.cs : Add.
28542 2002-01-16  Nick Drochak  <ndrochak@gol.com>
28544         * makefile: remove 'response' file when cleaning.
28546 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
28548         * cs-parser.jay: Report 1524.
28550 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
28552         * typemanager.cs (RegisterMethod): drop checking if we have
28553         registered this from here
28555 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
28557         * class.cs (Method.EmitDestructor): Implement calling our base
28558         destructor. 
28560         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
28561         value of InFinally.
28563         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
28564         this routine and will wrap the call in a try/catch block.  Deal
28565         with the case.
28567 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
28569         * ecore.cs (Expression.MemberLookup): instead of taking a
28570         parameter `same_type' that was used to tell whether we could
28571         access private members we compute our containing type from the
28572         EmitContext.
28574         (FieldExpr): Added partial support for volatile fields.  This does
28575         not work for volatile fields exposed from assemblies, as I can not
28576         figure out how to extract the modreq from it.
28578         Updated all the source files to use this.
28580         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
28581         because it is referenced by MemberLookup very often. 
28583 2002-01-09  Ravi Pratap  <ravi@ximian.com>
28585         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
28586         TypeBuilder.GetCustomAttributes to retrieve what we need.
28588         Get rid of redundant default_member_attr_type as this is the same as
28589         default_member_type which already exists.
28591         * interface.cs, attribute.cs : Update accordingly.
28593 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
28595         * typemanager.cs: Enable IndexerPropertyName again.  It does not
28596         work for TYpeBuilders though.  Ravi, can you please fix this?
28598         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
28600         * expression.cs (Argument.Emit): Handle the case of ref objects
28601         being passed to ref functions;  
28603         (ParameterReference.EmitLoad): Loads the content of the pointer
28604         without dereferencing.
28606 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
28608         * cs-tokenizer.cs: Implemented the pre-processing expressions.
28610 2002-01-08  Ravi Pratap  <ravi@ximian.com>
28612         * class.cs (Indexer.DefineMethod): Incorporate the interface
28613         type in the name of the method if we are doing explicit interface
28614         implementation.
28616         * expression.cs (ConversionExists): Remove as it is completely obsolete.
28618         (BetterConversion): Fix extremely trivial bug where we were referring to
28619         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
28620         again !
28622         * ../errors/bug16.cs : Add although we have fixed it.
28624 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
28626         * expression.cs (BaseIndexer): Begin implementation.
28628         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
28630         * cs-parser.jay (indexer_declarator): Use qualified_identifier
28631         production directly to remove a shift/reduce, and implement
28632         explicit interface implementation.
28634         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
28635         after a floating point suffix.
28637         * expression.cs (DoNumericPromotions): Improved the conversion for
28638         uint/uint.  If we have a constant, we avoid doing a typecast to a
28639         larger type.
28641         * class.cs (Indexer): Implement explicit interface implementation
28642         for indexers.
28644 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
28646         * class.cs: make the default instance constructor public and hidebysig.
28648 2001-01-03  Ravi Pratap  <ravi@ximian.com>
28650         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
28651         so we can call it from elsewhere.
28653         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
28654         we emit it internally if the class has a defined indexer; otherwise the user
28655         emits it by decorating the class definition with the DefaultMemberAttribute.
28657         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
28658         attribute is not used on a type which defines an indexer.
28660         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
28661         character when we skip whitespace.
28663         * ../errors/cs0646.cs : Add.
28665 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
28667         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
28668         again. 
28670         * makefile: Add practical target `mcs3.exe' which builds the third
28671         generation compiler. 
28673         * expression.cs (New): Fix structures constructor calling.
28675         * class.cs (Property, Method, Indexer): Emit Final flag on the
28676         method if we are an interface implementation and we are not
28677         abstract. 
28679         * ecore.cs (PropertyExpr): New public field `IsBase', tells
28680         whether this property is referencing a `base' method.
28682         * expression.cs (Invocation.EmitCall): take an extra argument:
28683         is_base, this is used to determine whether the `call' or
28684         `callvirt' opcode should be used.
28687         * delegate.cs: update EmitCall.
28689         * class.cs (Method.Define): Set NewSlot for the cases where we are
28690         not implementing an interface method.
28692         (Property.Define): ditto.
28694 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
28696         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
28697         'r'.  Allows mcs to parse itself fully.
28699 2002-01-02  Ravi Pratap  <ravi@ximian.com>
28701         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
28702         of the number of initializers that require the InitializeArray method.
28704         (CheckIndices): Store the Expression in all cases - not the plain value. Also
28705         update the above field where necessary.
28707         (MakeByteBlob): Update accordingly.
28709         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
28710         greater than 2.
28712         (EmitDynamicInitializers): Update in accordance with the new optimization.
28714         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
28715         same OpCode applies.
28717         * cs-parser.jay : Fix some glaring errors I introduced.
28719 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
28721         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
28722         so that we can check for name clashes there too.
28724         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
28725         for interface indexers.
28727         * interfaces.cs (Define): Emit the default member attribute.
28729         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
28730         variable was being referred to while setting the value ;-)
28732 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
28734         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
28735         byte-by-byte information when we know the data is zero.
28737         Make the block always a multiple of 4, because
28738         DefineInitializedData has a bug.
28740         * assign.cs: Fix, we should assign from the temporary, not from
28741         the source. 
28743         * expression.cs (MakeByteBlob): Fix my incorrect code.
28745 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
28747         * typemanager.cs (EnumToUnderlying): This function is used to get
28748         the underlying type from an enumeration, because it does not
28749         always work. 
28751         * constant.cs: Use the I4_S form for values between -128 and 127.
28753         * statement.cs (Block.LookupLabel): Looks up a label.
28754         (Block): Drop support for labeled blocks.
28756         (LabeledStatement): New kind of statement that represents a label
28757         only.
28759         (Goto): Finally implement this bad boy.
28761         * cs-parser.jay: Update to reflect new mechanism to implement
28762         labels.
28764 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
28766         * codegen.cs (EmitContext.This): a codegen property that keeps the
28767         a single instance of this instead of creating many different this
28768         instances. 
28770         * delegate.cs (Delegate.DoResolve): Update to use the property;
28772         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
28774         * expression.cs (BaseAccess.DoResolve): Ditto.
28776 2001-12-29  Ravi Pratap  <ravi@ximian.com>
28778         * typemanager.cs (methodimpl_attr_type): Add to hold the type
28779         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
28781         (InitCoreTypes): Update accordingly.
28783         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
28784         so we can quickly store the state.
28786         (ApplyAttributes): Set the correct implementation flags
28787         for InternalCall methods.
28789 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
28791         * expression.cs (EmitCall): if a method is not virtual, then do
28792         not use callvirt on it.
28794         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
28795         user defined stuff) requires the use of stobj, which takes an
28796         address on the stack instead of an array and an index.  So emit
28797         the Ldelema operation for it.
28799         (EmitStoreOpcode): Use stobj for valuetypes.
28801         (UnaryMutator.EmitCode): Use the right 1 value depending on
28802         whether we are dealing with int64/uint64, float or doubles.
28804         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
28805         constructors that I implemented last night.
28807         (Constructor.IsDefault): Fix to work properly for static
28808         constructors.
28810         * cs-parser.jay (CheckDef): report method signature errors.
28811         Update error number 103 to be 132.
28813         * decl.cs: New AdditionResult enumeration value: MethodExists.
28814         Although we do this check for methods later on in the semantic
28815         analysis, catching repeated default constructors is so easy that
28816         we catch these here. 
28818         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
28819         promotions code.
28821         (ParameterReference.EmitAssign, Emit): handle
28822         bools as bytes.
28824         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
28825         (ArrayAccess.EmitStoreOpcode): ditto.
28827         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
28829         * expression.cs (MakeByteBlob): Complete all the missing types
28830         (uint, short, ushort, byte, sbyte)
28832         * class.cs: Only init instance field initializers on instance
28833         constructors. 
28835         Rename `constructors' to instance_constructors. 
28837         (TypeContainer.AddConstructor): Only add constructors to the list
28838         if it is not static.
28840         Make sure that we handle default_static_constructor independently
28841         everywhere where we handle instance_constructors
28843 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
28845         * class.cs: Do not lookup or create a base initializer for a
28846         static constructor.
28848         (ConstructorInitializer.Resolve): use the proper type to lookup
28849         for constructors.
28851         * cs-parser.jay: Report error 1585 (modifiers between type and name).
28853         * enum.cs, interface.cs: Remove CloseType, this is taken care by
28854         in DeclSpace. 
28856         * decl.cs: CloseType is now an virtual method, the default
28857         implementation just closes this type.
28859 2001-12-28  Ravi Pratap  <ravi@ximian.com>
28861         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
28862         to PreserveSig by default. Also emit HideBySig on such methods.
28864         Basically, set the defaults to standard values.
28866         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
28867         argument, if candidate is better, it can't be worse than the best !
28869         (Invocation): Re-write bits to differentiate between methods being
28870         applicable in their expanded form and their normal form - for params
28871         methods of course.
28873         Get rid of use_standard everywhere as only standard conversions are allowed
28874         in overload resolution. 
28876         More spec conformance.
28878 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
28880         * driver.cs: Add --timestamp, to see where the compiler spends
28881         most of its time.
28883         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
28884         `this' in static code.
28886         (SimpleName.DoResolve): Implement in terms of a helper function
28887         that allows static-references to be passed upstream to
28888         MemberAccess.
28890         (Expression.ResolveWithSimpleName): Resolve specially simple
28891         names when called by MemberAccess to implement the special
28892         semantics. 
28894         (Expression.ImplicitReferenceConversion): Handle conversions from
28895         Null to reference types before others, as Null's type is
28896         System.Object. 
28898         * expression.cs (Invocation.EmitCall): Handle the special case of
28899         calling methods declared on a reference type from a ValueType
28900         (Base classes System.Object and System.Enum)
28902         (MemberAccess.Resolve): Only perform lookups on Enumerations if
28903         the left hand side is a TypeExpr, not on every enumeration. 
28905         (Binary.Resolve): If types are reference types, then do a cast to
28906         object on operators != and == of both arguments.
28908         * typemanager.cs (FindMembers): Extract instance and static
28909         members if requested.
28911         * interface.cs (PopulateProperty): Use void_type instead of null
28912         as the return type for the setter method.
28914         (PopulateIndexer): ditto.
28916 2001-12-27  Ravi Pratap  <ravi@ximian.com>
28918         * support.cs (ReflectionParameters): Fix minor bug where we
28919         were examining the wrong parameter for the ParamArray attribute.
28921         Cope with requests for the type of the parameter at position
28922         greater than the params parameter's. We now return the element
28923         type of the params array as that makes more sense.
28925         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
28926         accordingly as we no longer have to extract the element type
28927         ourselves.
28929         (Invocation.OverloadResolve): Update.
28931 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
28933         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
28934         against IEnumerator, test whether the return value is a descendant
28935         of the IEnumerator interface.
28937         * class.cs (Indexer.Define): Use an auxiliary method to implement
28938         the other bits of the method definition.  Begin support for
28939         explicit interface implementation.
28941         (Property.DefineMethod): Use TypeManager.void_type instead of null
28942         for an empty return value.
28944 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
28946         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
28947         dealing with a FieldExpr which is composed of a FieldBuilder, in
28948         the code path we did extract the constant, but we should have
28949         obtained the underlying value to be able to cast it (otherwise we
28950         end up in an infinite loop, this is what Ravi was running into).
28952         (ArrayCreation.UpdateIndices): Arrays might be empty.
28954         (MemberAccess.ResolveMemberAccess): Add support for section
28955         14.5.4.1 that deals with the special case of E.I when E is a type
28956         and something else, that I can be a reference to a static member.
28958         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
28959         handle a particular array type to create byte blobs, it is just
28960         something we dont generate byteblobs for.
28962         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
28963         arguments. 
28965         * location.cs (Push): remove the key from the hashtable that we
28966         are about to add.   This happens for empty files.
28968         * driver.cs: Dispose files after we have parsed them.
28970         (tokenize): new function that only runs the tokenizer on its
28971         input, for speed testing.
28973 2001-12-26  Ravi Pratap  <ravi@ximian.com>
28975         * class.cs (Event.Define): Define the private field only if there
28976         are no accessors defined.
28978         * expression.cs (ResolveMemberAccess): If there is no associated
28979         field with the event, that means we have an event defined with its
28980         own accessors and we should flag error cs0070 since transforming
28981         ourselves into a field is not valid in that case.
28983         * ecore.cs (SimpleName.DoResolve): Same as above.
28985         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
28986         and charset to sane values.
28988 2001-12-25  Ravi Pratap  <ravi@ximian.com>
28990         * assign.cs (DoResolve): Perform check on events only if they 
28991         are being accessed outside the declaring type.
28993         * cs-parser.jay (event_declarations): Update rules to correctly
28994         set the type of the implicit parameter etc.
28996         (add_accessor, remove_accessor): Set current local parameters.
28998         * expression.cs (Binary): For delegate addition and subtraction,
28999         cast the return value from the method into the appropriate delegate
29000         type.
29002 2001-12-24  Ravi Pratap  <ravi@ximian.com>
29004         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
29005         of these as the workaround is unnecessary.
29007         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
29008         delegate data - none of that is needed at all.
29010         Re-write bits to extract the instance expression and the delegate method
29011         correctly.
29013         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
29014         on delegates too.
29016         * attribute.cs (ApplyAttributes): New method to take care of common tasks
29017         of attaching attributes instead of duplicating code everywhere.
29019         * everywhere : Update code to do attribute emission using the above method.
29021 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
29023         * expression.cs (IsParamsMethodApplicable): if there are not
29024         parameters, return immediately.
29026         * ecore.cs: The 0 literal can be implicity converted to an enum
29027         type. 
29029         (SimpleName.DoResolve): First lookup the type, then lookup the
29030         members. 
29032         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
29033         want to get its address.  If the InstanceExpression is not
29034         addressable, store the result in a temporary variable, then get
29035         the address of it.
29037         * codegen.cs: Only display 219 errors on warning level or above. 
29039         * expression.cs (ArrayAccess): Make it implement the
29040         IMemoryLocation interface.
29042         (Binary.DoResolve): handle the operator == (object a, object b)
29043         and operator != (object a, object b) without incurring into a
29044         BoxedCast (because 5 != o should never be performed).
29046         Handle binary enumerator operators.
29048         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
29049         value type, otherwise use Ldelem_ref.
29051         Use precomputed names;
29053         (AddressOf): Implement address of
29055         * cs-parser.jay (labeled_statement): Fix recursive block
29056         addition by reworking the production.
29058         * expression.cs (New.DoEmit): New has a special case:
29059                 
29060                  If we are dealing with a ValueType, we have a few
29061                  situations to deal with:
29062                 
29063                     * The target of New is a ValueType variable, that is
29064                       easy, we just pass this as the variable reference
29065                 
29066                     * The target of New is being passed as an argument,
29067                       to a boxing operation or a function that takes a
29068                       ValueType.
29069                 
29070                       In this case, we need to create a temporary variable
29071                       that is the argument of New.
29074 2001-12-23  Ravi Pratap  <ravi@ximian.com>
29076         * rootcontext.cs (LookupType): Check that current_type is not null before
29077         going about looking at nested types.
29079         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
29080         not implement the IAssignMethod interface any more.
29082         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
29083         where we tranform them into FieldExprs if they are being resolved from within
29084         the declaring type.
29086         * ecore.cs (SimpleName.DoResolve): Do the same here.
29088         * assign.cs (DoResolve, Emit): Clean up code considerably. 
29090         * ../errors/bug10.cs : Add.
29092         * ../errors/cs0070.cs : Add.
29094         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
29096         * assign.cs : Get rid of EventIsLocal everywhere.
29098 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
29100         * ecore.cs (ConvertIntLiteral): finished the implementation.
29102         * statement.cs (SwitchLabel): Convert the value we are using as a
29103         key before looking up the table.
29105 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
29107         * codegen.cs (EmitTopBlock): Require a Location argument now.
29109         * cs-parser.jay (constructor_declarator): We need to setup
29110         current_local_parameters before we parse the
29111         opt_constructor_initializer, to allow the variables to be bound
29112         to the constructor arguments.
29114         * rootcontext.cs (LookupType): First lookup nested classes in our
29115         class and our parents before we go looking outside our class.
29117         * expression.cs (ConstantFold): Extract/debox the values at the
29118         beginnning. 
29120         * rootcontext.cs (EmitCode): Resolve the constants first before we
29121         resolve the types.  This is not really needed, but it helps debugging.
29123         * statement.cs: report location.
29125         * cs-parser.jay: pass location to throw statement.
29127         * driver.cs: Small bug fix.
29129         * report.cs: Updated format to be 4-zero filled digits.
29131 2001-12-22  Ravi Pratap  <ravi@ximian.com>
29133         * expression.cs (CheckIndices): Fix minor bug where the wrong
29134         variable was being referred to ;-)
29136         (DoEmit): Do not call EmitStaticInitializers when the 
29137         underlying type is System.Object.
29139 2001-12-21  Ravi Pratap  <ravi@ximian.com>
29141         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
29142         and do the usual workaround for SRE.
29144         * class.cs (MyEventBuilder.EventType): New member to get at the type
29145         of the event, quickly.
29147         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
29149         * assign.cs (Assign.DoResolve): Handle the case when the target
29150         is an EventExpr and perform the necessary checks.
29152         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
29153         interface.
29155         (SimpleName.MemberStaticCheck): Include check for EventExpr.
29157         (EventExpr): Set the type in the constructor itself since we 
29158         are meant to be born fully resolved.
29160         (EventExpr.Define): Revert code I wrote earlier.
29161                 
29162         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
29163         instance expression is null. The instance expression is a This in that case
29164         or a null, depending on whether it is a static method or not.
29166         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
29167         refers to more than one method.
29169         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
29170         and accordingly flag errors.
29172 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
29174         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
29176 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
29178         * location.cs (ToString): Provide useful rutine.
29180 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
29182         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
29183         objects, return the actual integral boxed.
29185         * statement.cs (SwitchLabel): define an ILLabel for each
29186         SwitchLabel. 
29188         (Switch.CheckSwitch): If the value is a Literal, extract
29189         the underlying literal.
29191         Also in the unused hashtable we had, add the SwitchLabel so we can
29192         quickly look this value up.
29194         * constant.cs: Implement a bunch of new constants.  Rewrite
29195         Literal based on this.  Made changes everywhere to adapt to this.
29197         * expression.cs (Expression.MakeByteBlob): Optimize routine by
29198         dereferencing array only once, and also copes with enumrations.
29200         bytes are two bytes wide, not one.
29202         (Cast): Perform constant conversions.
29204         * ecore.cs (TryImplicitIntConversion): Return literals instead of
29205         wrappers to the literals here.
29207         * expression.cs (DoNumericPromotions): long literals can converted
29208         to ulong implicity (this is taken care of elsewhere, but I was
29209         missing this spot).
29211         * ecore.cs (Expression.Literalize): Make the return type Literal,
29212         to improve type checking.
29214         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
29216 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
29218         * literal.cs: Revert code from ravi that checked the bounds.  The
29219         bounds are sane by the definition of the type itself. 
29221         * typemanager.cs: Fix implementation of ImplementsInterface.  We
29222         need to actually look up in our parent hierarchy for interfaces
29223         implemented. 
29225         * const.cs: Use the underlying type for enumerations
29227         * delegate.cs: Compute the basename for the delegate creation,
29228         that should fix the delegate test case, and restore the correct
29229         Type Lookup semantics in rootcontext
29231         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
29232         referencing a nested type with the Reflection API is using the "+"
29233         sign. 
29235         * cs-parser.jay: Do not require EOF token at the end.
29237 2001-12-20  Ravi Pratap  <ravi@ximian.com>
29239         * rootcontext.cs (LookupType): Concatenate type names with
29240         a '.' instead of a '+' The test suite passes again.
29242         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
29243         field of the enumeration.
29245         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
29246         the case when the member is an EventExpr.
29248         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
29249         static has an associated instance expression.
29251         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
29253         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
29255         * class.cs (Event.Define): Register event and perform appropriate checks
29256         for error #111.
29258         We define the Add and Remove methods even if the use provides none because
29259         in that case, we provide default implementations ourselves.
29261         Define a private field of the type of the event. This is done by the CSC compiler
29262         and we should be doing it too ;-)
29264         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
29265         More methods we use in code we generate.
29267         (multicast_delegate_type, delegate_type): Two separate types since the distinction
29268         is important.
29270         (InitCoreTypes): Update accordingly for the above.
29272         * class.cs (Event.Emit): Generate code for default accessors that we provide
29274         (EmitDefaultMethod): Do the job in the above.
29276         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
29277         appropriate place.
29279 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
29281         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
29282         builders even if we were missing one.
29284         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
29285         pass the Basename as our class name instead of the Name.  The
29286         basename will be correctly composed for us.
29288         * parameter.cs (Paramters): Now takes a Location argument.
29290         * decl.cs (DeclSpace.LookupType): Removed convenience function and
29291         make all the code call directly LookupType in RootContext and take
29292         this chance to pass the Location information everywhere.
29294         * Everywhere: pass Location information.
29296 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
29298         * class.cs (Constructor.Define): Updated way of detecting the
29299         length of the parameters.
29301         (TypeContainer.DefineType): Use basename as the type name for
29302         nested types.
29304         (TypeContainer.Define): Do not recursively define types here, as
29305         definition is taken care in order by the RootContext.
29307         * tree.cs: Keep track of namespaces in a per-file basis.
29309         * parameter.cs (Parameter.ComputeSignature): Update to use
29310         DeclSpace. 
29312         (Parameters.GetSignature): ditto.
29314         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
29315         instead of a TypeContainer.
29317         (Interface.SemanticAnalysis): Use `this' instead of our parent to
29318         resolve names.  Because we need to be resolve in our context, not
29319         our parents.
29321         * driver.cs: Implement response files.
29323         * class.cs (TypeContainer.DefineType): If we are defined, do not
29324         redefine ourselves.
29326         (Event.Emit): Emit the code for add/remove handlers.
29327         (Event.Define): Save the MethodBuilders for add/remove.
29329         * typemanager.cs: Use pair here too.
29331         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
29332         DictionaryEntry requires the first argument to be non-null.  
29334         (enum_declaration): Compute full name for registering the
29335         enumeration.
29337         (delegate_declaration): Instead of using
29338         formal_parameter_list, use opt_formal_parameter_list as the list
29339         can be empty.
29341         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
29342         (EventParsing): New property that controls whether `add' and
29343         `remove' are returned as tokens or identifiers (for events);
29345 2001-12-19  Ravi Pratap  <ravi@ximian.com>
29347         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
29348         use MyEventBuilder only and let it wrap the real builder for us.
29350         (MyEventBuilder): Revamp constructor etc.
29352         Implement all operations that we perform on EventBuilder in precisely the same
29353         way here too.
29355         (FindMembers): Update to use the EventBuilder member.
29357         (Event.Emit): Update accordingly.
29359 2001-12-18  Ravi Pratap  <ravi@ximian.com>
29361         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
29362         by calling the appropriate methods.
29364         (GetCustomAttributes): Make stubs as they cannot possibly do anything
29365         useful.
29367         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
29369 2001-12-17  Ravi Pratap  <ravi@ximian.com>
29371         * delegate.cs (Delegate.Populate): Check that the return type
29372         and various parameters types are indeed accessible.
29374         * class.cs (Constructor.Define): Same here.
29376         (Field.Define): Ditto.
29378         (Event.Define): Ditto.
29380         (Operator.Define): Check that the underlying Method defined itself
29381         correctly - so it's MethodBuilder should not be null.
29383         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
29384         expression happens to be null.
29386         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
29387         members but as of now we don't seem to be able to do anything really useful with it.
29389         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
29390         not the EventBuilder.
29392 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
29394         * cs-tokenizer.cs: Add support for defines.
29395         Add support for #if, #elif, #else, #endif
29397         (eval_var): evaluates a variable.
29398         (eval): stubbed for evaluating functions.
29400         * cs-parser.jay: Pass the defines information
29402         * driver.cs: Add --define command line option.
29404         * decl.cs: Move MemberCore here.
29406         Make it the base class for DeclSpace.  This allows us to catch and
29407         report 108 and 109 for everything now.
29409         * class.cs (TypeContainer.Define): Extract all the members
29410         before populating and emit the warning 108 (new keyword required
29411         to override) instead of having each member implement this.
29413         (MemberCore.Define): New abstract method, we will be using this in
29414         the warning reporting engine in Populate.
29416         (Operator.Define): Adjust to new MemberCore protocol. 
29418         * const.cs (Const): This does not derive from Expression, it is a
29419         temporary object we use to create fields, it is a MemberCore. 
29421         * class.cs (Method.Define): Allow the entry point to be in a
29422         specific class.
29424         * driver.cs: Rewrite the argument handler to clean it up a bit.
29426         * rootcontext.cs: Made it just an auxiliary namespace feature by
29427         making everything static.
29429         * driver.cs: Adapt code to use RootContext type name instead of
29430         instance variable.
29432         * delegate.cs: Remove RootContext argument.
29434         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
29435         argument. 
29437         * class.cs (Event.Define): The lookup can fail.
29439         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
29441         * expression.cs: Resolve the this instance before invoking the code.
29443 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
29445         * cs-parser.jay: Add a production in element_access that allows
29446         the thing to become a "type" reference.  This way we can parse
29447         things like "(string [])" as a type.
29449         Note that this still does not handle the more complex rules of
29450         casts. 
29453         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
29455         * ecore.cs: (CopyNewMethods): new utility function used to
29456         assemble the list of methods from running FindMembers.
29458         (MemberLookup): Rework FindMembers so that 
29460 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
29462         * class.cs (TypeContainer): Remove Delegates who fail to be
29463         defined.
29465         * delegate.cs (Populate): Verify that we dont get null return
29466         values.   TODO: Check for AsAccessible.
29468         * cs-parser.jay: Use basename to emit error 574 (destructor should
29469         have the same name as container class), not the full name.
29471         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
29472         possible representation.  
29474         Also implements integer type suffixes U and L.
29476 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
29478         * expression.cs (ArrayCreation.DoResolve): We need to do the
29479         argument resolution *always*.
29481         * decl.cs: Make this hold the namespace.  Hold the root context as
29482         well.
29483         (LookupType): Move here.
29485         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
29487         * location.cs (Row, Name): Fixed the code, it was always returning
29488         references to the first file.
29490         * interface.cs: Register properties defined through interfaces.
29492         * driver.cs: Add support for globbing on the command line
29494         * class.cs (Field): Make it derive from MemberCore as well.
29495         (Event): ditto.
29497 2001-12-15  Ravi Pratap  <ravi@ximian.com>
29499         * class.cs (Event::Define): Check that the type of the event is a delegate
29500         type else flag error #66.
29502         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
29503         same.
29505         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
29506         values of EntryPoint, CharSet etc etc.
29508         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
29510         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
29511         be null and we should ignore this. I am not sure if this is really clean. Apparently,
29512         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
29513         which needs this to do its work.
29515         * ../errors/cs0066.cs : Add.
29517 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
29519         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
29520         helper functions.
29522         * class.cs: (MethodSignature.MethodSignature): Removed hack that
29523         clears out the parameters field.
29524         (MemberSignatureCompare): Cleanup
29526         (MemberCore): New base class used to share code between MethodCore
29527         and Property.
29529         (RegisterRequiredImplementations) BindingFlags.Public requires
29530         either BindingFlags.Instace or Static.  Use instance here.
29532         (Property): Refactored code to cope better with the full spec.
29534         * parameter.cs (GetParameterInfo): Return an empty array instead
29535         of null on error.
29537         * class.cs (Property): Abstract or extern properties have no bodies.
29539         * parameter.cs (GetParameterInfo): return a zero-sized array.
29541         * class.cs (TypeContainer.MethodModifiersValid): Move all the
29542         method modifier validation to the typecontainer so we can reuse
29543         this on properties.
29545         (MethodCore.ParameterTypes): return an empty sized array of types.
29547         (Property.Define): Test property modifier validity.
29549         Add tests for sealed/override too.
29551         (Method.Emit): abstract or extern methods have no bodies.
29553 2001-12-14  Ravi Pratap  <ravi@ximian.com>
29555         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
29556         thing.
29558         (Method::Define, ::Emit): Modify accordingly.
29560         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
29562         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
29564         * makefile: Pass in /unsafe.
29566 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
29568         * class.cs (MakeKey): Kill routine.
29570         * class.cs (TypeContainer.Define): Correctly define explicit
29571         method implementations (they require the full interface name plus
29572         the method name).
29574         * typemanager.cs: Deply the PtrHashtable here and stop using the
29575         lame keys.  Things work so much better.
29577         This of course broke everyone who depended on `RegisterMethod' to
29578         do the `test for existance' test.  This has to be done elsewhere.
29580         * support.cs (PtrHashtable): A hashtable that avoid comparing with
29581         the object stupid Equals method (because, that like fails all over
29582         the place).  We still do not use it.
29584         * class.cs (TypeContainer.SetRequiredInterface,
29585         TypeContainer.RequireMethods): Killed these two routines and moved
29586         all the functionality to RegisterRequiredImplementations.
29588         (TypeContainer.RegisterRequiredImplementations): This routine now
29589         registers all the implementations required in an array for the
29590         interfaces and abstract methods.  We use an array of structures
29591         which can be computed ahead of time to reduce memory usage and we
29592         also assume that lookups are cheap as most classes will not
29593         implement too many interfaces.
29595         We also avoid creating too many MethodSignatures.
29597         (TypeContainer.IsInterfaceMethod): Update and optionally does not
29598         clear the "pending" bit if we find that there are problems with
29599         the declaration.
29601         (TypeContainer.VerifyPendingMethods): Update to report errors of
29602         methods that look like implementations but are not.
29604         (TypeContainer.Define): Add support for explicit interface method
29605         implementation. 
29607 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
29609         * typemanager.cs: Keep track of the parameters here instead of
29610         being a feature of the TypeContainer.
29612         * class.cs: Drop the registration of parameters here, as
29613         InterfaceMethods are also interface declarations.
29615         * delegate.cs: Register methods with the TypeManager not only with
29616         the TypeContainer.  This code was buggy.
29618         * interface.cs: Full registation here.
29620 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
29622         * expression.cs: Remove reducer for binary expressions, it can not
29623         be done this way.
29625         * const.cs: Put here the code that used to go into constant.cs
29627         * constant.cs: Put here the code for constants, this is a new base
29628         class for Literals.
29630         * literal.cs: Make Literal derive from Constant.
29632 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
29634         * statement.cs (Return.Emit): Report error 157 if the user
29635         attempts to return from a finally block.
29637         (Return.Emit): Instead of emitting a return, jump to the end of
29638         the function.
29640         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
29641         LocalBuilder to store the result of the function.  ReturnLabel is
29642         the target where we jump.
29645 2001-12-09  Radek Doulik  <rodo@ximian.com>
29647         * cs-parser.jay: remember alias in current namespace
29649         * ecore.cs (SimpleName::DoResolve): use aliases for types or
29650         namespaces
29652         * class.cs (LookupAlias): lookup alias in my_namespace
29654         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
29655         aliases hashtable
29656         (LookupAlias): lookup alias in this and if needed in parent
29657         namespaces
29659 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
29661         * support.cs: 
29663         * rootcontext.cs: (ModuleBuilder) Made static, first step into
29664         making things static.  I need this to avoid passing the
29665         TypeContainer when calling ParameterType.
29667         * support.cs (InternalParameters.ParameterType): Remove ugly hack
29668         that did string manipulation to compute the type and then call
29669         GetType.  Use Parameter.ParameterType instead.
29671         * cs-tokenizer.cs: Consume the suffix for floating values.
29673         * expression.cs (ParameterReference): figure out whether this is a
29674         reference parameter or not.  Kill an extra variable by computing
29675         the arg_idx during emission.
29677         * parameter.cs (Parameters.GetParameterInfo): New overloaded
29678         function that returns whether a parameter is an out/ref value or not.
29680         (Parameter.ParameterType): The type of the parameter (base,
29681         without ref/out applied).
29683         (Parameter.Resolve): Perform resolution here.
29684         (Parameter.ExternalType): The full type (with ref/out applied).
29686         * statement.cs (Using.Emit, Using.EmitExpression): Implement
29687         support for expressions on the using statement.
29689 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
29691         * statement.cs (Using.EmitLocalVariableDecls): Split the
29692         localvariable handling of the using statement.
29694         (Block.EmitMeta): Keep track of variable count across blocks.  We
29695         were reusing slots on separate branches of blocks.
29697         (Try.Emit): Emit the general code block, we were not emitting it. 
29699         Check the type of the declaration to be an IDisposable or
29700         something that can be implicity converted to it. 
29702         Emit conversions if required.
29704         * ecore.cs (EmptyExpression): New utility class.
29705         (Expression.ImplicitConversionExists): New utility function.
29707 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
29709         * statement.cs (Using): Implement.
29711         * expression.cs (LocalVariableReference): Support read only variables.
29713         * statement.cs: Remove the explicit emit for the Leave opcode.
29714         (VariableInfo): Add a readonly field.
29716 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
29718         * ecore.cs (ConvCast): new class used to encapsulate the various
29719         explicit integer conversions that works in both checked and
29720         unchecked contexts.
29722         (Expression.ConvertNumericExplicit): Use new ConvCast class to
29723         properly generate the overflow opcodes.
29725 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
29727         * statement.cs: The correct type for the EmptyExpression is the
29728         element_type, not the variable type.  Ravi pointed this out.
29730 2001-12-04  Ravi Pratap  <ravi@ximian.com>
29732         * class.cs (Method::Define): Handle PInvoke methods specially
29733         by using DefinePInvokeMethod instead of the usual one.
29735         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
29736         above to do the task of extracting information and defining the method.
29738 2001-12-04  Ravi Pratap  <ravi@ximian.com>
29740         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
29741         of the condition for string type.
29743         (Emit): Move that here. 
29745         (ArrayCreation::CheckIndices): Keep string literals in their expression
29746         form.
29748         (EmitDynamicInitializers): Handle strings appropriately.
29750 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
29752         * codegen.cs (EmitContext): Replace multiple variables with a
29753         single pointer to the current Switch statement.
29755         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
29756         EmitContext.
29758 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
29760         * statement.cs 
29762         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
29763         default'.
29765         (Foreach.Emit): Foreach on arrays was not setting
29766         up the loop variables (for break/continue).
29768         (GotoCase): Semi-implented.
29770 2001-12-03  Ravi Pratap  <ravi@ximian.com>
29772         * attribute.cs (CheckAttribute): Handle system attributes by using
29773         Attribute.GetAttributes to examine information we need.
29775         (GetValidPlaces): Same here.
29777         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
29779         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
29781         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
29783         (Method::Define): Set appropriate flags if we have a DllImport attribute.
29785         (Method::Emit): Handle the case when we are a PInvoke method.
29787 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
29789         * expression.cs: Use ResolveWithSimpleName on compound names.
29791 2001-12-02  Ravi Pratap  <ravi@ximian.com>
29793         * constant.cs (EmitConstant): Make sure we resolve the associated expression
29794         before trying to reduce it.
29796         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
29798         * constant.cs (LookupConstantValue): Implement.
29800         (EmitConstant): Use the above in emitting the constant.
29802         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
29803         that are user-defined by doing a LookupConstantValue on them.
29805         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
29806         too, like above.
29808 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
29810         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
29812         (BaseAccess.DoResolve): Implement.
29814         (MemberAccess.DoResolve): Split this routine into a
29815         ResolveMemberAccess routine that can be used independently
29817 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
29819         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
29820         As that share bits of the implementation.  Is returns a boolean,
29821         while As returns the Type that is being probed.
29823 2001-12-01  Ravi Pratap  <ravi@ximian.com>
29825         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
29826         instead of a Literal - much easier.
29828         (EnumInTransit): Remove - utterly useless :-)
29830         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
29832         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
29834         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
29835         chain when we have no associated expression.
29837 2001-11-30  Ravi Pratap  <ravi@ximian.com>
29839         * constant.cs (Define): Use Location while reporting the errror.
29841         Also emit a warning when 'new' is used and there is no inherited
29842         member to hide.
29844         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
29845         populated.
29847         (LookupEnumValue): Implement to lookup an enum member's value and define it
29848         if necessary.
29850         (Populate): Re-write accordingly to use the above routine.
29852 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
29854         * expression.cs (This): Fix prototype for DoResolveLValue to
29855         override the base class DoResolveLValue.
29857         * cs-parser.cs: Report errors cs574 and cs575 (destructor
29858         declarations) 
29860         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
29861         (we need to load the address of the field here).  This fixes
29862         test-22. 
29864         (FieldExpr.DoResolveLValue): Call the DoResolve
29865         function to initialize the Instance expression.
29867         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
29868         correctly the GetEnumerator operation on a value type.
29870         * cs-parser.jay: Add more simple parsing error catches.
29872         * statement.cs (Switch): Add support for string switches.
29873         Handle null specially.
29875         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
29877 2001-11-28  Ravi Pratap  <ravi@ximian.com>
29879         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
29881         (declare_local_constant): New helper function.
29883         * statement.cs (AddConstant): Keep a separate record of constants
29885         (IsConstant): Implement to determine if a variable is a constant.
29887         (GetConstantExpression): Implement.
29889         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
29891         * statement.cs (IsVariableDefined): Re-write.
29893 2001-11-27  Ravi Pratap  <ravi@ximian.com>
29895         * class.cs (TypeContainer::FindMembers): Look for constants
29896         in the case when we are looking for MemberTypes.Field
29898         * expression.cs (MemberAccess::DoResolve): Check that in the
29899         case we are a FieldExpr and a Literal, we are not being accessed
29900         by an instance reference.
29902         * cs-parser.jay (local_constant_declaration): Implement.
29904         (declaration_statement): Implement for constant declarations.
29906 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
29908         * statement.cs (Switch): Catch double defaults.
29910         (Switch): More work on the switch() statement
29911         implementation.  It works for integral values now, need to finish
29912         string support.
29915 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
29917         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
29918         integer literals into other integer literals.  To be used by
29919         switch. 
29921 2001-11-24  Ravi Pratap  <ravi@ximian.com>
29923         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
29924         some memory.
29926         (EmitDynamicInitializers): Cope with the above since we extract data
29927         directly from ArrayData now.
29929         (ExpectInitializers): Keep track of whether initializers are mandatory
29930         or not.
29932         (Bounds): Make it a hashtable to prevent the same dimension being 
29933         recorded for every element in that dimension.
29935         (EmitDynamicInitializers): Fix bug which prevented the Set array method
29936         from being found.
29938         Also fix bug which was causing the indices to be emitted in the reverse
29939         order.
29941 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
29943         * expression.cs (ArrayCreation): Implement the bits that Ravi left
29944         unfinished.  They do not work, because the underlying code is
29945         sloppy.
29947 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29949         * cs-parser.jay: Remove bogus fixme.
29951         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
29952         on Switch statement.
29954 2001-11-23  Ravi Pratap  <ravi@ximian.com>
29956         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
29957         the same. 
29959         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
29960         parameter. Apparently, any expression is allowed. 
29962         (ValidateInitializers): Update accordingly.
29964         (CheckIndices): Fix some tricky bugs thanks to recursion.
29966         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
29967         I was being completely brain-dead.
29969         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
29970         and re-write acordingly.
29972         (DelegateInvocation): Re-write accordingly.
29974         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
29976         (MakeByteBlob): Handle types more correctly.
29978         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
29979         initialization from expressions but it is incomplete because I am a complete
29980         Dodo :-|
29982 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29984         * statement.cs (If.Emit): Fix a bug that generated incorrect code
29985         on If.  Basically, we have to return `true' (ie, we do return to
29986         our caller) only if both branches of the if return.
29988         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
29989         short-circuit operators, handle them as short circuit operators. 
29991         (Cast.DoResolve): Resolve type.
29992         (Cast.Cast): Take an expression as the target type.
29994         * cs-parser.jay (cast_expression): Remove old hack that only
29995         allowed a limited set of types to be handled.  Now we take a
29996         unary_expression and we resolve to a type during semantic
29997         analysis.
29999         Use the grammar productions from Rhys to handle casts (this is
30000         not complete like Rhys syntax yet, we fail to handle that corner
30001         case that C# has regarding (-x), but we will get there.
30003 2001-11-22  Ravi Pratap  <ravi@ximian.com>
30005         * class.cs (EmitFieldInitializer): Take care of the case when we have a
30006         field which is an array type.
30008         * cs-parser.jay (declare_local_variables): Support array initialization too.
30010         * typemanager.cs (MakeKey): Implement.
30012         (everywhere): Use the above appropriately.
30014         * cs-parser.jay (for_statement): Update for array initialization while
30015         declaring variables.
30017         * ecore.cs : The error message was correct, it's the variable's names that
30018         were misleading ;-) Make the code more readable.
30020         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
30021         the correct type etc.
30023         (ConvertExplicit): Handle Enum types by examining the underlying type.
30025 2001-11-21  Ravi Pratap  <ravi@ximian.com>
30027         * parameter.cs (GetCallingConvention): Always return
30028         CallingConventions.Standard for now.
30030 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
30032         * expression.cs (Binary.ResolveOperator): Update the values of `l'
30033         and `r' after calling DoNumericPromotions.
30035         * ecore.cs: Fix error message (the types were in the wrong order).
30037         * statement.cs (Foreach.ProbeCollectionType): Need to pass
30038         BindingFlags.Instance as well 
30040         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
30041         implicit int literal conversion in an empty cast so that we
30042         propagate the right type upstream.
30044         (UnboxCast): new class used to unbox value types.
30045         (Expression.ConvertExplicit): Add explicit type conversions done
30046         by unboxing.
30048         (Expression.ImplicitNumericConversion): Oops, forgot to test for
30049         the target type before applying the implicit LongLiterals to ULong
30050         literal cast.
30052 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
30054         * cs-parser.jay (for_statement): Reworked the way For works: now
30055         we declare manually any variables that are introduced in
30056         for_initializer to solve the problem of having out-of-band code
30057         emition (that is what got for broken).
30059         (declaration_statement): Perform the actual variable declaration
30060         that used to be done in local_variable_declaration here.
30062         (local_variable_declaration): Do not declare anything, just pass
30063         the information on a DictionaryEntry
30065 2001-11-20  Ravi Pratap  <ravi@ximian.com>
30067         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
30068         re-write of the logic to now make it recursive.
30070         (UpdateIndices): Re-write accordingly.
30072         Store element data in a separate ArrayData list in the above methods.
30074         (MakeByteBlob): Implement to dump the array data into a byte array.
30076 2001-11-19  Ravi Pratap  <ravi@ximian.com>
30078         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
30079         into CheckIndices.
30081         * constant.cs (Define): Implement.
30083         (EmitConstant): Re-write fully.
30085         Pass in location info.
30087         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
30088         respectively.
30090         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
30091         DictionaryEntry since we need location info too.
30093         (constant_declaration): Update accordingly.
30095         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
30096         code into another method : UpdateIndices.
30098 2001-11-18  Ravi Pratap  <ravi@ximian.com>
30100         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
30101         some type checking etc.
30103 2001-11-17  Ravi Pratap  <ravi@ximian.com>
30105         * expression.cs (ArrayCreation::ValidateInitializers): Implement
30106         bits to provide dimension info if the user skips doing that.
30108         Update second constructor to store the rank correctly.
30110 2001-11-16  Ravi Pratap  <ravi@ximian.com>
30112         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
30113         and try to implement.
30115         * ../errors/cs0150.cs : Add.
30117         * ../errors/cs0178.cs : Add.
30119 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
30121         * statement.cs: Implement foreach on multi-dimensional arrays. 
30123         * parameter.cs (Parameters.GetParameterByName): Also lookup the
30124         name of the params argument.
30126         * expression.cs: Use EmitStoreOpcode to get the right opcode while
30127         initializing the array.
30129         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
30130         we can use this elsewhere.
30132         * statement.cs: Finish implementation of foreach for single
30133         dimension arrays.
30135         * cs-parser.jay: Use an out-of-band stack to pass information
30136         around, I wonder why I need this.
30138         foreach_block: Make the new foreach_block the current_block.
30140         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
30141         function used to return a static Parameters structure.  Used for
30142         empty parameters, as those are created very frequently.
30144         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
30146 2001-11-15  Ravi Pratap  <ravi@ximian.com>
30148         * interface.cs : Default modifier is private, not public. The
30149         make verify test passes again.
30151 2001-11-15  Ravi Pratap  <ravi@ximian.com>
30153         * support.cs (ReflectionParameters): Fix logic to determine
30154         whether the last parameter is a params one. Test 9 passes again.
30156         * delegate.cs (Populate): Register the builders we define with
30157         RegisterParameterForBuilder. Test 19 passes again.
30159         * cs-parser.jay (property_declaration): Reference $6 instead
30160         of $$ to get at the location.
30162         (indexer_declaration): Similar stuff.
30164         (attribute): Ditto.
30166         * class.cs (Property): Register parameters for the Get and Set methods
30167         if they exist. Test 23 passes again.
30169         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
30170         call to EmitArguments as we are sure there aren't any params arguments. 
30171         Test 32 passes again.
30173         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
30174         IndexOutOfRangeException. 
30176         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
30177         Test 33 now passes again.
30179 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
30181         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
30182         broke a bunch of things.  Will have to come up with a better way
30183         of tracking locations.
30185         * statement.cs: Implemented foreach for single dimension arrays.
30187 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
30189         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
30190         an error.  This removes the lookup from the critical path.
30192         * cs-parser.jay: Removed use of temporary_loc, which is completely
30193         broken. 
30195 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
30197         * support.cs (ReflectionParameters.ParameterModifier): Report
30198         whether the argument is a PARAMS argument or not.
30200         * class.cs: Set the attribute `ParamArrayAttribute' on the
30201         parameter argument.
30203         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
30204         and cons_param_array_attribute (ConstructorInfo for
30205         ParamArrayAttribute)., 
30207         * codegen.cs: Emit the return using the `Return' statement, that
30208         way we can report the error correctly for missing return values. 
30210         * class.cs (Method.Emit): Clean up.
30212         * expression.cs (Argument.Resolve): Take another argument: the
30213         location where this argument is used.  Notice that this is not
30214         part of the "Argument" class as to reduce the size of the
30215         structure (we know the approximate location anyways).
30217         Test if the argument is a variable-reference, if not, then
30218         complain with a 206.
30220         (Argument.Emit): Emit addresses of variables.
30222         (Argument.FullDesc): Simplify.
30224         (Invocation.DoResolve): Update for Argument.Resolve.
30226         (ElementAccess.DoResolve): ditto.
30228         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
30229         method should be virtual, as this method is always virtual.
30231         (NewDelegate.DoResolve): Update for Argument.Resolve.
30233         * class.cs (ConstructorInitializer.DoResolve): ditto.
30235         * attribute.cs (Attribute.Resolve): ditto.
30237 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
30239         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
30241         * expression.cs (ParameterReference): Drop IStackStorage and implement
30242         IAssignMethod instead. 
30244         (LocalVariableReference): ditto.
30246         * ecore.cs (FieldExpr): Drop IStackStorage and implement
30247         IAssignMethod instead. 
30249 2001-11-13  Miguel de Icaza <miguel@ximian.com>
30251         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
30252         enumerations that are used in heavily used structures derive from
30253         byte in a laughable and pathetic attempt to reduce memory usage.
30254         This is the kind of pre-optimzations that you should not do at
30255         home without adult supervision.
30257         * expression.cs (UnaryMutator): New class, used to handle ++ and
30258         -- separatedly from the other unary operators.  Cleans up the
30259         code, and kills the ExpressionStatement dependency in Unary.
30261         (Unary): Removed `method' and `Arguments' from this class, making
30262         it smaller, and moving it all to SimpleCall, so I can reuse this
30263         code in other locations and avoid creating a lot of transient data
30264         strucutres when not required.
30266         * cs-parser.jay: Adjust for new changes.
30268 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
30270         * enum.cs (Enum.Populate): If there is a failure during
30271         definition, return
30273         * cs-parser.jay (opt_enum_base): we used to catch type errors
30274         here, but this is really incorrect.  The type error should be
30275         catched during semantic analysis.
30277 2001-12-11  Ravi Pratap  <ravi@ximian.com>
30279         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
30280         current_local_parameters as expected since I, in my stupidity, had forgotten
30281         to do this :-)
30283         * attribute.cs (GetValidPlaces): Fix stupid bug.
30285         * class.cs (Method::Emit): Perform check on applicability of attributes.
30287         (Constructor::Emit): Ditto.
30289         (Field::Emit): Ditto.
30291         (Field.Location): Store location information.
30293         (Property, Event, Indexer, Operator): Ditto.
30295         * cs-parser.jay (field_declaration): Pass in location for each field.
30297         * ../errors/cs0592.cs : Add.
30299 2001-11-12  Ravi Pratap  <ravi@ximian.com>
30301         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
30303         (InitCoreTypes): Update accordingly.
30305         (RegisterAttrType, LookupAttr): Implement.
30307         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
30308         info about the same.
30310         (Resolve): Update to populate the above as necessary.
30312         (Error592): Helper.
30314         (GetValidPlaces): Helper to the above.
30316         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
30318         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
30320 2001-11-12  Ravi Pratap  <ravi@ximian.com>
30322         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
30324         * ../errors/cs0617.cs : Add.
30326 2001-11-11  Ravi Pratap  <ravi@ximian.com>
30328         * enum.cs (Emit): Rename to Populate to be more consistent with what
30329         we expect it to do and when exactly it is called.
30331         * class.cs, rootcontext.cs : Update accordingly.
30333         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
30334         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
30336         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
30338         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
30339         of a fieldinfo using the above, when dealing with a FieldBuilder.
30341 2001-11-10  Ravi Pratap  <ravi@ximian.com>
30343         * ../errors/cs0031.cs : Add.
30345         * ../errors/cs1008.cs : Add.
30347         * ../errrors/cs0543.cs : Add.
30349         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
30350         enum type.
30352         (FindMembers): Implement.
30354         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
30355         enums and delegates too.
30357         (enum_types): Rename to builder_to_enum.
30359         (delegate_types): Rename to builder_to_delegate.
30361         * delegate.cs (FindMembers): Implement.
30363 2001-11-09  Ravi Pratap  <ravi@ximian.com>
30365         * typemanager.cs (IsEnumType): Implement.
30367         * enum.cs (Emit): Re-write parts to account for the underlying type
30368         better and perform checking etc.
30370         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
30371         of the underlying type.
30373         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
30374         value
30376         * enum.cs (error31): Helper to report error #31.
30378         * cs-parser.jay (enum_declaration): Store location of each member too.
30380         * enum.cs (member_to_location): New hashtable. 
30382         (AddEnumMember): Update location hashtable.
30384         (Emit): Use the location of each member while reporting errors.
30386 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
30388         * cs-parser.jay: A for_initializer if is a
30389         local_variable_declaration really ammount to have an implicit
30390         block with the variable declaration and no initializer for for.
30392         * statement.cs (For.Emit): Cope with null initializers.
30394         This fixes the infinite loop on for initializers.
30396 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
30398         * enum.cs: More cleanup.
30400         * ecore.cs: Remove dead code.
30402         * class.cs (Property.Emit): More simplification.
30403         (Event.Emit): ditto.
30405         Reworked to have less levels of indentation.
30407 2001-11-08  Ravi Pratap  <ravi@ximian.com>
30409         * class.cs (Property): Emit attributes.
30411         (Field): Ditto.
30413         (Event): Ditto.
30415         (Indexer): Ditto.
30417         (Operator): Ditto.
30419         * enum.cs (Emit): Ditto.
30421         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
30422         Enums too.
30424         * class.cs (Field, Event, etc.): Move attribute generation into the
30425         Emit method everywhere.
30427         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
30428         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
30429         as we had no way of defining nested enums !
30431         * rootcontext.cs : Adjust code accordingly.
30433         * typemanager.cs (AddEnumType): To keep track of enum types separately.
30435 2001-11-07  Ravi Pratap  <ravi@ximian.com>
30437         * expression.cs (EvalConstantExpression): Move into ecore.cs
30439         * enum.cs (Enum): Rename some members and make them public and readonly
30440         according to our convention.
30442         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
30443         nothing else.
30445         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
30447         (Enum::Emit): Write a simple version for now which doesn't try to compute
30448         expressions. I shall modify this to be more robust in just a while.
30450         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
30452         (TypeContainer::CloseType): Create the Enum types too.
30454         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
30456         * expression.cs (EvalConstantExpression): Get rid of completely.
30458         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
30459         user-defined values and other cases.
30461         (IsValidEnumLiteral): Helper function.
30463         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
30464         out there in the case we had a literal FieldExpr.
30466         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
30468         (Literalize): Revamp a bit to take two arguments.
30470         (EnumLiteral): New class which derives from Literal to wrap enum literals.
30472 2001-11-06  Ravi Pratap  <ravi@ximian.com>
30474         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
30476         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
30478         (Resolve): Use the above to ensure we have proper initializers.
30480 2001-11-05  Ravi Pratap  <ravi@ximian.com>
30482         * expression.cs (Expression::EvalConstantExpression): New method to 
30483         evaluate constant expressions.
30485         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
30487 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
30489         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
30490         in an array.
30492         (Binary.ResolveOperator): Handle operator != (object a, object b)
30493         and operator == (object a, object b);
30495         (Binary.DoNumericPromotions): Indicate whether the numeric
30496         promotion was possible.
30498         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
30499         Implement.  
30501         Made the ArrayAccess implement interface IAssignMethod instead of
30502         IStackStore as the order in which arguments are passed reflects
30503         this.
30505         * assign.cs: Instead of using expr.ExprClass to select the way of
30506         assinging, probe for the IStackStore/IAssignMethod interfaces.
30508         * typemanager.cs: Load InitializeArray definition.
30510         * rootcontext.cs (RootContext.MakeStaticData): Used to define
30511         static data that can be used to initialize arrays. 
30513 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
30515         * expression.cs: Handle operator== and operator!= for booleans.
30517         (Conditioal.Reduce): Implement reducer for the ?: operator.
30519         (Conditional.Resolve): Implement dead code elimination.
30521         (Binary.Resolve): Catch string literals and return a new
30522         concatenated string.
30524         (Unary.Reduce): Implement reduction of unary expressions.
30526         * ecore.cs: Split out the expression core handling here.
30528         (Expression.Reduce): New method used to perform constant folding
30529         and CSE.  This is needed to support constant-expressions. 
30531         * statement.cs (Statement.EmitBoolExpression): Pass true and false
30532         targets, and optimize for !x.
30534 2001-11-04  Ravi Pratap  <ravi@ximian.com>
30536         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
30537         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
30538         set custom atttributes.
30540         * literal.cs (Literal::GetValue): New abstract method to return the actual
30541         value of the literal, cast as an object.
30543         (*Literal): Implement GetValue method.
30545         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
30546         expressions to the arraylist but objects of type Argument.
30548         * class.cs (TypeContainer::Emit): Emit our attributes too.
30550         (Method::Emit, Constructor::Emit): Ditto.
30552         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
30553         to be ignoring earlier.
30555 2001-11-03  Ravi Pratap  <ravi@ximian.com>
30557         * attribute.cs (AttributeSection::Define): Implement to do the business
30558         of constructing a CustomAttributeBuilder.
30560         (Attribute): New trivial class. Increases readability of code.  
30562         * cs-parser.jay : Update accordingly.
30564         (positional_argument_list, named_argument_list, named_argument): New rules
30566         (attribute_arguments): Use the above so that we are more correct.
30568 2001-11-02  Ravi Pratap  <ravi@ximian.com>
30570         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
30571         to perform all checks for a method with a params parameter.
30573         (Invocation::OverloadResolve): Update to use the above method and therefore
30574         cope correctly with params method invocations.
30576         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
30577         params too.
30579         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
30580         constructors in our parent too because we can't afford to miss out on 
30581         protected ones ;-)
30583         * attribute.cs (AttributeSection): New name for the class Attribute
30585         Other trivial changes to improve readability.
30587         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
30588         use the new class names.
30590 2001-11-01  Ravi Pratap  <ravi@ximian.com>
30592         * class.cs (Method::Define): Complete definition for params types too
30594         (Indexer::Define): Ditto.
30596         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
30597         Cope everywhere with a request for info about the array parameter.
30599 2001-11-01  Ravi Pratap  <ravi@ximian.com>
30601         * tree.cs (RecordNamespace): Fix up to check for the correct key.
30603         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
30604         local_variable_type to extract the string corresponding to the type.
30606         (local_variable_type): Fixup the action to use the new helper method.
30608         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
30609         go.
30611         * expression.cs : Clean out code which uses the above.
30613 2001-10-31  Ravi Pratap  <ravi@ximian.com>
30615         * typemanager.cs (RegisterMethod): Check if we already have an existing key
30616         and bale out if necessary by returning a false.
30618         (RegisterProperty): Ditto.
30620         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
30621         and print out appropriate error messages.
30623         * interface.cs (everywhere): Ditto.
30625         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
30626         location to constructor.
30628         * class.cs (Property, Event, Indexer): Update accordingly.
30630         * ../errors/cs111.cs : Added.
30632         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
30633         of a method, as laid down by the spec.
30635         (Invocation::OverloadResolve): Use the above method.
30637 2001-10-31  Ravi Pratap  <ravi@ximian.com>
30639         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
30640         now take a TypeContainer and a Parameters object.
30642         (ParameterData): Modify return type of ParameterModifier method to be 
30643         Parameter.Modifier and not a string.
30645         (ReflectionParameters, InternalParameters): Update accordingly.
30647         * expression.cs (Argument::GetParameterModifier): Same here.
30649         * support.cs (InternalParameters::ParameterType): Find a better way of determining
30650         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
30651         symbol in it at all so maybe this is only for now.
30653 2001-10-30  Ravi Pratap  <ravi@ximian.com>
30655         * support.cs (InternalParameters): Constructor now takes an extra argument 
30656         which is the actual Parameters class.
30658         (ParameterDesc): Update to provide info on ref/out modifiers.
30660         * class.cs (everywhere): Update call to InternalParameters to pass in
30661         the second argument too.
30663         * support.cs (ParameterData): Add ParameterModifier, which is a method 
30664         to return the modifier info [ref/out etc]
30666         (InternalParameters, ReflectionParameters): Implement the above.
30668         * expression.cs (Argument::ParameterModifier): Similar function to return
30669         info about the argument's modifiers.
30671         (Invocation::OverloadResolve): Update to take into account matching modifiers 
30672         too.
30674         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
30675         a new SetFormalParameters object which we pass to InternalParameters.
30677 2001-10-30  Ravi Pratap  <ravi@ximian.com>
30679         * expression.cs (NewArray): Merge into the ArrayCreation class.
30681 2001-10-29  Ravi Pratap  <ravi@ximian.com>
30683         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
30684         NewUserdefinedArray into one as there wasn't much of a use in having
30685         two separate ones.
30687         * expression.cs (Argument): Change field's name to ArgType from Type.
30689         (Type): New readonly property which returns the proper type, taking into 
30690         account ref/out modifiers.
30692         (everywhere): Adjust code accordingly for the above.
30694         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
30695         whether we are emitting for a ref or out parameter.
30697         * expression.cs (Argument::Emit): Use the above field to set the state.
30699         (LocalVariableReference::Emit): Update to honour the flag and emit the
30700         right stuff.
30702         * parameter.cs (Attributes): Set the correct flags for ref parameters.
30704         * expression.cs (Argument::FullDesc): New function to provide a full desc.
30706         * support.cs (ParameterData): Add method ParameterDesc to the interface.
30708         (ReflectionParameters, InternalParameters): Implement the above method.
30710         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
30711         reporting errors.
30713         (Invocation::FullMethodDesc): Ditto. 
30715 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
30717         * cs-parser.jay: Add extra production for the second form of array
30718         creation. 
30720         * expression.cs (ArrayCreation): Update to reflect the above
30721         change. 
30723         * Small changes to prepare for Array initialization.
30725 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
30727         * typemanager.cs (ImplementsInterface): interface might be null;
30728         Deal with this problem;
30730         Also, we do store negative hits on the cache (null values), so use
30731         this instead of calling t.GetInterfaces on the type everytime.
30733 2001-10-28  Ravi Pratap  <ravi@ximian.com>
30735         * typemanager.cs (IsBuiltinType): New method to help determine the same.
30737         * expression.cs (New::DoResolve): Get rid of array creation code and instead
30738         split functionality out into different classes.
30740         (New::FormArrayType): Move into NewBuiltinArray.
30742         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
30743         quite useless.
30745         (NewBuiltinArray): New class to handle creation of built-in arrays.
30747         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
30748         account creation of one-dimensional arrays.
30750         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
30752         (NewUserdefinedArray::DoResolve): Implement.
30754         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
30756         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
30757         we maintain inside the TypeManager. This is necessary to perform lookups on the
30758         module builder.
30760         (LookupType): Update to perform GetType on the module builders too.     
30762         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
30764         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
30766 2001-10-23  Ravi Pratap  <ravi@ximian.com>
30768         * expression.cs (New::DoResolve): Implement guts of array creation.
30770         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
30772 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
30774         * expression.cs: Fix bug I introduced lsat night that broke
30775         Delegates. 
30777         (Expression.Resolve): Report a 246 error (can not resolve name)
30778         if we find a SimpleName in the stream.
30780         (Expression.ResolveLValue): Ditto.
30782         (Expression.ResolveWithSimpleName): This function is a variant of
30783         ResolveName, this one allows SimpleNames to be returned without a
30784         warning.  The only consumer of SimpleNames is MemberAccess
30786 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
30788         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
30789         might arrive here.  I have my doubts that this is correct.
30791         * statement.cs (Lock): Implement lock statement.
30793         * cs-parser.jay: Small fixes to support `lock' and `using'
30795         * cs-tokenizer.cs: Remove extra space
30797         * driver.cs: New flag --checked, allows to turn on integer math
30798         checking. 
30800         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
30801         Threading.Monitor.Exit 
30803 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
30805         * expression.cs (IndexerAccess::DoResolveLValue): Set the
30806         Expression Class to be IndexerAccess.
30808         Notice that Indexer::DoResolve sets the eclass to Value.
30810 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
30812         * class.cs (TypeContainer::Emit): Emit code for indexers.
30814         * assign.cs (IAssignMethod): New interface implemented by Indexers
30815         and Properties for handling assignment.
30817         (Assign::Emit): Simplify and reuse code. 
30819         * expression.cs (IndexerAccess, PropertyExpr): Implement
30820         IAssignMethod, clean up old code. 
30822 2001-10-22  Ravi Pratap  <ravi@ximian.com>
30824         * typemanager.cs (ImplementsInterface): New method to determine if a type
30825         implements a given interface. Provides a nice cache too.
30827         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
30828         method.
30830         (ConvertReferenceExplicit): Ditto.
30832         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
30833         various methods, with correct names etc.
30835         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
30836         Operator.UnaryNegation.
30838         * cs-parser.jay (operator_declarator): Be a little clever in the case where
30839         we have a unary plus or minus operator.
30841         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
30842         UnaryMinus.
30844         * everywhere : update accordingly.
30846         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
30847         respectively.
30849         * class.cs (Method::Define): For the case where we are implementing a method
30850         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
30851         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
30853 2001-10-21  Ravi Pratap  <ravi@ximian.com>
30855         * interface.cs (FindMembers): Implement to work around S.R.E
30856         lameness.
30858         * typemanager.cs (IsInterfaceType): Implement.
30860         (FindMembers): Update to handle interface types too.
30862         * expression.cs (ImplicitReferenceConversion): Re-write bits which
30863         use IsAssignableFrom as that is not correct - it doesn't work.
30865         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
30866         and accordingly override EmitStatement.
30868         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
30869         using the correct logic :-)
30871 2001-10-19  Ravi Pratap  <ravi@ximian.com>
30873         * ../errors/cs-11.cs : Add to demonstrate error -11 
30875 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
30877         * assign.cs (Assign::Resolve): Resolve right hand side first, and
30878         then pass this as a hint to ResolveLValue.
30880         * expression.cs (FieldExpr): Add Location information
30882         (FieldExpr::LValueResolve): Report assignment to readonly
30883         variable. 
30885         (Expression::ExprClassFromMemberInfo): Pass location information.
30887         (Expression::ResolveLValue): Add new method that resolves an
30888         LValue. 
30890         (Expression::DoResolveLValue): Default invocation calls
30891         DoResolve. 
30893         (Indexers): New class used to keep track of indexers in a given
30894         Type. 
30896         (IStackStore): Renamed from LValue, as it did not really describe
30897         what this did.  Also ResolveLValue is gone from this interface and
30898         now is part of Expression.
30900         (ElementAccess): Depending on the element access type
30902         * typemanager.cs: Add `indexer_name_type' as a Core type
30903         (System.Runtime.CompilerServices.IndexerNameAttribute)
30905         * statement.cs (Goto): Take a location.
30907 2001-10-18  Ravi Pratap  <ravi@ximian.com>
30909         * delegate.cs (Delegate::VerifyDelegate): New method to verify
30910         if two delegates are compatible.
30912         (NewDelegate::DoResolve): Update to take care of the case when
30913         we instantiate a delegate from another delegate.
30915         * typemanager.cs (FindMembers): Don't even try to look up members
30916         of Delegate types for now.
30918 2001-10-18  Ravi Pratap  <ravi@ximian.com>
30920         * delegate.cs (NewDelegate): New class to take care of delegate
30921         instantiation.
30923         * expression.cs (New): Split the delegate related code out into 
30924         the NewDelegate class.
30926         * delegate.cs (DelegateInvocation): New class to handle delegate 
30927         invocation.
30929         * expression.cs (Invocation): Split out delegate related code into
30930         the DelegateInvocation class.
30932 2001-10-17  Ravi Pratap  <ravi@ximian.com>
30934         * expression.cs (New::DoResolve): Implement delegate creation fully
30935         and according to the spec.
30937         (New::DoEmit): Update to handle delegates differently.
30939         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
30940         because of which we were printing out arguments in reverse order !
30942         * delegate.cs (VerifyMethod): Implement to check if the given method
30943         matches the delegate.
30945         (FullDelegateDesc): Implement.
30947         (VerifyApplicability): Implement.
30949         * expression.cs (Invocation::DoResolve): Update to accordingly handle
30950         delegate invocations too.
30952         (Invocation::Emit): Ditto.
30954         * ../errors/cs1593.cs : Added.
30956         * ../errors/cs1594.cs : Added.
30958         * delegate.cs (InstanceExpression, TargetMethod): New properties.
30960 2001-10-16  Ravi Pratap  <ravi@ximian.com>
30962         * typemanager.cs (intptr_type): Core type for System.IntPtr
30964         (InitCoreTypes): Update for the same.
30966         (iasyncresult_type, asynccallback_type): Ditto.
30968         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
30969         correct.
30971         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
30972         too.
30974         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
30975         the builders for the 4 members of a delegate type :-)
30977         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
30978         type.
30980         * expression.cs (New::DoResolve): Implement guts for delegate creation.
30982         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
30984 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
30986         * statement.cs (Break::Emit): Implement.   
30987         (Continue::Emit): Implement.
30989         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30990         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30991         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30992         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
30993         end loop
30995         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
30996         properties that track the label for the current loop (begin of the
30997         loop and end of the loop).
30999 2001-10-15  Ravi Pratap  <ravi@ximian.com>
31001         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
31002         use of emitting anything at all.
31004         * class.cs, rootcontext.cs : Get rid of calls to the same.
31006         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
31008         (Populate): Define the constructor correctly and set the implementation
31009         attributes.
31011         * typemanager.cs (delegate_types): New hashtable to hold delegates that
31012         have been defined.
31014         (AddDelegateType): Implement.
31016         (IsDelegateType): Implement helper method.
31018         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
31020         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
31021         and accordingly handle it.
31023         * delegate.cs (Populate): Take TypeContainer argument.
31024         Implement bits to define the Invoke method. However, I still haven't figured out
31025         how to take care of the native int bit :-(
31027         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
31028         Qualify the name of the delegate, not its return type !
31030         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
31031         conversion.
31033         (StandardConversionExists): Checking for array types turns out to be recursive.
31035         (ConvertReferenceExplicit): Implement array conversion.
31037         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
31039 2001-10-12  Ravi Pratap  <ravi@ximian.com>
31041         * cs-parser.jay (delegate_declaration): Store the fully qualified
31042         name as it is a type declaration.
31044         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
31045         readonly.
31047         (DefineDelegate): Renamed from Define. Does the same thing essentially,
31048         as TypeContainer::DefineType.
31050         (Populate): Method in which all the definition of the various methods (Invoke)
31051         etc is done.
31053         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
31054         see.
31056         (CloseDelegate): Finally creates the delegate.
31058         * class.cs (TypeContainer::DefineType): Update to define delegates.
31059         (Populate, Emit and CloseType): Do the same thing here too.
31061         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
31062         delegates in all these operations.
31064 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
31066         * expression.cs: LocalTemporary: a new expression used to
31067         reference a temporary that has been created.
31069         * assign.cs: Handle PropertyAccess back here, so that we can
31070         provide the proper semantic access to properties.
31072         * expression.cs (Expression::ConvertReferenceExplicit): Implement
31073         a few more explicit conversions. 
31075         * modifiers.cs: `NEW' modifier maps to HideBySig.
31077         * expression.cs (PropertyExpr): Make this into an
31078         ExpressionStatement, and support the EmitStatement code path. 
31080         Perform get/set error checking, clean up the interface.
31082         * assign.cs: recognize PropertyExprs as targets, and if so, turn
31083         them into toplevel access objects.
31085 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
31087         * expression.cs: PropertyExpr::PropertyExpr: use work around the
31088         SRE.
31090         * typemanager.cs: Keep track here of our PropertyBuilders again to
31091         work around lameness in SRE.
31093 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
31095         * expression.cs (LValue::LValueResolve): New method in the
31096         interface, used to perform a second resolution pass for LValues. 
31098         (This::DoResolve): Catch the use of this in static methods.
31100         (This::LValueResolve): Implement.
31102         (This::Store): Remove warning, assigning to `this' in structures
31103         is 
31105         (Invocation::Emit): Deal with invocation of
31106         methods on value types.  We need to pass the address to structure
31107         methods rather than the object itself.  (The equivalent code to
31108         emit "this" for structures leaves the entire structure on the
31109         stack instead of a pointer to it). 
31111         (ParameterReference::DoResolve): Compute the real index for the
31112         argument based on whether the method takes or not a `this' pointer
31113         (ie, the method is static).
31115         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
31116         value types returned from functions when we need to invoke a
31117         method on the sturcture.
31120 2001-10-11  Ravi Pratap  <ravi@ximian.com>
31122         * class.cs (TypeContainer::DefineType): Method to actually do the business of
31123         defining the type in the Modulebuilder or Typebuilder. This is to take
31124         care of nested types which need to be defined on the TypeBuilder using
31125         DefineNestedMethod.
31127         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
31128         methods in RootContext, only ported to be part of TypeContainer.
31130         (TypeContainer::GetInterfaceOrClass): Ditto.
31132         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
31134         * interface.cs (Interface::DefineInterface): New method. Does exactly
31135         what RootContext.CreateInterface did earlier, only it takes care of nested types 
31136         too.
31138         (Interface::GetInterfaces): Move from RootContext here and port.
31140         (Interface::GetInterfaceByName): Same here.
31142         * rootcontext.cs (ResolveTree): Re-write.
31144         (PopulateTypes): Re-write.
31146         * class.cs (TypeContainer::Populate): Populate nested types too.
31147         (TypeContainer::Emit): Emit nested members too.
31149         * typemanager.cs (AddUserType): Do not make use of the FullName property,
31150         instead just use the name argument passed in as it is already fully
31151         qualified.
31153         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
31154         to TypeContainer mapping to see if a type is user-defined.
31156         * class.cs (TypeContainer::CloseType): Implement. 
31158         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
31159         the default constructor.
31161         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
31162         twice.
31164         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
31166         * interface.cs (CloseType): Create the type here.
31168         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
31169         the hierarchy.
31171         Remove all the methods which are now in TypeContainer.
31173 2001-10-10  Ravi Pratap  <ravi@ximian.com>
31175         * delegate.cs (Define): Re-write bits to define the delegate
31176         correctly.
31178 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
31180         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
31182         * expression.cs (ImplicitReferenceConversion): handle null as well
31183         as a source to convert to any reference type.
31185         * statement.cs (Return): Perform any implicit conversions to
31186         expected return type.  
31188         Validate use of return statement.  
31190         * codegen.cs (EmitContext): Pass the expected return type here.
31192         * class.cs (Method, Constructor, Property): Pass expected return
31193         type to EmitContext.
31195 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
31197         * expression.cs: Make DoResolve take an EmitContext instead of a
31198         TypeContainer.
31200         Replaced `l' and `location' for `loc', for consistency.
31202         (Error, Warning): Remove unneeded Tc argument.
31204         * assign.cs, literal.cs, constant.cs: Update to new calling
31205         convention. 
31207         * codegen.cs: EmitContext now contains a flag indicating whether
31208         code is being generated in a static method or not.
31210         * cs-parser.jay: DecomposeQI, new function that replaces the old
31211         QualifiedIdentifier.  Now we always decompose the assembled
31212         strings from qualified_identifier productions into a group of
31213         memberaccesses.
31215 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
31217         * rootcontext.cs: Deal with field-less struct types correctly now
31218         by passing the size option to Define Type.
31220         * class.cs: Removed hack that created one static field. 
31222 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
31224         * statement.cs: Moved most of the code generation here. 
31226 2001-10-09  Ravi Pratap  <ravi@ximian.com>
31228         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
31229         seem very right.
31231         (ElementAccess): Remove useless bits for now - keep checks as the spec
31232         says.
31234 2001-10-08  Ravi Pratap  <ravi@ximian.com>
31236         * expression.cs (ElementAccess::DoResolve): Remove my crap code
31237         and start performing checks according to the spec.
31239 2001-10-07  Ravi Pratap  <ravi@ximian.com>
31241         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
31242         rank_specifiers instead.
31244         (rank_specifiers): Change the order in which the rank specifiers are stored
31246         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
31248         * expression.cs (ElementAccess): Implement the LValue interface too.
31250 2001-10-06  Ravi Pratap  <ravi@ximian.com>
31252         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
31253         except that user defined conversions are not included.
31255         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
31256         perform the conversion of the return type, if necessary.
31258         (New::DoResolve): Check whether we are creating an array or an object
31259         and accordingly do the needful.
31261         (New::Emit): Same here.
31263         (New::DoResolve): Implement guts of array creation.
31265         (New::FormLookupType): Helper function.
31267 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
31269         * codegen.cs: Removed most of the code generation here, and move the
31270         corresponding code generation bits to the statement classes. 
31272         Added support for try/catch/finalize and throw.
31274         * cs-parser.jay: Added support for try/catch/finalize.
31276         * class.cs: Catch static methods having the flags override,
31277         virtual or abstract.
31279         * expression.cs (UserCast): This user cast was not really doing
31280         what it was supposed to do.  Which is to be born in fully resolved
31281         state.  Parts of the resolution were being performed at Emit time! 
31283         Fixed this code.
31285 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
31287         * expression.cs: Implicity convert the result from UserCast.
31289 2001-10-05  Ravi Pratap  <ravi@ximian.com>
31291         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
31292         prevented it from working correctly. 
31294         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
31295         merely ConvertImplicit.
31297 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
31299         * typemanager.cs: Make the LookupTypeContainer function static,
31300         and not per-instance.  
31302         * class.cs: Make static FindMembers (the one that takes a Type
31303         argument). 
31305         * codegen.cs: Add EmitForeach here.
31307         * cs-parser.jay: Make foreach a toplevel object instead of the
31308         inline expansion, as we need to perform semantic analysis on it. 
31310 2001-10-05  Ravi Pratap  <ravi@ximian.com>
31312         * expression.cs (Expression::ImplicitUserConversion): Rename to
31313         UserDefinedConversion.
31315         (Expression::UserDefinedConversion): Take an extra argument specifying 
31316         whether we look for explicit user conversions too.
31318         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
31320         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
31322         (ExplicitUserConversion): Make it a call to UserDefinedConversion
31323         with the appropriate arguments.
31325         * cs-parser.jay (cast_expression): Record location too.
31327         * expression.cs (Cast): Record location info.
31329         (Expression::ConvertExplicit): Take location argument.
31331         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
31332         to determine if we are doing explicit conversions.
31334         (UserCast::Emit): Update accordingly.
31336         (Expression::ConvertExplicit): Report an error if everything fails.
31338         * ../errors/cs0030.cs : Add.
31340 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
31342         * modifiers.cs: If the ABSTRACT keyword is present, also set the
31343         virtual and newslot bits. 
31345         * class.cs (TypeContainer::RegisterRequiredImplementations):
31346         Record methods we need.
31348         (TypeContainer::MakeKey): Helper function to make keys for
31349         MethodBases, since the Methodbase key is useless.
31351         (TypeContainer::Populate): Call RegisterRequiredImplementations
31352         before defining the methods.   
31354         Create a mapping for method_builders_to_methods ahead of time
31355         instead of inside a tight loop.
31357         (::RequireMethods):  Accept an object as the data to set into the
31358         hashtable so we can report interface vs abstract method mismatch.
31360 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
31362         * report.cs: Make all of it static.
31364         * rootcontext.cs: Drop object_type and value_type computations, as
31365         we have those in the TypeManager anyways.
31367         Drop report instance variable too, now it is a global.
31369         * driver.cs: Use try/catch on command line handling.
31371         Add --probe option to debug the error reporting system with a test
31372         suite. 
31374         * report.cs: Add support for exiting program when a probe
31375         condition is reached.
31377 2001-10-03  Ravi Pratap  <ravi@ximian.com>
31379         * expression.cs (Binary::DoNumericPromotions): Fix the case when
31380         we do a forcible conversion regardless of type, to check if 
31381         ForceConversion returns a null.
31383         (Binary::error19): Use location to report error.
31385         (Unary::error23): Use location here too.
31387         * ../errors/cs0019.cs : Check in.
31389         * ../errors/cs0023.cs : Check in.
31391         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
31392         case of a non-null MethodInfo object with a length of 0 !
31394         (Binary::ResolveOperator): Flag error if overload resolution fails to find
31395         an applicable member - according to the spec :-)
31396         Also fix logic to find members in base types.
31398         (Unary::ResolveOperator): Same here.
31400         (Unary::report23): Change name to error23 and make first argument a TypeContainer
31401         as I was getting thoroughly confused between this and error19 :-)
31403         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
31404         (::FindMostEncompassedType): Implement.
31405         (::FindMostEncompassingType): Implement.
31406         (::StandardConversionExists): Implement.
31408         (UserImplicitCast): Re-vamp. We now need info about most specific
31409         source and target types so that we can do the necessary conversions.
31411         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
31412         mathematical union with no duplicates.
31414 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
31416         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
31417         in order from base classes to child classes, so that we can in
31418         child classes look up in our parent for method names and
31419         attributes (required for handling abstract, virtual, new, override
31420         constructs: we need to instrospect our base class, and if we dont
31421         populate the classes in order, the introspection might be
31422         incorrect.  For example, a method could query its parent before
31423         the parent has any methods and would determine that the parent has
31424         no abstract methods (while it could have had them)).
31426         (RootContext::CreateType): Record the order in which we define the
31427         classes.
31429 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
31431         * class.cs (TypeContainer::Populate): Also method definitions can
31432         fail now, keep track of this.
31434         (TypeContainer::FindMembers): Implement support for
31435         DeclaredOnly/noDeclaredOnly flag.
31437         (Constructor::Emit) Return the ConstructorBuilder.
31439         (Method::Emit) Return the MethodBuilder. 
31440         Check for abstract or virtual methods to be public.
31442         * rootcontext.cs (RootContext::CreateType): Register all the
31443         abstract methods required for the class to be complete and the
31444         interface methods that must be implemented. 
31446         * cs-parser.jay: Report error 501 (method requires body if it is
31447         not marked abstract or extern).
31449         * expression.cs (TypeOf::Emit): Implement.
31451         * typemanager.cs: runtime_handle_type, new global type.
31453         * class.cs (Property::Emit): Generate code for properties.
31455 2001-10-02  Ravi Pratap  <ravi@ximian.com>
31457         * expression.cs (Unary::ResolveOperator): Find operators on base type
31458         too - we now conform exactly to the spec.
31460         (Binary::ResolveOperator): Same here.
31462         * class.cs (Operator::Define): Fix minor quirk in the tests.
31464         * ../errors/cs0215.cs : Added.
31466         * ../errors/cs0556.cs : Added.
31468         * ../errors/cs0555.cs : Added.
31470 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
31472         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
31473         single integer which is really efficient
31475 2001-10-01  Ravi Pratap  <ravi@ximian.com>
31477         *  expression.cs (Expression::ImplicitUserConversion): Use location
31478         even in the case when we are examining True operators.
31480         * class.cs (Operator::Define): Perform extensive checks to conform
31481         with the rules for operator overloading in the spec.
31483         * expression.cs (Expression::ImplicitReferenceConversion): Implement
31484         some of the other conversions mentioned in the spec.
31486         * typemanager.cs (array_type): New static member for the System.Array built-in
31487         type.
31489         (cloneable_interface): For System.ICloneable interface.
31491         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
31492         we start resolving the tree and populating types.
31494         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
31496 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
31498         * expression.cs (Expression::ExprClassFromMemberInfo,
31499         Expression::Literalize): Create literal expressions from
31500         FieldInfos which are literals.
31502         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
31503         type casts, because they were wrong.  The test suite in tests
31504         caught these ones.
31506         (ImplicitNumericConversion): ushort to ulong requires a widening
31507         cast. 
31509         Int32 constant to long requires widening cast as well.
31511         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
31512         for integers because the type on the stack is not i4.
31514 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
31516         * expression.cs (report118): require location argument. 
31518         * parameter.cs: Do not dereference potential null value.
31520         * class.cs: Catch methods that lack the `new' keyword when
31521         overriding a name.  Report warnings when `new' is used without
31522         anything being there to override.
31524         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
31526         * class.cs: Only add constructor to hashtable if it is non-null
31527         (as now constructors can fail on define).
31529         (TypeManager, Class, Struct): Take location arguments.
31531         Catch field instance initialization in structs as errors.
31533         accepting_filter: a new filter for FindMembers that is static so
31534         that we dont create an instance per invocation.
31536         (Constructor::Define): Catch errors where a struct constructor is
31537         parameterless 
31539         * cs-parser.jay: Pass location information for various new
31540         constructs. 
31542         * delegate.cs (Delegate): take a location argument.
31544         * driver.cs: Do not call EmitCode if there were problesm in the
31545         Definition of the types, as many Builders wont be there. 
31547         * decl.cs (Decl::Decl): Require a location argument.
31549         * cs-tokenizer.cs: Handle properly hex constants that can not fit
31550         into integers, and find the most appropiate integer for it.
31552         * literal.cs: Implement ULongLiteral.
31554         * rootcontext.cs: Provide better information about the location of
31555         failure when CreateType fails.
31557 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
31559         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
31560         as well.
31562         * expression.cs (Binary::CheckShiftArguments): Add missing type
31563         computation.
31564         (Binary::ResolveOperator): Add type to the logical and and logical
31565         or, Bitwise And/Or and Exclusive Or code paths, it was missing
31566         before.
31568         (Binary::DoNumericPromotions): In the case where either argument
31569         is ulong (and most signed types combined with ulong cause an
31570         error) perform implicit integer constant conversions as well.
31572 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
31574         * expression.cs (UserImplicitCast): Method should always be
31575         non-null. 
31576         (Invocation::BetterConversion): Simplified test for IntLiteral.
31578         (Expression::ImplicitNumericConversion): Split this routine out.
31579         Put the code that performs implicit constant integer conversions
31580         here. 
31582         (Expression::Resolve): Become a wrapper around DoResolve so we can
31583         check eclass and type being set after resolve.
31585         (Invocation::Badness): Remove this dead function
31587         (Binary::ResolveOperator): Do not compute the expensive argumnets
31588         unless we have a union for it.
31590         (Probe::Emit): Is needs to do an isinst and then
31591         compare against null.
31593         (::CanConvert): Added Location argument.  If the Location argument
31594         is null (Location.Null), then we do not report errors.  This is
31595         used by the `probe' mechanism of the Explicit conversion.  We do
31596         not want to generate an error for something that the user
31597         explicitly requested to be casted.  But the pipeline for an
31598         explicit cast first tests for potential implicit casts.
31600         So for now, if the Location is null, it means `Probe only' to
31601         avoid adding another argument.   Might have to revise this
31602         strategy later.
31604         (ClassCast): New class used to type cast objects into arbitrary
31605         classes (used in Explicit Reference Conversions).
31607         Implement `as' as well.
31609         Reverted all the patches from Ravi below: they were broken:
31611                 * The use of `level' as a mechanism to stop recursive
31612                   invocations is wrong.  That was there just to catch the
31613                   bug with a strack trace but not as a way of addressing
31614                   the problem.
31616                   To fix the problem we have to *understand* what is going
31617                   on and the interactions and come up with a plan, not
31618                   just get things going.
31620                 * The use of the type conversion cache that I proposed
31621                   last night had an open topic: How does this work across
31622                   protection domains.  A user defined conversion might not
31623                   be public in the location where we are applying the
31624                   conversion, a different conversion might be selected
31625                   (ie, private A->B (better) but public B->A (worse),
31626                   inside A, A->B applies, but outside it, B->A will
31627                   apply).
31629                 * On top of that (ie, even if the above is solved),
31630                   conversions in a cache need to be abstract.  Ie, `To
31631                   convert from an Int to a Short use an OpcodeCast', not
31632                   `To convert from an Int to a Short use the OpcodeCast on
31633                   the variable 5' (which is what this patch was doing).
31635 2001-09-28  Ravi Pratap  <ravi@ximian.com>
31637         * expression.cs (Invocation::ConversionExists): Re-write to use
31638         the conversion cache
31640         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
31641         cache all conversions done, not just user-defined ones.
31643         (Invocation::BetterConversion): The real culprit. Use ConversionExists
31644         to determine if a conversion exists instead of acutually trying to 
31645         perform the conversion. It's faster too.
31647         (Expression::ConvertExplicit): Modify to use ConversionExists to check
31648         and only then attempt the implicit conversion.
31650 2001-09-28  Ravi Pratap  <ravi@ximian.com>
31652         * expression.cs (ConvertImplicit): Use a cache for conversions
31653         already found. Check level of recursion and bail out if necessary.
31655 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
31657         * typemanager.cs (string_concat_string_string, string_concat_object_object):
31658         Export standard methods that we expect for string operations.
31660         * statement.cs (Block::UsageWarning): Track usage of variables and
31661         report the errors for not used variables.
31663         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
31664         operator. 
31666 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
31668         * codegen.cs: remove unnneded code 
31670         * expression.cs: Removed BuiltinTypeAccess class
31672         Fix the order in which implicit conversions are
31673         done.  
31675         The previous fixed dropped support for boxed conversions (adding a
31676         test to the test suite now)
31678         (UserImplicitCast::CanConvert): Remove test for source being null,
31679         that code is broken.  We should not feed a null to begin with, if
31680         we do, then we should track the bug where the problem originates
31681         and not try to cover it up here.
31683         Return a resolved expression of type UserImplicitCast on success
31684         rather than true/false.  Ravi: this is what I was talking about,
31685         the pattern is to use a static method as a "constructor" for
31686         objects. 
31688         Also, do not create arguments until the very last minute,
31689         otherwise we always create the arguments even for lookups that
31690         will never be performed. 
31692         (UserImplicitCast::Resolve): Eliminate, objects of type
31693         UserImplicitCast are born in a fully resolved state. 
31695         * typemanager.cs (InitCoreTypes): Init also value_type
31696         (System.ValueType). 
31698         * expression.cs (Cast::Resolve): First resolve the child expression.
31700         (LValue): Add new method AddressOf to be used by
31701         the `&' operator.  
31703         Change the argument of Store to take an EmitContext instead of an
31704         ILGenerator, because things like FieldExpr need to be able to call
31705         their children expression to generate the instance code. 
31707         (Expression::Error, Expression::Warning): Sugar functions for
31708         reporting errors.
31710         (Expression::MemberLookup): Accept a TypeContainer instead of a
31711         Report as the first argument.
31713         (Expression::ResolvePrimary): Killed.  I still want to improve
31714         this as currently the code is just not right.
31716         (Expression::ResolveMemberAccess): Simplify, but it is still
31717         wrong. 
31719         (Unary::Resolve): Catch errors in AddressOf operators.
31721         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
31722         index to a byte for the short-version, or the compiler will choose
31723         the wrong Emit call, which generates the wrong data.
31725         (ParameterReference::Emit, ::Store): same.
31727         (FieldExpr::AddressOf): Implement.
31729         * typemanager.cs: TypeManager: made public variable instead of
31730         property.
31732         * driver.cs: document --fatal.
31734         * report.cs (ErrorMessage, WarningMessage): new names for the old
31735         Error and Warning classes.
31737         * cs-parser.jay (member_access): Turn built-in access to types
31738         into a normal simplename
31740 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31742         * expression.cs (Invocation::BetterConversion): Fix to cope
31743         with q being null, since this was introducing a bug.
31745         * expression.cs (ConvertImplicit): Do built-in conversions first.
31747 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31749         * expression.cs (UserImplicitCast::Resolve): Fix bug.
31751 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31753         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
31754         I had introduced long ago (what's new ?).
31756         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
31757         the work of all the checking. 
31758         (ConvertImplicit): Call CanConvert and only then create object if necessary.
31759         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
31761         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
31762         that is the right way. 
31764         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
31765         overloading resolution. Use everywhere instead of cutting and pasting code.
31767         (Binary::ResolveOperator): Use MakeUnionSet.
31769         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
31770         we have to convert to bool types. Not complete yet.
31772 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
31774         * typemanager.cs (TypeManager::CSharpName): support ushort.
31776         * expression.cs (Expression::TryImplicitIntConversion): Attempts
31777         to provide an expression that performsn an implicit constant int
31778         conversion (section 6.1.6).
31779         (Expression::ConvertImplicitRequired): Reworked to include
31780         implicit constant expression conversions.
31782         (Expression::ConvertNumericExplicit): Finished.
31784         (Invocation::Emit): If InstanceExpression is null, then it means
31785         that we perform a call on this.
31787 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
31789         * expression.cs (Unary::Emit): Remove some dead code.
31790         (Probe): Implement Resolve and Emit for `is'.
31791         (Expression::ConvertImplicitRequired): Attempt to do constant
31792         expression conversions here.  Maybe should be moved to
31793         ConvertImplicit, but I am not sure.
31794         (Expression::ImplicitLongConstantConversionPossible,
31795         Expression::ImplicitIntConstantConversionPossible): New functions
31796         that tell whether is it possible to apply an implicit constant
31797         expression conversion.
31799         (ConvertNumericExplicit): Started work on explicit numeric
31800         conversions.
31802         * cs-parser.jay: Update operator constants.
31804         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
31805         (Parameters::GetSignature): Hook up VerifyArgs here.
31806         (Parameters::VerifyArgs): Verifies that no two arguments have the
31807         same name. 
31809         * class.cs (Operator): Update the operator names to reflect the
31810         ones that the spec expects (as we are just stringizing the
31811         operator names).
31813         * expression.cs (Unary::ResolveOperator): Fix bug: Use
31814         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
31815         previous usage did only work for our methods.
31816         (Expression::ConvertImplicit): Handle decimal implicit numeric
31817         conversions as well.
31818         (Expression::InternalTypeConstructor): Used to invoke constructors
31819         on internal types for default promotions.
31821         (Unary::Emit): Implement special handling for the pre/post
31822         increment/decrement for overloaded operators, as they need to have
31823         the same semantics as the other operators.
31825         (Binary::ResolveOperator): ditto.
31826         (Invocation::ConversionExists): ditto.
31827         (UserImplicitCast::Resolve): ditto.
31829 2001-09-26  Ravi Pratap  <ravi@ximian.com>
31831         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
31832         operator, return after emitting body. Regression tests pass again !
31834         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
31835         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
31836         (Invocation::OverloadResolve): Ditto.
31837         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
31839         * everywhere : update calls to the above methods accordingly.
31841 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
31843         * assign.cs (Assign): Make it inherit from ExpressionStatement.
31845         * expression.cs (ExpressionStatement): New base class used for
31846         expressions that can appear in statements, so that we can provide
31847         an alternate path to generate expression that do not leave a value
31848         on the stack.
31850         (Expression::Emit, and all the derivatives): We no longer return
31851         whether a value is left on the stack or not.  Every expression
31852         after being emitted leaves a single value on the stack.
31854         * codegen.cs (EmitContext::EmitStatementExpression): Use the
31855         facilties of ExpressionStatement if possible.
31857         * cs-parser.jay: Update statement_expression.
31859 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
31861         * driver.cs: Change the wording of message
31863 2001-09-25  Ravi Pratap  <ravi@ximian.com>
31865         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
31866         the type of the expression to the return type of the method if
31867         we have an overloaded operator match ! The regression tests pass again !
31868         (Unary::ResolveOperator): Ditto.
31870         * expression.cs (Invocation::ConversionExists): Correct the member lookup
31871         to find "op_Implicit", not "implicit" ;-)
31872         (UserImplicitCast): New class to take care of user-defined implicit conversions.
31873         (ConvertImplicit, ForceConversion): Take TypeContainer argument
31875         * everywhere : Correct calls to the above accordingly.
31877         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
31878         (ConvertImplicit): Do user-defined conversion if it exists.
31880 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
31882         * assign.cs: track location.
31883         (Resolve): Use implicit conversions on assignment.
31885         * literal.cs: Oops.  Not good, Emit of short access values should
31886         pass (Bytes) or the wrong argument will be selected.
31888         * expression.cs (Unary::Emit): Emit code for -expr.
31890         (Unary::ResolveOperator): Handle `Substract' for non-constants
31891         (substract from zero from the non-constants).
31892         Deal with Doubles as well. 
31894         (Expression::ConvertImplicitRequired): New routine that reports an
31895         error if no implicit conversion exists. 
31897         (Invocation::OverloadResolve): Store the converted implicit
31898         expressions if we make them
31900 2001-09-24  Ravi Pratap  <ravi@ximian.com>
31902         * class.cs (ConstructorInitializer): Take a Location argument.
31903         (ConstructorBaseInitializer): Same here.
31904         (ConstructorThisInitializer): Same here.
31906         * cs-parser.jay : Update all calls accordingly.
31908         * expression.cs (Unary, Binary, New): Take location argument.
31909         Update accordingly everywhere.
31911         * cs-parser.jay : Update all calls to the above to take a location
31912         argument.
31914         * class.cs : Ditto.
31916 2001-09-24  Ravi Pratap  <ravi@ximian.com>
31918         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
31919         (Invocation::BetterConversion): Same here
31920         (Invocation::ConversionExists): Ditto.
31922         (Invocation::ConversionExists): Implement.
31924 2001-09-22  Ravi Pratap  <ravi@ximian.com>
31926         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
31927         Also take an additional TypeContainer argument.
31929         * All over : Pass in TypeContainer as argument to OverloadResolve.
31931         * typemanager.cs (CSharpName): Update to check for the string type and return
31932         that too.
31934         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
31935         a given method.
31937 2001-09-21  Ravi Pratap  <ravi@ximian.com>
31939         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
31940         (Invocation::BetterFunction): Implement.
31941         (Invocation::BetterConversion): Implement.
31942         (Invocation::ConversionExists): Skeleton, no implementation yet.
31944         Okay, things work fine !
31946 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
31948         * typemanager.cs: declare and load enum_type, delegate_type and
31949         void_type. 
31951         * expression.cs (Expression::Emit): Now emit returns a value that
31952         tells whether a value is left on the stack or not.  This strategy
31953         might be reveted tomorrow with a mechanism that would address
31954         multiple assignments.
31955         (Expression::report118): Utility routine to report mismatches on
31956         the ExprClass.
31958         (Unary::Report23): Report impossible type/operator combination
31959         utility function.
31961         (Unary::IsIncrementableNumber): Whether the type can be
31962         incremented or decremented with add.
31963         (Unary::ResolveOperator): Also allow enumerations to be bitwise
31964         complemented. 
31965         (Unary::ResolveOperator): Implement ++, !, ~,
31967         (Invocation::Emit): Deal with new Emit convetion.
31969         * All Expression derivatives: Updated their Emit method to return
31970         whether they leave values on the stack or not.
31972         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
31973         stack for expressions that are statements. 
31975 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
31977         * expression.cs (LValue): New interface.  Must be implemented by
31978         LValue objects.
31979         (LocalVariableReference, ParameterReference, FieldExpr): Implement
31980         LValue interface.
31982         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
31983         interface for generating code, simplifies the code.
31985 2001-09-20  Ravi Pratap  <ravi@ximian.com>
31987         * expression.cs (everywhere): Comment out return statements in ::Resolve
31988         methods to avoid the warnings.
31990 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
31992         * driver.cs (parse): Report error 2001 if we can not open the
31993         source file.
31995         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
31996         not resolve it.
31998         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
31999         object. 
32001         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
32002         otherwise nested blocks end up with the same index.
32004         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
32006         * expression.cs:  Instead of having FIXMEs in the Resolve
32007         functions, throw exceptions so it is obvious that we are facing a
32008         bug. 
32010         * cs-parser.jay (invocation_expression): Pass Location information.
32012         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
32013         Use a basename for those routines because .NET does not like paths
32014         on them. 
32016         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
32017         already defined.
32019 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
32021         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
32022         are loading the correct data types (throws an exception if not).
32023         (TypeManager::InitCoreTypes): Use CoreLookupType
32025         * expression.cs (Unary::ResolveOperator): return the child
32026         expression for expressions which are just +expr.
32027         (Unary::ResolveOperator): Return negative literals for -LITERAL
32028         expressions (otherwise they are Unary {Literal}).
32029         (Invocation::Badness): Take into account `Implicit constant
32030         expression conversions'.
32032         * literal.cs (LongLiteral): Implement long literal class.
32033         (IntLiteral): export the `Value' of the intliteral. 
32035 2001-09-19  Ravi Pratap  <ravi@ximian.com>
32037         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
32039         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
32040         instead of 'Operator'
32042         * expression.cs (Binary::ResolveOperator): Update accordingly.
32043         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
32044         and 'Minus'
32046         * cs-parser.jay (unary_expression): Update to use the new names.
32048         * gen-treedump.cs (GetUnary): Same here.
32050         * expression.cs (Unary::Resolve): Implement.
32051         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
32052         operators are found instead of making noise ;-)
32053         (Unary::ResolveOperator): New method to do precisely the same thing which
32054         Binary::ResolveOperator does for Binary expressions.
32055         (Unary.method, .Arguments): Add.
32056         (Unary::OperName): Implement.   
32057         (Unary::ForceConversion): Copy and Paste !
32059         * class.cs (Operator::Define): Fix a small bug for the case when we have 
32060         a unary operator.
32062         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
32063         for the inbuilt operators. Only overloading works for now ;-)
32065 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
32067         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
32068         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
32070         * expression.cs (This::Emit): Implement. 
32071         (This::Resolve): Implement.
32072         (TypeOf:Resolve): Implement.
32073         (Expression::ResolveSimpleName): Add an implicit this to instance
32074         field references. 
32075         (MemberAccess::Resolve): Deal with Parameters and Fields. 
32076         Bind instance variable to Field expressions.
32077         (FieldExpr::Instance): New field used to track the expression that
32078         represents the object instance.
32079         (FieldExpr::Resolve): Track potential errors from MemberLookup not
32080         binding 
32081         (FieldExpr::Emit): Implement.
32083         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
32084         the last instruction contains a return opcode to avoid generating
32085         the last `ret' instruction (this generates correct code, and it is
32086         nice to pass the peverify output).
32088         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
32089         initializer for static and instance variables.
32090         (Constructor::Emit): Allow initializer to be null in the case of
32091         static constructors.  Only emit initializer for instance
32092         constructors. 
32094         (TypeContainer::FindMembers): Return a null array if there are no
32095         matches.
32097         Also fix the code for the MemberTypes.Method branch, as it was not
32098         scanning that for operators (or tried to access null variables before).
32100         * assign.cs (Assign::Emit): Handle instance and static fields. 
32102         * TODO: Updated.
32104         * driver.cs: Stop compilation if there are parse errors.
32106         * cs-parser.jay (constructor_declaration): Provide default base
32107         initializer for non-static constructors.
32108         (constructor_declarator): Do not provide a default base
32109         initializers if none was specified.
32110         Catch the fact that constructors should not have parameters.
32112         * class.cs: Do not emit parent class initializers for static
32113         constructors, that should be flagged as an error.
32115 2001-09-18  Ravi Pratap  <ravi@ximian.com>
32117         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
32118         Move back code into TypeContainer::Populate.
32120 2001-09-18  Ravi Pratap  <ravi@ximian.com>
32122         * class.cs (TypeContainer::AddConstructor): Fix the check to
32123         compare against Name, not Basename. 
32124         (Operator::OpType): Change Plus and Minus to Add and Subtract.
32126         * cs-parser.jay : Update accordingly.
32128         * class.cs (TypeContainer::FindMembers): For the case where we are searching
32129         for methods, don't forget to look into the operators too.
32130         (RegisterMethodBuilder): Helper method to take care of this for
32131         methods, constructors and operators.
32132         (Operator::Define): Completely revamp.
32133         (Operator.OperatorMethod, MethodName): New fields.
32134         (TypeContainer::Populate): Move the registering of builders into
32135         RegisterMethodBuilder.
32136         (Operator::Emit): Re-write.
32138         * expression.cs (Binary::Emit): Comment out code path to emit method
32139         invocation stuff for the case when we have a user defined operator. I am
32140         just not able to get it right !
32142 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
32144         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
32145         argument. 
32147         (Expression::MemberLookup): Provide a version that allows to
32148         specify the MemberTypes and BindingFlags. 
32150         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
32151         so it was not fetching variable information from outer blocks.
32153         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
32154         Beforefieldinit as it was buggy.
32156         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
32157         that Ravi put here.  
32159         * class.cs (Constructor::Emit): Only emit if block is not null.
32160         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
32161         deal with this by semantically definining it as if the user had
32162         done it.
32164         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
32165         constructors as we now "emit" them at a higher level.
32167         (TypeContainer::DefineDefaultConstructor): Used to define the
32168         default constructors if none was provided.
32170         (ConstructorInitializer): Add methods Resolve and Emit. 
32172         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
32174 2001-09-17  Ravi Pratap  <ravi@ximian.com>
32176         * class.cs (TypeContainer::EmitDefaultConstructor): Register
32177         the default constructor builder with our hashtable for methodbuilders
32178         to methodcores.
32180         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
32181         and argument_count is 0 in which case we have a match.
32182         (Binary::ResolveOperator): More null checking and miscellaneous coding
32183         style cleanup.
32185 2001-09-17  Ravi Pratap  <ravi@ximian.com>
32187         * rootcontext.cs (IsNameSpace): Compare against null.
32189         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
32191         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
32192         and Unary::Operator.
32194         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
32195         accordingly.
32197         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
32198         we have overloaded operators.
32199         (Binary::ResolveOperator): Implement the part which does the operator overload
32200         resolution.
32202         * class.cs (Operator::Emit): Implement.
32203         (TypeContainer::Emit): Emit the operators we have too.
32205         * expression.cs (Binary::Emit): Update to emit the appropriate code for
32206         the case when we have a user-defined operator.
32208 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
32210         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
32212 2001-09-16  Ravi Pratap  <ravi@ximian.com>
32214         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
32215         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
32216         (Constructor::Emit): Implement.
32217         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
32218         if we have no work to do. 
32219         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
32220         Emit method.
32222         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
32223         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
32225         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
32226         of parent.parent.
32228 2001-09-15  Ravi Pratap  <ravi@ximian.com>
32230         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
32231         in the source.
32232         (Tree::RecordNamespace): Method to do what the name says ;-)
32233         (Tree::Namespaces): Property to get at the namespaces hashtable.
32235         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
32236         keep track.
32238         * rootcontext.cs (IsNamespace): Fixed it :-)
32240 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
32242         * class.cs (TypeContainer::FindMembers): Add support for
32243         constructors. 
32244         (MethodCore): New class that encapsulates both the shared aspects
32245         of a Constructor and a Method.  
32246         (Method, Constructor): Factored pieces into MethodCore.
32248         * driver.cs: Added --fatal which makes errors throw exceptions.
32249         Load System assembly as well as part of the standard library.
32251         * report.cs: Allow throwing exceptions on errors for debugging.
32253         * modifiers.cs: Do not use `parent', instead use the real type
32254         container to evaluate permission settings.
32256         * class.cs: Put Ravi's patch back in.  He is right, and we will
32257         have to cope with the
32259 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32261         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
32262         FamORAssem, not FamANDAssem.
32264 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
32266         * driver.cs: Added --parse option that only parses its input files
32267         and terminates.
32269         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
32270         incorrect.  IsTopLevel is not used to tell whether an object is
32271         root_types or not (that can be achieved by testing this ==
32272         root_types).  But to see if this is a top-level *class* (not
32273         necessarly our "toplevel" container). 
32275 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32277         * enum.cs (Enum::Define): Modify to call the Lookup method on the
32278         parent instead of a direct call to GetType.
32280 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32282         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
32283         Modifiers.TypeAttr. This should just be a call to that method.
32285         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
32286         object so that we can determine if we are top-level or not.
32288         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
32289         TypeContainer too.
32291         * enum.cs (Enum::Define): Ditto.
32293         * modifiers.cs (FieldAttr): Re-write.
32295         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
32296         (TypeContainer::HaveStaticConstructor): New property to provide access
32297         to precisely that info.
32299         * modifiers.cs (MethodAttr): Re-write.
32300         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
32302         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
32303         of top-level types as claimed.
32305 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
32307         * expression.cs (MemberLookup): Fruitless attempt to lookup
32308         constructors.  Maybe I need to emit default constructors?  That
32309         might be it (currently .NET emits this for me automatically).
32310         (Invocation::OverloadResolve): Cope with Arguments == null.
32311         (Invocation::EmitArguments): new function, shared by the new
32312         constructor and us.
32313         (Invocation::Emit): Handle static and instance methods.  Emit
32314         proper call instruction for virtual or non-virtual invocations.
32315         (New::Emit): Implement.
32316         (New::Resolve): Implement.
32317         (MemberAccess:Resolve): Implement.
32318         (MethodGroupExpr::InstanceExpression): used conforming to the spec
32319         to track instances.
32320         (FieldExpr::Resolve): Set type.
32322         * support.cs: Handle empty arguments.
32323                 
32324         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
32325         SimpleLookup): Auxiliary routines to help parse a qualifier
32326         identifier.  
32328         Update qualifier_identifier rule.
32330         * codegen.cs: Removed debugging messages.
32332         * class.cs: Make this a global thing, this acts just as a "key" to
32333         objects that we might have around.
32335         (Populate): Only initialize method_builders_to_methods once.
32337         * expression.cs (PropertyExpr): Initialize type from the
32338         PropertyType. 
32340         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
32341         Resolve pattern.  Attempt to implicitly convert value to boolean.
32342         Emit code.
32344         * expression.cs: Set the type for the int32/int32 argument case.
32345         (Binary::ResolveOperator): Set the return type to boolean for
32346         comparission operators
32348         * typemanager.cs: Remove debugging print code.
32350         (Invocation::Resolve): resolve type.
32352         * class.cs: Allocate a MemberInfo of the correct size, as the code
32353         elsewhere depends on the test to reflect the correct contents.
32355         (Method::) Keep track of parameters, due to System.Reflection holes
32357         (TypeContainer::Populate): Keep track of MethodBuilders to Method
32358         mapping here.
32360         (TypeContainer::FindMembers): Use ArrayList and then copy an array
32361         of the exact size and return that.
32363         (Class::LookupMethodByBuilder): New function that maps
32364         MethodBuilders to its methods.  Required to locate the information
32365         on methods because System.Reflection bit us again.
32367         * support.cs: New file, contains an interface ParameterData and
32368         two implementations: ReflectionParameters and InternalParameters
32369         used to access Parameter information.  We will need to grow this
32370         as required.
32372         * expression.cs (Invocation::GetParameterData): implement a cache
32373         and a wrapper around the ParameterData creation for methods. 
32374         (Invocation::OverloadResolve): Use new code.
32376 2001-09-13  Ravi Pratap  <ravi@ximian.com>
32378         * class.cs (TypeContainer::EmitField): Remove and move into 
32379         (Field::Define): here and modify accordingly.
32380         (Field.FieldBuilder): New member.
32381         (TypeContainer::Populate): Update accordingly.
32382         (TypeContainer::FindMembers): Implement.
32384 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
32386         * statement.cs: (VariableInfo::VariableType): New field to be
32387         initialized with the full type once it is resolved. 
32389 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
32391         * parameter.cs (GetParameterInfo): Use a type cache to compute
32392         things only once, and to reuse this information
32394         * expression.cs (LocalVariableReference::Emit): Implement.
32395         (OpcodeCast::Emit): fix.
32397         (ParameterReference::Resolve): Implement.
32398         (ParameterReference::Emit): Implement.
32400         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
32401         that are expressions need to stay as Expressions.
32403         * typemanager.cs (CSharpName): Returns the C# name of a type if
32404         possible. 
32406         * expression.cs (Expression::ConvertImplicit): New function that
32407         implements implicit type conversions.
32409         (Expression::ImplicitReferenceConversion): Implements implicit
32410         reference conversions.
32412         (EmptyCast): New type for transparent casts.
32414         (OpcodeCast): New type for casts of types that are performed with
32415         a sequence of bytecodes.
32417         (BoxedCast): New type used for casting value types into reference
32418         types.  Emits a box opcode.
32420         (Binary::DoNumericPromotions): Implements numeric promotions of
32421         and computation of the Binary::Type.
32423         (Binary::EmitBranchable): Optimization.
32425         (Binary::Emit): Implement code emission for expressions.
32427         * typemanager.cs (TypeManager): Added two new core types: sbyte
32428         and byte.
32430 2001-09-12  Ravi Pratap  <ravi@ximian.com>
32432         * class.cs (TypeContainer::FindMembers): Method which does exactly
32433         what Type.FindMembers does, only we don't have to use reflection. No
32434         implementation yet.
32436         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
32437         typecontainer objects as we need to get at them.
32438         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
32440         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
32441         typecontainer object.
32443         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
32444         of just a Report object.
32446 2001-09-11  Ravi Pratap  <ravi@ximian.com>
32448         * class.cs (Event::Define): Go back to using the prefixes "add_" and
32449         "remove_"
32450         (TypeContainer::Populate): Now define the delegates of the type too.
32451         (TypeContainer.Delegates): Property to access the list of delegates defined
32452         in the type.
32454         * delegates.cs (Delegate::Define): Implement partially.
32456         * modifiers.cs (TypeAttr): Handle more flags.
32458 2001-09-11  Ravi Pratap  <ravi@ximian.com>
32460         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
32461         and not <=
32462         (Operator::Define): Re-write logic to get types by using the LookupType method
32463         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
32464         (Indexer::Define): Ditto.
32465         (Event::Define): Ditto.
32466         (Property::Define): Ditto.
32468 2001-09-10  Ravi Pratap  <ravi@ximian.com>
32470         * class.cs (TypeContainer::Populate): Now define operators too. 
32471         (TypeContainer.Operators): New property to access the list of operators
32472         in a type.
32473         (Operator.OperatorMethodBuilder): New member to hold the method builder
32474         for the operator we are defining.
32475         (Operator::Define): Implement.
32477 2001-09-10  Ravi Pratap  <ravi@ximian.com>
32479         * class.cs (Event::Define): Make the prefixes of the accessor methods
32480         addOn_ and removeOn_ 
32482         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
32483         of the location being passed in too. Ideally, this should go later since all
32484         error reporting should be done through the Report object.
32486         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
32487         (Populate): Iterate thru the indexers we have and define them too.
32488         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
32489         for the get and set accessors.
32490         (Indexer::Define): Implement.
32492 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
32494         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
32495         my previous implementation, did not work.
32497         * typemanager.cs: Add a couple of missing types (the longs).
32499         * literal.cs: Use TypeManager.bool_type instead of getting it.
32501         * expression.cs (EventExpr): New kind of expressions.
32502         (Expressio::ExprClassFromMemberInfo): finish
32504 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
32506         * assign.cs: Emit stores to static fields differently.
32508 2001-09-08  Ravi Pratap  <ravi@ximian.com>
32510         * Merge in changes and adjust code to tackle conflicts. Backed out my
32511         code in Assign::Resolve ;-) 
32513 2001-09-08  Ravi Pratap  <ravi@ximian.com>
32515         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
32516         instead Report.Error and also pass in the location.
32517         (CSharpParser::Lexer): New readonly property to return the reference
32518         to the Tokenizer object.
32519         (declare_local_variables): Use Report.Error with location instead of plain 
32520         old error.
32521         (CheckDef): Ditto.
32523         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
32524         (Operator.CheckBinaryOperator): Ditto.
32526         * cs-parser.jay (operator_declarator): Update accordingly.
32528         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
32529         (CheckBinaryOperator): Same here.
32531         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
32532         on the name without any prefixes of namespace names etc. This is because we
32533         already might have something already fully qualified like 
32534         'System.Console.WriteLine'
32536         * assign.cs (Resolve): Begin implementation. Stuck ;-)
32538 2001-09-07  Ravi Pratap  <ravi@ximian.com>
32540         * cs-tokenizer.cs (location): Return a string which also contains
32541         the file name.
32543         * expression.cs (ElementAccess): New class for expressions of the
32544         type 'element access.'
32545         (BaseAccess): New class for expressions of the type 'base access.'
32546         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
32547         respectively.
32549         * cs-parser.jay (element_access): Implement action.
32550         (base_access): Implement actions.
32551         (checked_expression, unchecked_expression): Implement.
32553         * cs-parser.jay (local_variable_type): Correct and implement.
32554         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
32556         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
32558         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
32559         name and the specifiers.
32561         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
32563         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
32564         making them all public ;-)
32566         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
32567         class anyways.
32569 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
32571         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
32572         PropertyExprs.
32573         (FieldExpr, PropertyExprs): New resolved expressions.
32574         (SimpleName::MemberStaticCheck): Perform static checks for access
32575         to non-static fields on static methods. Maybe this should be
32576         generalized for MemberAccesses. 
32577         (SimpleName::ResolveSimpleName): More work on simple name
32578         resolution. 
32580         * cs-parser.jay (primary_expression/qualified_identifier): track
32581         the parameter index.
32583         * codegen.cs (CodeGen::Save): Catch save exception, report error.
32584         (EmitContext::EmitBoolExpression): Chain to expression generation
32585         instead of temporary hack.
32586         (::EmitStatementExpression): Put generic expression code generation.
32588         * assign.cs (Assign::Emit): Implement variable assignments to
32589         local variables, parameters and fields.
32591 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
32593         * statement.cs (Block::GetVariableInfo): New method, returns the
32594         VariableInfo for a variable name in a block.
32595         (Block::GetVariableType): Implement in terms of GetVariableInfo
32597         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
32598         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
32600 2001-09-06  Ravi Pratap  <ravi@ximian.com>
32602         * cs-parser.jay (operator_declaration): Continue on my quest : update
32603         to take attributes argument.
32604         (event_declaration): Ditto.
32605         (enum_declaration): Ditto.
32606         (indexer_declaration): Ditto.
32608         * class.cs (Operator::Operator): Update constructor accordingly.
32609         (Event::Event): Ditto.
32611         * delegate.cs (Delegate::Delegate): Same here.
32613         * enum.cs (Enum::Enum): Same here.
32615 2001-09-05  Ravi Pratap  <ravi@ximian.com>
32617         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
32619         * ../tests/cs0658.cs : New file to demonstrate error 0658.
32621         * attribute.cs (Attributes): New class to encapsulate all attributes which were
32622         being passed around as an arraylist.
32623         (Attributes::AddAttribute): Method to add attribute sections.
32625         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
32626         (struct_declaration): Update accordingly.
32627         (constant_declaration): Update.
32628         (field_declaration): Update.
32629         (method_header): Update.
32630         (fixed_parameter): Update.
32631         (parameter_array): Ditto.
32632         (property_declaration): Ditto.
32633         (destructor_declaration): Ditto.
32635         * class.cs (Struct::Struct): Update constructors accordingly.
32636         (Class::Class): Ditto.
32637         (Field::Field): Ditto.
32638         (Method::Method): Ditto.
32639         (Property::Property): Ditto.
32640         (TypeContainer::OptAttribute): update property's return type.
32642         * interface.cs (Interface.opt_attributes): New member.
32643         (Interface::Interface): Update to take the extra Attributes argument.
32645         * parameter.cs (Parameter::Parameter): Ditto.
32647         * constant.cs (Constant::Constant): Ditto.
32649         * interface.cs (InterfaceMemberBase): New OptAttributes field.
32650         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
32651         the attributes as a parameter.
32652         (InterfaceProperty): Update constructor call.
32653         (InterfaceEvent): Ditto.
32654         (InterfaceMethod): Ditto.
32655         (InterfaceIndexer): Ditto.
32657         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
32658         pass the attributes too.
32659         (interface_event_declaration): Ditto.
32660         (interface_property_declaration): Ditto.
32661         (interface_method_declaration): Ditto.
32662         (interface_declaration): Ditto.
32664 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
32666         * class.cs (Method::Define): Track the "static Main" definition to
32667         create an entry point. 
32669         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
32670         EntryPoint if we find it. 
32672         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
32673         (EmitContext::ig): Make this variable public.
32675         * driver.cs: Make the default output file be the first file name
32676         with the .exe extension.  
32678         Detect empty compilations
32680         Handle various kinds of output targets.  Handle --target and
32681         rename -t to --dumper.
32683         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
32684         methods inherited from Expression return now an Expression.  This
32685         will is used during the tree rewriting as we resolve them during
32686         semantic analysis.
32688         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
32689         the spec.  Missing entirely is the information about
32690         accessability of elements of it.
32692         (Expression::ExprClassFromMemberInfo): New constructor for
32693         Expressions that creates a fully initialized Expression based on
32694         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
32695         a Type.
32697         (Invocation::Resolve): Begin implementing resolution of invocations.
32699         * literal.cs (StringLiteral):  Implement Emit.
32701 2001-09-05  Ravi Pratap  <ravi@ximian.com>
32703         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
32704         member.
32706 2001-09-04  Ravi Pratap  <ravi@ximian.com>
32708         * cs-parser.jay (attribute_arguments): Implement actions.
32709         (attribute): Fix bug in production. Implement action.
32710         (attribute_list): Implement.
32711         (attribute_target): Implement.
32712         (attribute_target_specifier, opt_target_specifier): Implement
32713         (CheckAttributeTarget): New method to check if the attribute target
32714         is valid.
32715         (attribute_section): Implement.
32716         (opt_attributes): Implement.
32718         * attribute.cs : New file to handle attributes.
32719         (Attribute): Class to hold attribute info.
32721         * cs-parser.jay (opt_attribute_target_specifier): Remove production
32722         (attribute_section): Modify production to use 2 different rules to 
32723         achieve the same thing. 1 s/r conflict down !
32724         Clean out commented, useless, non-reducing dimension_separator rules.
32726         * class.cs (TypeContainer.attributes): New member to hold list
32727         of attributes for a type.
32728         (Struct::Struct): Modify to take one more argument, the attribute list.
32729         (Class::Class): Ditto.
32730         (Field::Field): Ditto.
32731         (Method::Method): Ditto.
32732         (Property::Property): Ditto.
32734         * cs-parser.jay (struct_declaration): Update constructor call to
32735         pass in the attributes too.
32736         (class_declaration): Ditto.
32737         (constant_declaration): Ditto.
32738         (field_declaration): Ditto.
32739         (method_header): Ditto.
32740         (fixed_parameter): Ditto.
32741         (parameter_array): Ditto.
32742         (property_declaration): Ditto.
32744         * constant.cs (Constant::Constant): Update constructor similarly.
32745         Use System.Collections.
32747         * parameter.cs (Parameter::Parameter): Update as above.
32749 2001-09-02  Ravi Pratap  <ravi@ximian.com>
32751         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
32752         (TypeContainer.delegates): New member to hold list of delegates.
32754         * cs-parser.jay (delegate_declaration): Implement the action correctly 
32755         this time as I seem to be on crack ;-)
32757 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
32759         * rootcontext.cs (RootContext::IsNamespace): new function, used to
32760         tell whether an identifier represents a namespace.
32762         * expression.cs (NamespaceExpr): A namespace expression, used only
32763         temporarly during expression resolution.
32764         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
32765         utility functions to resolve names on expressions.
32767 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
32769         * codegen.cs: Add hook for StatementExpressions. 
32771         * class.cs: Fix inverted test for static flag in methods.
32773 2001-09-02  Ravi Pratap  <ravi@ximian.com>
32775         * class.cs (Operator::CheckUnaryOperator): Correct error number used
32776         to make it coincide with MS' number.
32777         (Operator::CheckBinaryOperator): Ditto.
32779         * ../errors/errors.txt : Remove error numbers added earlier.
32781         * ../errors/cs1019.cs : Test case for error # 1019
32783         * ../errros/cs1020.cs : Test case for error # 1020
32785         * cs-parser.jay : Clean out commented cruft.
32786         (dimension_separators, dimension_separator): Comment out. Ostensibly not
32787         used anywhere - non-reducing rule.
32788         (namespace_declarations): Non-reducing rule - comment out.
32790         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
32791         with TypeContainer::AddEnum.
32793         * delegate.cs : New file for delegate handling classes.
32794         (Delegate): Class for declaring delegates.
32796         * makefile : Update.
32798         * cs-parser.jay (delegate_declaration): Implement.
32800 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
32802         * class.cs (Event::Define): Implement.
32803         (Event.EventBuilder): New member.
32805         * class.cs (TypeContainer::Populate): Update to define all enums and events
32806         we have.
32807         (Events): New property for the events arraylist we hold. Shouldn't we move to using
32808         readonly fields for all these cases ?
32810 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
32812         * class.cs (Property): Revamp to use the convention of making fields readonly.
32813         Accordingly modify code elsewhere.
32815         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
32816         the Define method of the Property class.
32818         * class.cs : Clean up applied patch and update references to variables etc. Fix 
32819         trivial bug.
32820         (TypeContainer::Populate): Update to define all the properties we have. Also
32821         define all enumerations.
32823         * enum.cs (Define): Implement.
32825 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
32827         * cs-parser.jay (overloadable_operator): The semantic value is an
32828         enum of the Operator class.
32829         (operator_declarator): Implement actions.
32830         (operator_declaration): Implement.
32832         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
32833         validity of definitions.
32834         (Operator::CheckBinaryOperator): Static method to check for binary operators
32835         (TypeContainer::AddOperator): New method to add an operator to a type.
32837         * cs-parser.jay (indexer_declaration): Added line to actually call the
32838         AddIndexer method so it gets added ;-)
32840         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
32841         already taken care of by the MS compiler ?  
32843 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
32845         * class.cs (Operator): New class for operator declarations.
32846         (Operator::OpType): Enum for the various operators.
32848 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
32850         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
32851         ostensibly handle this in semantic analysis.
32853         * cs-parser.jay (general_catch_clause): Comment out
32854         (specific_catch_clauses, specific_catch_clause): Ditto.
32855         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
32856         (catch_args, opt_catch_args): New productions.
32857         (catch_clause): Rewrite to use the new productions above
32858         (catch_clauses): Modify accordingly.
32859         (opt_catch_clauses): New production to use in try_statement
32860         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
32861         and re-write the code in the actions to extract the specific and
32862         general catch clauses by being a little smart ;-)
32864         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
32865         Hooray, try and catch statements parse fine !
32867 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
32869         * statement.cs (Block::GetVariableType): Fix logic to extract the type
32870         string from the hashtable of variables.
32872         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
32873         I end up making that mistake ;-)
32874         (catch_clauses): Fixed gross error which made Key and Value of the 
32875         DictionaryEntry the same : $1 !!
32877 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
32879         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
32881         * cs-parser.jay (event_declaration): Correct to remove the semicolon
32882         when the add and remove accessors are specified. 
32884 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
32886         * cs-parser.jay (IndexerDeclaration): New helper class to hold
32887         information about indexer_declarator.
32888         (indexer_declarator): Implement actions.
32889         (parsing_indexer): New local boolean used to keep track of whether
32890         we are parsing indexers or properties. This is necessary because 
32891         implicit_parameters come into picture even for the get accessor in the 
32892         case of an indexer.
32893         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
32895         * class.cs (Indexer): New class for indexer declarations.
32896         (TypeContainer::AddIndexer): New method to add an indexer to a type.
32897         (TypeContainer::indexers): New member to hold list of indexers for the
32898         type.
32900 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
32902         * cs-parser.jay (add_accessor_declaration): Implement action.
32903         (remove_accessor_declaration): Implement action.
32904         (event_accessors_declaration): Implement
32905         (variable_declarators): swap statements for first rule - trivial.
32907         * class.cs (Event): New class to hold information about event
32908         declarations.
32909         (TypeContainer::AddEvent): New method to add an event to a type
32910         (TypeContainer::events): New member to hold list of events.
32912         * cs-parser.jay (event_declaration): Implement actions.
32914 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
32916         * cs-parser.jay (dim_separators): Implement. Make it a string
32917         concatenating all the commas together, just as they appear.
32918         (opt_dim_separators): Modify accordingly
32919         (rank_specifiers): Update accordingly. Basically do the same
32920         thing - instead, collect the brackets here.
32921         (opt_rank_sepcifiers): Modify accordingly.
32922         (array_type): Modify to actually return the complete type string
32923         instead of ignoring the rank_specifiers.
32924         (expression_list): Implement to collect the expressions
32925         (variable_initializer): Implement. We make it a list of expressions
32926         essentially so that we can handle the array_initializer case neatly too.
32927         (variable_initializer_list): Implement.
32928         (array_initializer): Make it a list of variable_initializers
32929         (opt_array_initializer): Modify accordingly.
32931         * expression.cs (New::NType): Add enumeration to help us
32932         keep track of whether we have an object/delegate creation
32933         or an array creation.
32934         (New:NewType, New::Rank, New::Indices, New::Initializers): New
32935         members to hold data about array creation.
32936         (New:New): Modify to update NewType
32937         (New:New): New Overloaded contructor for the array creation
32938         case.
32940         * cs-parser.jay (array_creation_expression): Implement to call
32941         the overloaded New constructor.
32943 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
32945         * class.cs (TypeContainer::Constructors): Return member
32946         constructors instead of returning null.
32948 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
32950         * typemanager.cs (InitCoreTypes): Initialize the various core
32951         types after we have populated the type manager with the user
32952         defined types (this distinction will be important later while
32953         compiling corlib.dll)
32955         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
32956         on Expression Classification.  Now all expressions have a method
32957         `Resolve' and a method `Emit'.
32959         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
32960         generation from working.     Also add some temporary debugging
32961         code. 
32963 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
32965         * codegen.cs: Lots of code generation pieces.  This is only the
32966         beginning, will continue tomorrow with more touches of polish.  We
32967         handle the fundamentals of if, while, do, for, return.  Others are
32968         trickier and I need to start working on invocations soon.
32970         * gen-treedump.cs: Bug fix, use s.Increment here instead of
32971         s.InitStatement. 
32973         * codegen.cs (EmitContext): New struct, used during code
32974         emission to keep a context.   Most of the code generation will be
32975         here. 
32977         * cs-parser.jay: Add embedded blocks to the list of statements of
32978         this block.  So code generation proceeds in a top down fashion.
32980 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
32982         * statement.cs: Add support for multiple child blocks.
32984 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
32986         * codegen.cs (EmitCode): New function, will emit the code for a
32987         Block of code given a TypeContainer and its ILGenerator. 
32989         * statement.cs (Block): Standard public readonly optimization.
32990         (Block::Block constructors): Link children. 
32991         (Block::Child): Child Linker.
32992         (Block::EmitVariables): Emits IL variable declarations.
32994         * class.cs: Drop support for MethodGroups here, delay until
32995         Semantic Analysis.
32996         (Method::): Applied the same simplification that I did before, and
32997         move from Properties to public readonly fields.
32998         (Method::ParameterTypes): Returns the parameter types for the
32999         function, and implements a cache that will be useful later when I
33000         do error checking and the semantic analysis on the methods is
33001         performed.
33002         (Constructor::GetCallingConvention): Renamed from CallingConvetion
33003         and made a method, optional argument tells whether this is a class
33004         or a structure to apply the `has-this' bit.
33005         (Method::GetCallingConvention): Implement, returns the calling
33006         convention. 
33007         (Method::Define): Defines the type, a second pass is performed
33008         later to populate the methods.
33010         (Constructor::ParameterTypes): implement a cache similar to the
33011         one on Method::ParameterTypes, useful later when we do semantic
33012         analysis. 
33014         (TypeContainer::EmitMethod):  New method.  Emits methods.
33016         * expression.cs: Removed MethodGroup class from here.
33018         * parameter.cs (Parameters::GetCallingConvention): new method.
33020 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
33022         * class.cs (TypeContainer::Populate): Drop RootContext from the
33023         argument. 
33025         (Constructor::CallingConvention): Returns the calling convention.
33026         (Constructor::ParameterTypes): Returns the constructor parameter
33027         types. 
33029         (TypeContainer::AddConstructor): Keep track of default constructor
33030         and the default static constructor.
33032         (Constructor::) Another class that starts using `public readonly'
33033         instead of properties. 
33035         (Constructor::IsDefault): Whether this is a default constructor. 
33037         (Field::) use readonly public fields instead of properties also.
33039         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
33040         track of static constructors;  If none is used, turn on
33041         BeforeFieldInit in the TypeAttributes. 
33043         * cs-parser.jay (opt_argument_list): now the return can be null
33044         for the cases where there are no arguments. 
33046         (constructor_declarator): If there is no implicit `base' or
33047         `this', then invoke the default parent constructor. 
33049         * modifiers.cs (MethodAttr): New static function maps a set of
33050         modifiers flags into a MethodAttributes enum
33051         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
33052         MethodAttr, TypeAttr to represent the various mappings where the
33053         modifiers are used.
33054         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
33056 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
33058         * parameter.cs (GetParameterInfo): Fix bug where there would be no
33059         method arguments.
33061         * interface.cs (PopulateIndexer): Implemented the code generator
33062         for interface indexers.
33064 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
33066         * interface.cs (InterfaceMemberBase): Now we track the new status
33067         here.  
33069         (PopulateProperty): Implement property population.  Woohoo!  Got
33070         Methods and Properties going today. 
33072         Removed all the properties for interfaces, and replaced them with
33073         `public readonly' fields. 
33075 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
33077         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
33078         initialize their hashtables/arraylists only when they are needed
33079         instead of doing this always.
33081         * parameter.cs: Handle refs and out parameters.
33083         * cs-parser.jay: Use an ArrayList to construct the arguments
33084         instead of the ParameterCollection, and then cast that to a
33085         Parameter[] array.
33087         * parameter.cs: Drop the use of ParameterCollection and use
33088         instead arrays of Parameters.
33090         (GetParameterInfo): Use the Type, not the Name when resolving
33091         types. 
33093 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
33095         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
33096         and instead use public readonly fields.
33098         * class.cs: Put back walking code for type containers.
33100 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
33102         * class.cs (MakeConstant): Code to define constants.
33104         * rootcontext.cs (LookupType): New function.  Used to locate types 
33107 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
33109         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
33110         this System.Reflection code is.  Kudos to Microsoft
33112         * typemanager.cs: Implement a type cache and avoid loading all
33113         types at boot time.  Wrap in LookupType the internals.  This made
33114         the compiler so much faster.  Wow.  I rule!
33116         * driver.cs: Make sure we always load mscorlib first (for
33117         debugging purposes, nothing really important).
33119         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
33120         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
33122         * rootcontext.cs: Lookup types on their namespace;  Lookup types
33123         on namespaces that have been imported using the `using' keyword.
33125         * class.cs (TypeContainer::TypeAttr): Virtualize.
33126         (Class::TypeAttr): Return attributes suitable for this bad boy.
33127         (Struct::TypeAttr): ditto.
33128         Handle nested classes.
33129         (TypeContainer::) Remove all the type visiting code, it is now
33130         replaced with the rootcontext.cs code
33132         * rootcontext.cs (GetClassBases): Added support for structs. 
33134 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
33136         * interface.cs, statement.cs, class.cs, parameter.cs,
33137         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
33138         Drop use of TypeRefs, and use strings instead.
33140 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
33142         * rootcontext.cs: 
33144         * class.cs (Struct::Struct): set the SEALED flags after
33145         checking the modifiers.
33146         (TypeContainer::TypeAttr): new property, returns the
33147         TypeAttributes for a class.  
33149         * cs-parser.jay (type_list): Oops, list production was creating a
33150         new list of base types.
33152         * rootcontext.cs (StdLib): New property.
33153         (GetInterfaceTypeByName): returns an interface by type name, and
33154         encapsulates error handling here.
33155         (GetInterfaces): simplified.
33156         (ResolveTree): Encapsulated all the tree resolution here.
33157         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
33158         types. 
33160         * driver.cs: Add support for --nostdlib, to avoid loading the
33161         default assemblies.
33162         (Main): Do not put tree resolution here. 
33164         * rootcontext.cs: Beginning of the class resolution.
33166 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
33168         * rootcontext.cs: Provide better error reporting. 
33170         * cs-parser.jay (interface_base): set our $$ to be interfaces.
33172         * rootcontext.cs (CreateInterface): Handle the case where there
33173         are no parent interfaces.
33175         (CloseTypes): Routine to flush types at the end.
33176         (CreateInterface): Track types.
33177         (GetInterfaces): Returns an array of Types from the list of
33178         defined interfaces.
33180         * typemanager.c (AddUserType): Mechanism to track user types (puts
33181         the type on the global type hash, and allows us to close it at the
33182         end). 
33184 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
33186         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
33187         RecordInterface instead.
33189         * cs-parser.jay: Updated to reflect changes above.
33191         * decl.cs (Definition): Keep track of the TypeBuilder type that
33192         represents this type here.  Not sure we will use it in the long
33193         run, but wont hurt for now.
33195         * driver.cs: Smaller changes to accomodate the new code.
33197         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
33198         when done. 
33200         * rootcontext.cs (CreateInterface):  New method, used to create
33201         the System.TypeBuilder type for interfaces.
33202         (ResolveInterfaces): new entry point to resolve the interface
33203         hierarchy. 
33204         (CodeGen): Property, used to keep track of the code generator.
33206 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
33208         * cs-parser.jay: Add a second production for delegate_declaration
33209         with `VOID'.
33211         (enum_body): Put an opt_comma here instead of putting it on
33212         enum_body or enum_member_declarations so we can handle trailing
33213         commas on enumeration members.  Gets rid of a shift/reduce.
33215         (type_list): Need a COMMA in the middle.
33217         (indexer_declaration): Tell tokenizer to recognize get/set
33219         * Remove old targets.
33221         * Re-add the parser target.
33223 2001-07-13  Simon Cozens <simon@simon-cozens.org>
33225         * cs-parser.jay: Add precendence rules for a number of operators
33226         ot reduce the number of shift/reduce conflicts in the grammar.
33228 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
33230         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
33231         and put it here.
33233         Get rid of old crufty code.
33235         * rootcontext.cs: Use this to keep track of the parsed
33236         representation and the defined types available to the program. 
33238         * gen-treedump.cs: adjust for new convention.
33240         * type.cs: Split out the type manager, and the assembly builder
33241         from here. 
33243         * typemanager.cs: the type manager will live here now.
33245         * cil-codegen.cs: And the code generator here. 
33247 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
33249         * makefile: Fixed up for easy making.
33251 2001-07-13  Simon Cozens <simon@simon-cozens.org>
33253         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
33254         the 
33256         (unary_expression): Expand pre_increment_expression and
33257         post_decrement_expression to reduce a shift/reduce.
33259 2001-07-11  Simon Cozens
33261         * cs-tokenizer.cs: Hex numbers should begin with a 0.
33263         Improve allow_keyword_as_indent name.
33265 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
33267         * Adjustments for Beta2. 
33269 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
33271         * decl.cs: Added `Define' abstract method.
33272         (InTransit): new property, used to catch recursive definitions. 
33274         * interface.cs: Implement `Define'. 
33276         * modifiers.cs: Map Modifiers.constants to
33277         System.Reflection.TypeAttribute flags.
33279         * class.cs: Keep track of types and user-defined types.
33280         (BuilderInit): New method for creating an assembly
33281         (ResolveType): New function to launch the resolution process, only
33282         used by interfaces for now.
33284         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
33285         that are inserted into the name space. 
33287 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
33289         * ARGH.  I have screwed up my tree so many times due to the use of
33290         rsync rather than using CVS.  Going to fix this at once. 
33292         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
33293         load types.
33295 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
33297         * Experiment successful: Use System.Type rather that our own
33298         version of Type.  
33300 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
33302         * cs-parser.jay: Removed nsAliases from here.
33304         Use new namespaces, handle `using XXX;' 
33306         * namespace.cs: Reimplemented namespace handling, use a recursive
33307         definition of the class.  Now we can keep track of using clauses
33308         and catch invalid using clauses.
33310 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
33312         * gen-treedump.cs: Adapted for all the renaming.
33314         * expression.cs (Expression): this class now has a Type property
33315         which returns an expression Type.
33317         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
33318         `Type', as this has a different meaning now in the base
33320 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
33322         * interface.cs, class.cs: Removed from all the sources the
33323         references to signature computation, as we can not do method
33324         signature computation during the parsing time, as we are not
33325         trying to solve at that point distinguishing:
33327         class X {
33328                 void a (Blah x) {}
33329                 void a (NS.Blah x) {}
33330         }
33332         Which depending on the context might be valid or not, as we do not
33333         know if Blah is the same thing as NS.Blah at that point.
33335         * Redid everything so the code uses TypeRefs now instead of
33336         Types.  TypeRefs are just temporary type placeholders, that need
33337         to be resolved.  They initially have a pointer to a string and the
33338         current scope in which they are used.  This is used later by the
33339         compiler to resolve the reference to an actual Type. 
33341         * DeclSpace is no longer a CIR.Type, and neither are
33342         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
33343         are all DeclSpaces, but no Types. 
33345         * type.cs (TypeRefManager): This implements the TypeRef manager,
33346         which keeps track of all the types that need to be resolved after
33347         the parsing has finished. 
33349 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
33351         * ARGH.  We are going to have to store `foreach' as a class rather
33352         than resolving it, as we need to verify error 1579 after name
33353         resolution.   *OR* we could keep a flag that says `This request to
33354         IEnumerator comes from a foreach statement' which we can then use
33355         to generate the error.
33357 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
33359         * class.cs (TypeContainer.AddMethod): we now add methods to the
33360         MethodGroup instead of the method hashtable.  
33362         * expression.cs: Add MethodGroup abstraction, which gets us one
33363         step closer to the specification in the way we handle method
33364         declarations.  
33366         * cs-parser.jay (primary_expression): qualified_identifier now
33367         tried to match up an identifier to a local variable reference or
33368         to a parameter reference.
33370         current_local_parameters is now a parser global variable that
33371         points to the current parameters for the block, used during name
33372         lookup.
33374         (property_declaration): Now creates an implicit `value' argument to
33375         the set accessor.
33377 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
33379         * parameter.cs: Do not use `param' arguments as part of the
33380         signature, per the spec.
33382 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
33384         * decl.cs: Base class for classes, structs and interfaces.  This
33385         is the "Declaration Space" 
33387         * cs-parser.jay: Use CheckDef for checking declaration errors
33388         instead of having one on each function.
33390         * class.cs: Factor out some code for handling error handling in
33391         accordance to the "Declarations" section in the "Basic Concepts"
33392         chapter in the ECMA C# spec.
33394         * interface.cs: Make all interface member classes derive from
33395         InterfaceMemberBase.
33397 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
33399         * Many things: all interfaces are parsed and generated in
33400         gen-treedump.  Support for member variables, constructors,
33401         destructors, properties, constants is there.
33403         Beginning of the IL backend, but very little done, just there for
33404         testing purposes. 
33406 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
33408         * cs-parser.jay: Fix labeled statement.
33410         * cs-tokenizer.cs (escape): Escape " and ' always.
33411         ref_line, ref_name: keep track of the line/filename as instructed
33412         by #line by the compiler.
33413         Parse #line.
33415 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
33417         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
33418         to match the values in System.CodeDOM.
33420         Divid renamed to Divide.
33422         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
33423         statements. 
33424         (Statements.set): remove.
33426         * System.CodeDOM/CodeCatchClause.cs: always have a valid
33427         statements. 
33429         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
33430         falseStatements always have valid values. 
33432         * cs-parser.jay: Use System.CodeDOM now.