2001-10-03 Ravi Pratap <ravi@ximian.com>
[mono.git] / mcs / mcs / ChangeLog
1 2001-10-03  Ravi Pratap  <ravi@ximian.com>
2
3         * expression.cs (Binary::DoNumericPromotions): Fix the case when
4         we do a forcible conversion regardless of type, to check if 
5         ForceConversion returns a null.
6
7         (Binary::error19): Use location to report error.
8
9         (Unary::error23): Use location here too.
10
11         * ../errors/cs0019.cs : Check in.
12
13         * ../errors/cs0023.cs : Check in.
14
15         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
16         case of a non-null MethodInfo object with a length of 0 !
17
18         (Binary::ResolveOperator): Flag error if overload resolution fails to find
19         an applicable member - according to the spec :-)
20         Also fix logic to find members in base types.
21
22         (Unary::ResolveOperator): Same here.
23
24         (Unary::report23): Change name to error23 and make first argument a TypeContainer
25         as I was getting thoroughly confused between this and error19 :-)
26         
27         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
28         (::FindMostEncompassedType): Implement.
29         (::FindMostEncompassingType): Implement.
30         (::StandardConversionExists): Implement.
31
32         (UserImplicitCast): Re-vamp. We now need info about most specific
33         source and target types so that we can do the necessary conversions.
34
35         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
36         mathematical union with no duplicates.
37
38 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
39
40         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
41         in order from base classes to child classes, so that we can in
42         child classes look up in our parent for method names and
43         attributes (required for handling abstract, virtual, new, override
44         constructs: we need to instrospect our base class, and if we dont
45         populate the classes in order, the introspection might be
46         incorrect.  For example, a method could query its parent before
47         the parent has any methods and would determine that the parent has
48         no abstract methods (while it could have had them)).
49
50         (RootContext::CreateType): Record the order in which we define the
51         classes.
52
53 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
54
55         * class.cs (TypeContainer::Populate): Also method definitions can
56         fail now, keep track of this.
57
58         (TypeContainer::FindMembers): Implement support for
59         DeclaredOnly/noDeclaredOnly flag.
60
61         (Constructor::Emit) Return the ConstructorBuilder.
62
63         (Method::Emit) Return the MethodBuilder. 
64         Check for abstract or virtual methods to be public.
65
66         * rootcontext.cs (RootContext::CreateType): Register all the
67         abstract methods required for the class to be complete and the
68         interface methods that must be implemented. 
69
70         * cs-parser.jay: Report error 501 (method requires body if it is
71         not marked abstract or extern).
72
73         * expression.cs (TypeOf::Emit): Implement.
74
75         * typemanager.cs: runtime_handle_type, new global type.
76
77         * class.cs (Property::Emit): Generate code for properties.
78
79 2001-10-02  Ravi Pratap  <ravi@ximian.com>
80
81         * expression.cs (Unary::ResolveOperator): Find operators on base type
82         too - we now conform exactly to the spec.
83
84         (Binary::ResolveOperator): Same here.
85
86         * class.cs (Operator::Define): Fix minor quirk in the tests.
87
88         * ../errors/cs0215.cs : Added.
89
90         * ../errors/cs0556.cs : Added.
91
92         * ../errors/cs0555.cs : Added.
93
94 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
95
96         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
97         single integer which is really efficient
98
99 2001-10-01  Ravi Pratap  <ravi@ximian.com>
100
101         *  expression.cs (Expression::ImplicitUserConversion): Use location
102         even in the case when we are examining True operators.
103  
104         * class.cs (Operator::Define): Perform extensive checks to conform
105         with the rules for operator overloading in the spec.
106
107         * expression.cs (Expression::ImplicitReferenceConversion): Implement
108         some of the other conversions mentioned in the spec.
109
110         * typemanager.cs (array_type): New static member for the System.Array built-in
111         type.
112
113         (cloneable_interface): For System.ICloneable interface.
114
115         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
116         we start resolving the tree and populating types.
117
118         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
119  
120 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
121
122         * expression.cs (Expression::ExprClassFromMemberInfo,
123         Expression::Literalize): Create literal expressions from
124         FieldInfos which are literals.
125
126         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
127         type casts, because they were wrong.  The test suite in tests
128         caught these ones.
129
130         (ImplicitNumericConversion): ushort to ulong requires a widening
131         cast. 
132
133         Int32 constant to long requires widening cast as well.
134
135         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
136         for integers because the type on the stack is not i4.
137
138 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
139
140         * expression.cs (report118): require location argument. 
141
142         * parameter.cs: Do not dereference potential null value.
143
144         * class.cs: Catch methods that lack the `new' keyword when
145         overriding a name.  Report warnings when `new' is used without
146         anything being there to override.
147
148         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
149
150         * class.cs: Only add constructor to hashtable if it is non-null
151         (as now constructors can fail on define).
152
153         (TypeManager, Class, Struct): Take location arguments.
154
155         Catch field instance initialization in structs as errors.
156
157         accepting_filter: a new filter for FindMembers that is static so
158         that we dont create an instance per invocation.
159
160         (Constructor::Define): Catch errors where a struct constructor is
161         parameterless 
162
163         * cs-parser.jay: Pass location information for various new
164         constructs. 
165         
166         * delegate.cs (Delegate): take a location argument.
167
168         * driver.cs: Do not call EmitCode if there were problesm in the
169         Definition of the types, as many Builders wont be there. 
170
171         * decl.cs (Decl::Decl): Require a location argument.
172
173         * cs-tokenizer.cs: Handle properly hex constants that can not fit
174         into integers, and find the most appropiate integer for it.
175
176         * literal.cs: Implement ULongLiteral.
177
178         * rootcontext.cs: Provide better information about the location of
179         failure when CreateType fails.
180         
181 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
182
183         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
184         as well.
185
186         * expression.cs (Binary::CheckShiftArguments): Add missing type
187         computation.
188         (Binary::ResolveOperator): Add type to the logical and and logical
189         or, Bitwise And/Or and Exclusive Or code paths, it was missing
190         before.
191
192         (Binary::DoNumericPromotions): In the case where either argument
193         is ulong (and most signed types combined with ulong cause an
194         error) perform implicit integer constant conversions as well.
195
196 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
197
198         * expression.cs (UserImplicitCast): Method should always be
199         non-null. 
200         (Invocation::BetterConversion): Simplified test for IntLiteral.
201
202         (Expression::ImplicitNumericConversion): Split this routine out.
203         Put the code that performs implicit constant integer conversions
204         here. 
205
206         (Expression::Resolve): Become a wrapper around DoResolve so we can
207         check eclass and type being set after resolve.
208
209         (Invocation::Badness): Remove this dead function
210
211         (Binary::ResolveOperator): Do not compute the expensive argumnets
212         unless we have a union for it.
213
214         (Probe::Emit): Is needs to do an isinst and then
215         compare against null.
216
217         (::CanConvert): Added Location argument.  If the Location argument
218         is null (Location.Null), then we do not report errors.  This is
219         used by the `probe' mechanism of the Explicit conversion.  We do
220         not want to generate an error for something that the user
221         explicitly requested to be casted.  But the pipeline for an
222         explicit cast first tests for potential implicit casts.
223
224         So for now, if the Location is null, it means `Probe only' to
225         avoid adding another argument.   Might have to revise this
226         strategy later.
227
228         (ClassCast): New class used to type cast objects into arbitrary
229         classes (used in Explicit Reference Conversions).
230
231         Implement `as' as well.
232
233         Reverted all the patches from Ravi below: they were broken:
234
235                 * The use of `level' as a mechanism to stop recursive
236                   invocations is wrong.  That was there just to catch the
237                   bug with a strack trace but not as a way of addressing
238                   the problem.
239
240                   To fix the problem we have to *understand* what is going
241                   on and the interactions and come up with a plan, not
242                   just get things going.
243
244                 * The use of the type conversion cache that I proposed
245                   last night had an open topic: How does this work across
246                   protection domains.  A user defined conversion might not
247                   be public in the location where we are applying the
248                   conversion, a different conversion might be selected
249                   (ie, private A->B (better) but public B->A (worse),
250                   inside A, A->B applies, but outside it, B->A will
251                   apply).
252
253                 * On top of that (ie, even if the above is solved),
254                   conversions in a cache need to be abstract.  Ie, `To
255                   convert from an Int to a Short use an OpcodeCast', not
256                   `To convert from an Int to a Short use the OpcodeCast on
257                   the variable 5' (which is what this patch was doing).
258         
259 2001-09-28  Ravi Pratap  <ravi@ximian.com>
260
261         * expression.cs (Invocation::ConversionExists): Re-write to use
262         the conversion cache
263         
264         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
265         cache all conversions done, not just user-defined ones.
266
267         (Invocation::BetterConversion): The real culprit. Use ConversionExists
268         to determine if a conversion exists instead of acutually trying to 
269         perform the conversion. It's faster too.
270
271         (Expression::ConvertExplicit): Modify to use ConversionExists to check
272         and only then attempt the implicit conversion.
273
274 2001-09-28  Ravi Pratap  <ravi@ximian.com>
275
276         * expression.cs (ConvertImplicit): Use a cache for conversions
277         already found. Check level of recursion and bail out if necessary.
278         
279 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
280
281         * typemanager.cs (string_concat_string_string, string_concat_object_object):
282         Export standard methods that we expect for string operations.
283         
284         * statement.cs (Block::UsageWarning): Track usage of variables and
285         report the errors for not used variables.
286
287         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
288         operator. 
289
290 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
291
292         * codegen.cs: remove unnneded code 
293
294         * expression.cs: Removed BuiltinTypeAccess class
295
296         Fix the order in which implicit conversions are
297         done.  
298
299         The previous fixed dropped support for boxed conversions (adding a
300         test to the test suite now)
301
302         (UserImplicitCast::CanConvert): Remove test for source being null,
303         that code is broken.  We should not feed a null to begin with, if
304         we do, then we should track the bug where the problem originates
305         and not try to cover it up here.
306
307         Return a resolved expression of type UserImplicitCast on success
308         rather than true/false.  Ravi: this is what I was talking about,
309         the pattern is to use a static method as a "constructor" for
310         objects. 
311
312         Also, do not create arguments until the very last minute,
313         otherwise we always create the arguments even for lookups that
314         will never be performed. 
315
316         (UserImplicitCast::Resolve): Eliminate, objects of type
317         UserImplicitCast are born in a fully resolved state. 
318         
319         * typemanager.cs (InitCoreTypes): Init also value_type
320         (System.ValueType). 
321
322         * expression.cs (Cast::Resolve): First resolve the child expression.
323
324         (LValue): Add new method AddressOf to be used by
325         the `&' operator.  
326
327         Change the argument of Store to take an EmitContext instead of an
328         ILGenerator, because things like FieldExpr need to be able to call
329         their children expression to generate the instance code. 
330
331         (Expression::Error, Expression::Warning): Sugar functions for
332         reporting errors.
333
334         (Expression::MemberLookup): Accept a TypeContainer instead of a
335         Report as the first argument.
336
337         (Expression::ResolvePrimary): Killed.  I still want to improve
338         this as currently the code is just not right.
339
340         (Expression::ResolveMemberAccess): Simplify, but it is still
341         wrong. 
342
343         (Unary::Resolve): Catch errors in AddressOf operators.
344
345         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
346         index to a byte for the short-version, or the compiler will choose
347         the wrong Emit call, which generates the wrong data.
348
349         (ParameterReference::Emit, ::Store): same.
350
351         (FieldExpr::AddressOf): Implement.
352         
353         * typemanager.cs: TypeManager: made public variable instead of
354         property.
355         
356         * driver.cs: document --fatal.
357
358         * report.cs (ErrorMessage, WarningMessage): new names for the old
359         Error and Warning classes.
360
361         * cs-parser.jay (member_access): Turn built-in access to types
362         into a normal simplename
363
364 2001-09-27  Ravi Pratap  <ravi@ximian.com>
365
366         * expression.cs (Invocation::BetterConversion): Fix to cope
367         with q being null, since this was introducing a bug.
368
369         * expression.cs (ConvertImplicit): Do built-in conversions first.
370
371 2001-09-27  Ravi Pratap  <ravi@ximian.com>
372
373         * expression.cs (UserImplicitCast::Resolve): Fix bug.
374
375 2001-09-27  Ravi Pratap  <ravi@ximian.com>
376
377         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
378         I had introduced long ago (what's new ?).
379
380         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
381         the work of all the checking. 
382         (ConvertImplicit): Call CanConvert and only then create object if necessary.
383         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
384
385         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
386         that is the right way. 
387
388         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
389         overloading resolution. Use everywhere instead of cutting and pasting code.
390
391         (Binary::ResolveOperator): Use MakeUnionSet.
392
393         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
394         we have to convert to bool types. Not complete yet.
395         
396 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
397
398         * typemanager.cs (TypeManager::CSharpName): support ushort.
399
400         * expression.cs (Expression::TryImplicitIntConversion): Attempts
401         to provide an expression that performsn an implicit constant int
402         conversion (section 6.1.6).
403         (Expression::ConvertImplicitRequired): Reworked to include
404         implicit constant expression conversions.
405
406         (Expression::ConvertNumericExplicit): Finished.
407
408         (Invocation::Emit): If InstanceExpression is null, then it means
409         that we perform a call on this.
410         
411 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
412
413         * expression.cs (Unary::Emit): Remove some dead code.
414         (Probe): Implement Resolve and Emit for `is'.
415         (Expression::ConvertImplicitRequired): Attempt to do constant
416         expression conversions here.  Maybe should be moved to
417         ConvertImplicit, but I am not sure.
418         (Expression::ImplicitLongConstantConversionPossible,
419         Expression::ImplicitIntConstantConversionPossible): New functions
420         that tell whether is it possible to apply an implicit constant
421         expression conversion.
422
423         (ConvertNumericExplicit): Started work on explicit numeric
424         conversions.
425
426         * cs-parser.jay: Update operator constants.
427
428         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
429         (Parameters::GetSignature): Hook up VerifyArgs here.
430         (Parameters::VerifyArgs): Verifies that no two arguments have the
431         same name. 
432
433         * class.cs (Operator): Update the operator names to reflect the
434         ones that the spec expects (as we are just stringizing the
435         operator names).
436         
437         * expression.cs (Unary::ResolveOperator): Fix bug: Use
438         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
439         previous usage did only work for our methods.
440         (Expression::ConvertImplicit): Handle decimal implicit numeric
441         conversions as well.
442         (Expression::InternalTypeConstructor): Used to invoke constructors
443         on internal types for default promotions.
444
445         (Unary::Emit): Implement special handling for the pre/post
446         increment/decrement for overloaded operators, as they need to have
447         the same semantics as the other operators.
448
449         (Binary::ResolveOperator): ditto.
450         (Invocation::ConversionExists): ditto.
451         (UserImplicitCast::Resolve): ditto.
452         
453 2001-09-26  Ravi Pratap  <ravi@ximian.com>
454
455         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
456         operator, return after emitting body. Regression tests pass again !
457
458         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
459         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
460         (Invocation::OverloadResolve): Ditto.
461         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
462
463         * everywhere : update calls to the above methods accordingly.
464
465 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
466
467         * assign.cs (Assign): Make it inherit from ExpressionStatement.
468
469         * expression.cs (ExpressionStatement): New base class used for
470         expressions that can appear in statements, so that we can provide
471         an alternate path to generate expression that do not leave a value
472         on the stack.
473
474         (Expression::Emit, and all the derivatives): We no longer return
475         whether a value is left on the stack or not.  Every expression
476         after being emitted leaves a single value on the stack.
477
478         * codegen.cs (EmitContext::EmitStatementExpression): Use the
479         facilties of ExpressionStatement if possible.
480
481         * cs-parser.jay: Update statement_expression.
482
483 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
484
485         * driver.cs: Change the wording of message
486
487 2001-09-25  Ravi Pratap  <ravi@ximian.com>
488
489         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
490         the type of the expression to the return type of the method if
491         we have an overloaded operator match ! The regression tests pass again !
492         (Unary::ResolveOperator): Ditto.
493
494         * expression.cs (Invocation::ConversionExists): Correct the member lookup
495         to find "op_Implicit", not "implicit" ;-)
496         (UserImplicitCast): New class to take care of user-defined implicit conversions.
497         (ConvertImplicit, ForceConversion): Take TypeContainer argument
498
499         * everywhere : Correct calls to the above accordingly.
500
501         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
502         (ConvertImplicit): Do user-defined conversion if it exists.
503
504 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
505
506         * assign.cs: track location.
507         (Resolve): Use implicit conversions on assignment.
508
509         * literal.cs: Oops.  Not good, Emit of short access values should
510         pass (Bytes) or the wrong argument will be selected.
511
512         * expression.cs (Unary::Emit): Emit code for -expr.
513         
514         (Unary::ResolveOperator): Handle `Substract' for non-constants
515         (substract from zero from the non-constants).
516         Deal with Doubles as well. 
517         
518         (Expression::ConvertImplicitRequired): New routine that reports an
519         error if no implicit conversion exists. 
520
521         (Invocation::OverloadResolve): Store the converted implicit
522         expressions if we make them
523         
524 2001-09-24  Ravi Pratap  <ravi@ximian.com>
525
526         * class.cs (ConstructorInitializer): Take a Location argument.
527         (ConstructorBaseInitializer): Same here.
528         (ConstructorThisInitializer): Same here.
529
530         * cs-parser.jay : Update all calls accordingly.
531
532         * expression.cs (Unary, Binary, New): Take location argument.
533         Update accordingly everywhere.
534
535         * cs-parser.jay : Update all calls to the above to take a location
536         argument.
537
538         * class.cs : Ditto.
539
540 2001-09-24  Ravi Pratap  <ravi@ximian.com>
541
542         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
543         (Invocation::BetterConversion): Same here
544         (Invocation::ConversionExists): Ditto.
545
546         (Invocation::ConversionExists): Implement.
547
548 2001-09-22  Ravi Pratap  <ravi@ximian.com>
549
550         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
551         Also take an additional TypeContainer argument.
552
553         * All over : Pass in TypeContainer as argument to OverloadResolve.
554
555         * typemanager.cs (CSharpName): Update to check for the string type and return
556         that too.
557
558         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
559         a given method.
560         
561 2001-09-21  Ravi Pratap  <ravi@ximian.com>
562
563         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
564         (Invocation::BetterFunction): Implement.
565         (Invocation::BetterConversion): Implement.
566         (Invocation::ConversionExists): Skeleton, no implementation yet.
567
568         Okay, things work fine !
569
570 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
571
572         * typemanager.cs: declare and load enum_type, delegate_type and
573         void_type. 
574
575         * expression.cs (Expression::Emit): Now emit returns a value that
576         tells whether a value is left on the stack or not.  This strategy
577         might be reveted tomorrow with a mechanism that would address
578         multiple assignments.
579         (Expression::report118): Utility routine to report mismatches on
580         the ExprClass.
581
582         (Unary::Report23): Report impossible type/operator combination
583         utility function.
584
585         (Unary::IsIncrementableNumber): Whether the type can be
586         incremented or decremented with add.
587         (Unary::ResolveOperator): Also allow enumerations to be bitwise
588         complemented. 
589         (Unary::ResolveOperator): Implement ++, !, ~, ++ and --.
590
591         (Invocation::Emit): Deal with new Emit convetion.
592         
593         * All Expression derivatives: Updated their Emit method to return
594         whether they leave values on the stack or not.
595         
596         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
597         stack for expressions that are statements. 
598
599 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
600
601         * expression.cs (LValue): New interface.  Must be implemented by
602         LValue objects.
603         (LocalVariableReference, ParameterReference, FieldExpr): Implement
604         LValue interface.
605         
606         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
607         interface for generating code, simplifies the code.
608
609 2001-09-20  Ravi Pratap  <ravi@ximian.com>
610
611         * expression.cs (everywhere): Comment out return statements in ::Resolve
612         methods to avoid the warnings.
613
614 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
615
616         * driver.cs (parse): Report error 2001 if we can not open the
617         source file.
618
619         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
620         not resolve it.
621
622         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
623         object. 
624
625         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
626         otherwise nested blocks end up with the same index.
627
628         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
629
630         * expression.cs:  Instead of having FIXMEs in the Resolve
631         functions, throw exceptions so it is obvious that we are facing a
632         bug. 
633
634         * cs-parser.jay (invocation_expression): Pass Location information.
635
636         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
637         Use a basename for those routines because .NET does not like paths
638         on them. 
639
640         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
641         already defined.
642
643 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
644
645         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
646         are loading the correct data types (throws an exception if not).
647         (TypeManager::InitCoreTypes): Use CoreLookupType
648
649         * expression.cs (Unary::ResolveOperator): return the child
650         expression for expressions which are just +expr.
651         (Unary::ResolveOperator): Return negative literals for -LITERAL
652         expressions (otherwise they are Unary {Literal}).
653         (Invocation::Badness): Take into account `Implicit constant
654         expression conversions'.
655
656         * literal.cs (LongLiteral): Implement long literal class.
657         (IntLiteral): export the `Value' of the intliteral. 
658
659 2001-09-19  Ravi Pratap  <ravi@ximian.com>
660
661         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
662
663         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
664         instead of 'Operator'
665
666         * expression.cs (Binary::ResolveOperator): Update accordingly.
667         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
668         and 'Minus'
669
670         * cs-parser.jay (unary_expression): Update to use the new names.
671
672         * gen-treedump.cs (GetUnary): Same here.
673
674         * expression.cs (Unary::Resolve): Implement.
675         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
676         operators are found instead of making noise ;-)
677         (Unary::ResolveOperator): New method to do precisely the same thing which
678         Binary::ResolveOperator does for Binary expressions.
679         (Unary.method, .Arguments): Add.
680         (Unary::OperName): Implement.   
681         (Unary::ForceConversion): Copy and Paste !
682
683         * class.cs (Operator::Define): Fix a small bug for the case when we have 
684         a unary operator.
685
686         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
687         for the inbuilt operators. Only overloading works for now ;-)
688
689 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
690
691         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
692         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
693
694         * expression.cs (This::Emit): Implement. 
695         (This::Resolve): Implement.
696         (TypeOf:Resolve): Implement.
697         (Expression::ResolveSimpleName): Add an implicit this to instance
698         field references. 
699         (MemberAccess::Resolve): Deal with Parameters and Fields. 
700         Bind instance variable to Field expressions.
701         (FieldExpr::Instance): New field used to track the expression that
702         represents the object instance.
703         (FieldExpr::Resolve): Track potential errors from MemberLookup not
704         binding 
705         (FieldExpr::Emit): Implement.
706
707         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
708         the last instruction contains a return opcode to avoid generating
709         the last `ret' instruction (this generates correct code, and it is
710         nice to pass the peverify output).
711
712         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
713         initializer for static and instance variables.
714         (Constructor::Emit): Allow initializer to be null in the case of
715         static constructors.  Only emit initializer for instance
716         constructors. 
717
718         (TypeContainer::FindMembers): Return a null array if there are no
719         matches.
720
721         Also fix the code for the MemberTypes.Method branch, as it was not
722         scanning that for operators (or tried to access null variables before).
723
724         * assign.cs (Assign::Emit): Handle instance and static fields. 
725
726         * TODO: Updated.
727
728         * driver.cs: Stop compilation if there are parse errors.
729
730         * cs-parser.jay (constructor_declaration): Provide default base
731         initializer for non-static constructors.
732         (constructor_declarator): Do not provide a default base
733         initializers if none was specified.
734         Catch the fact that constructors should not have parameters.
735
736         * class.cs: Do not emit parent class initializers for static
737         constructors, that should be flagged as an error.
738
739 2001-09-18  Ravi Pratap  <ravi@ximian.com>
740
741         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
742         Move back code into TypeContainer::Populate.
743
744 2001-09-18  Ravi Pratap  <ravi@ximian.com>
745
746         * class.cs (TypeContainer::AddConstructor): Fix the check to
747         compare against Name, not Basename. 
748         (Operator::OpType): Change Plus and Minus to Add and Subtract.
749
750         * cs-parser.jay : Update accordingly.
751
752         * class.cs (TypeContainer::FindMembers): For the case where we are searching
753         for methods, don't forget to look into the operators too.
754         (RegisterMethodBuilder): Helper method to take care of this for
755         methods, constructors and operators.
756         (Operator::Define): Completely revamp.
757         (Operator.OperatorMethod, MethodName): New fields.
758         (TypeContainer::Populate): Move the registering of builders into
759         RegisterMethodBuilder.
760         (Operator::Emit): Re-write.
761
762         * expression.cs (Binary::Emit): Comment out code path to emit method
763         invocation stuff for the case when we have a user defined operator. I am
764         just not able to get it right !
765         
766 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
767
768         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
769         argument. 
770
771         (Expression::MemberLookup): Provide a version that allows to
772         specify the MemberTypes and BindingFlags. 
773
774         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
775         so it was not fetching variable information from outer blocks.
776
777         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
778         Beforefieldinit as it was buggy.
779
780         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
781         that Ravi put here.  
782
783         * class.cs (Constructor::Emit): Only emit if block is not null.
784         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
785         deal with this by semantically definining it as if the user had
786         done it.
787
788         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
789         constructors as we now "emit" them at a higher level.
790
791         (TypeContainer::DefineDefaultConstructor): Used to define the
792         default constructors if none was provided.
793
794         (ConstructorInitializer): Add methods Resolve and Emit. 
795         
796         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
797
798 2001-09-17  Ravi Pratap  <ravi@ximian.com>
799
800         * class.cs (TypeContainer::EmitDefaultConstructor): Register
801         the default constructor builder with our hashtable for methodbuilders
802         to methodcores.
803
804         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
805         and argument_count is 0 in which case we have a match.
806         (Binary::ResolveOperator): More null checking and miscellaneous coding
807         style cleanup.
808
809 2001-09-17  Ravi Pratap  <ravi@ximian.com>
810
811         * rootcontext.cs (IsNameSpace): Compare against null.
812
813         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
814
815         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
816         and Unary::Operator.
817
818         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
819         accordingly.
820
821         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
822         we have overloaded operators.
823         (Binary::ResolveOperator): Implement the part which does the operator overload
824         resolution.
825
826         * class.cs (Operator::Emit): Implement.
827         (TypeContainer::Emit): Emit the operators we have too.
828
829         * expression.cs (Binary::Emit): Update to emit the appropriate code for
830         the case when we have a user-defined operator.
831         
832 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
833
834         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
835
836 2001-09-16  Ravi Pratap  <ravi@ximian.com>
837
838         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
839         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
840         (Constructor::Emit): Implement.
841         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
842         if we have no work to do. 
843         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
844         Emit method.
845
846         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
847         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
848
849         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
850         of parent.parent.
851
852 2001-09-15  Ravi Pratap  <ravi@ximian.com>
853
854         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
855         in the source.
856         (Tree::RecordNamespace): Method to do what the name says ;-)
857         (Tree::Namespaces): Property to get at the namespaces hashtable.
858
859         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
860         keep track.
861
862         * rootcontext.cs (IsNamespace): Fixed it :-)
863
864 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
865
866         * class.cs (TypeContainer::FindMembers): Add support for
867         constructors. 
868         (MethodCore): New class that encapsulates both the shared aspects
869         of a Constructor and a Method.  
870         (Method, Constructor): Factored pieces into MethodCore.
871
872         * driver.cs: Added --fatal which makes errors throw exceptions.
873         Load System assembly as well as part of the standard library.
874
875         * report.cs: Allow throwing exceptions on errors for debugging.
876
877         * modifiers.cs: Do not use `parent', instead use the real type
878         container to evaluate permission settings.
879
880         * class.cs: Put Ravi's patch back in.  He is right, and we will
881         have to cope with the
882
883 2001-09-14  Ravi Pratap  <ravi@ximian.com>
884
885         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
886         FamORAssem, not FamANDAssem.
887         
888 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
889
890         * driver.cs: Added --parse option that only parses its input files
891         and terminates.
892
893         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
894         incorrect.  IsTopLevel is not used to tell whether an object is
895         root_types or not (that can be achieved by testing this ==
896         root_types).  But to see if this is a top-level *class* (not
897         necessarly our "toplevel" container). 
898
899 2001-09-14  Ravi Pratap  <ravi@ximian.com>
900
901         * enum.cs (Enum::Define): Modify to call the Lookup method on the
902         parent instead of a direct call to GetType.
903
904 2001-09-14  Ravi Pratap  <ravi@ximian.com>
905
906         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
907         Modifiers.TypeAttr. This should just be a call to that method.
908
909         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
910         object so that we can determine if we are top-level or not.
911
912         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
913         TypeContainer too.
914
915         * enum.cs (Enum::Define): Ditto.
916
917         * modifiers.cs (FieldAttr): Re-write.
918
919         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
920         (TypeContainer::HaveStaticConstructor): New property to provide access
921         to precisely that info.
922
923         * modifiers.cs (MethodAttr): Re-write.
924         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
925
926         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
927         of top-level types as claimed.
928         
929 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
930
931         * expression.cs (MemberLookup): Fruitless attempt to lookup
932         constructors.  Maybe I need to emit default constructors?  That
933         might be it (currently .NET emits this for me automatically).
934         (Invocation::OverloadResolve): Cope with Arguments == null.
935         (Invocation::EmitArguments): new function, shared by the new
936         constructor and us.
937         (Invocation::Emit): Handle static and instance methods.  Emit
938         proper call instruction for virtual or non-virtual invocations.
939         (New::Emit): Implement.
940         (New::Resolve): Implement.
941         (MemberAccess:Resolve): Implement.
942         (MethodGroupExpr::InstanceExpression): used conforming to the spec
943         to track instances.
944         (FieldExpr::Resolve): Set type.
945
946         * support.cs: Handle empty arguments.
947                 
948         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
949         SimpleLookup): Auxiliary routines to help parse a qualifier
950         identifier.  
951
952         Update qualifier_identifier rule.
953
954         * codegen.cs: Removed debugging messages.
955
956         * class.cs: Make this a global thing, this acts just as a "key" to
957         objects that we might have around.
958
959         (Populate): Only initialize method_builders_to_methods once.
960
961         * expression.cs (PropertyExpr): Initialize type from the
962         PropertyType. 
963
964         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
965         Resolve pattern.  Attempt to implicitly convert value to boolean.
966         Emit code.
967
968         * expression.cs: Set the type for the int32/int32 argument case.
969         (Binary::ResolveOperator): Set the return type to boolean for
970         comparission operators
971
972         * typemanager.cs: Remove debugging print code.
973
974         (Invocation::Resolve): resolve type.
975
976         * class.cs: Allocate a MemberInfo of the correct size, as the code
977         elsewhere depends on the test to reflect the correct contents.
978
979         (Method::) Keep track of parameters, due to System.Reflection holes
980
981         (TypeContainer::Populate): Keep track of MethodBuilders to Method
982         mapping here.
983
984         (TypeContainer::FindMembers): Use ArrayList and then copy an array
985         of the exact size and return that.
986
987         (Class::LookupMethodByBuilder): New function that maps
988         MethodBuilders to its methods.  Required to locate the information
989         on methods because System.Reflection bit us again.
990
991         * support.cs: New file, contains an interface ParameterData and
992         two implementations: ReflectionParameters and InternalParameters
993         used to access Parameter information.  We will need to grow this
994         as required.
995
996         * expression.cs (Invocation::GetParameterData): implement a cache
997         and a wrapper around the ParameterData creation for methods. 
998         (Invocation::OverloadResolve): Use new code.
999
1000 2001-09-13  Ravi Pratap  <ravi@ximian.com>
1001
1002         * class.cs (TypeContainer::EmitField): Remove and move into 
1003         (Field::Define): here and modify accordingly.
1004         (Field.FieldBuilder): New member.
1005         (TypeContainer::Populate): Update accordingly.
1006         (TypeContainer::FindMembers): Implement.
1007
1008 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
1009
1010         * statement.cs: (VariableInfo::VariableType): New field to be
1011         initialized with the full type once it is resolved. 
1012
1013 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
1014
1015         * parameter.cs (GetParameterInfo): Use a type cache to compute
1016         things only once, and to reuse this information
1017
1018         * expression.cs (LocalVariableReference::Emit): Implement.
1019         (OpcodeCast::Emit): fix.
1020
1021         (ParameterReference::Resolve): Implement.
1022         (ParameterReference::Emit): Implement.
1023
1024         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
1025         that are expressions need to stay as Expressions.
1026
1027         * typemanager.cs (CSharpName): Returns the C# name of a type if
1028         possible. 
1029
1030         * expression.cs (Expression::ConvertImplicit): New function that
1031         implements implicit type conversions.
1032
1033         (Expression::ImplicitReferenceConversion): Implements implicit
1034         reference conversions.
1035
1036         (EmptyCast): New type for transparent casts.
1037
1038         (OpcodeCast): New type for casts of types that are performed with
1039         a sequence of bytecodes.
1040         
1041         (BoxedCast): New type used for casting value types into reference
1042         types.  Emits a box opcode.
1043
1044         (Binary::DoNumericPromotions): Implements numeric promotions of
1045         and computation of the Binary::Type.
1046
1047         (Binary::EmitBranchable): Optimization.
1048
1049         (Binary::Emit): Implement code emission for expressions.
1050         
1051         * typemanager.cs (TypeManager): Added two new core types: sbyte
1052         and byte.
1053
1054 2001-09-12  Ravi Pratap  <ravi@ximian.com>
1055
1056         * class.cs (TypeContainer::FindMembers): Method which does exactly
1057         what Type.FindMembers does, only we don't have to use reflection. No
1058         implementation yet.
1059
1060         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
1061         typecontainer objects as we need to get at them.
1062         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
1063
1064         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
1065         typecontainer object.
1066
1067         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
1068         of just a Report object.
1069
1070 2001-09-11  Ravi Pratap  <ravi@ximian.com>
1071
1072         * class.cs (Event::Define): Go back to using the prefixes "add_" and
1073         "remove_"
1074         (TypeContainer::Populate): Now define the delegates of the type too.
1075         (TypeContainer.Delegates): Property to access the list of delegates defined
1076         in the type.
1077
1078         * delegates.cs (Delegate::Define): Implement partially.
1079
1080         * modifiers.cs (TypeAttr): Handle more flags.
1081
1082 2001-09-11  Ravi Pratap  <ravi@ximian.com>
1083
1084         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
1085         and not <=
1086         (Operator::Define): Re-write logic to get types by using the LookupType method
1087         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
1088         (Indexer::Define): Ditto.
1089         (Event::Define): Ditto.
1090         (Property::Define): Ditto.
1091         
1092 2001-09-10  Ravi Pratap  <ravi@ximian.com>
1093
1094         * class.cs (TypeContainer::Populate): Now define operators too. 
1095         (TypeContainer.Operators): New property to access the list of operators
1096         in a type.
1097         (Operator.OperatorMethodBuilder): New member to hold the method builder
1098         for the operator we are defining.
1099         (Operator::Define): Implement.
1100
1101 2001-09-10  Ravi Pratap  <ravi@ximian.com>
1102
1103         * class.cs (Event::Define): Make the prefixes of the accessor methods
1104         addOn_ and removeOn_ 
1105
1106         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
1107         of the location being passed in too. Ideally, this should go later since all
1108         error reporting should be done through the Report object.
1109
1110         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
1111         (Populate): Iterate thru the indexers we have and define them too.
1112         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
1113         for the get and set accessors.
1114         (Indexer::Define): Implement.
1115         
1116 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
1117
1118         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
1119         my previous implementation, did not work.
1120
1121         * typemanager.cs: Add a couple of missing types (the longs).
1122
1123         * literal.cs: Use TypeManager.bool_type instead of getting it.
1124
1125         * expression.cs (EventExpr): New kind of expressions.
1126         (Expressio::ExprClassFromMemberInfo): finish
1127
1128 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
1129
1130         * assign.cs: Emit stores to static fields differently.
1131
1132 2001-09-08  Ravi Pratap  <ravi@ximian.com>
1133
1134         * Merge in changes and adjust code to tackle conflicts. Backed out my
1135         code in Assign::Resolve ;-) 
1136
1137 2001-09-08  Ravi Pratap  <ravi@ximian.com>
1138
1139         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
1140         instead Report.Error and also pass in the location.
1141         (CSharpParser::Lexer): New readonly property to return the reference
1142         to the Tokenizer object.
1143         (declare_local_variables): Use Report.Error with location instead of plain 
1144         old error.
1145         (CheckDef): Ditto.
1146
1147         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
1148         (Operator.CheckBinaryOperator): Ditto.
1149
1150         * cs-parser.jay (operator_declarator): Update accordingly.
1151
1152         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
1153         (CheckBinaryOperator): Same here.
1154
1155         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
1156         on the name without any prefixes of namespace names etc. This is because we
1157         already might have something already fully qualified like 
1158         'System.Console.WriteLine'
1159
1160         * assign.cs (Resolve): Begin implementation. Stuck ;-)
1161
1162 2001-09-07  Ravi Pratap  <ravi@ximian.com>
1163
1164         * cs-tokenizer.cs (location): Return a string which also contains
1165         the file name.
1166
1167         * expression.cs (ElementAccess): New class for expressions of the
1168         type 'element access.'
1169         (BaseAccess): New class for expressions of the type 'base access.'
1170         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
1171         respectively.
1172         
1173         * cs-parser.jay (element_access): Implement action.
1174         (base_access): Implement actions.
1175         (checked_expression, unchecked_expression): Implement.
1176
1177         * cs-parser.jay (local_variable_type): Correct and implement.
1178         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
1179
1180         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
1181
1182         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
1183         name and the specifiers.
1184
1185         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
1186         
1187         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
1188         making them all public ;-)
1189
1190         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
1191         class anyways.
1192         
1193 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
1194
1195         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
1196         PropertyExprs.
1197         (FieldExpr, PropertyExprs): New resolved expressions.
1198         (SimpleName::MemberStaticCheck): Perform static checks for access
1199         to non-static fields on static methods. Maybe this should be
1200         generalized for MemberAccesses. 
1201         (SimpleName::ResolveSimpleName): More work on simple name
1202         resolution. 
1203
1204         * cs-parser.jay (primary_expression/qualified_identifier): track
1205         the parameter index.
1206
1207         * codegen.cs (CodeGen::Save): Catch save exception, report error.
1208         (EmitContext::EmitBoolExpression): Chain to expression generation
1209         instead of temporary hack.
1210         (::EmitStatementExpression): Put generic expression code generation.
1211
1212         * assign.cs (Assign::Emit): Implement variable assignments to
1213         local variables, parameters and fields.
1214
1215 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
1216
1217         * statement.cs (Block::GetVariableInfo): New method, returns the
1218         VariableInfo for a variable name in a block.
1219         (Block::GetVariableType): Implement in terms of GetVariableInfo
1220
1221         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
1222         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
1223
1224 2001-09-06  Ravi Pratap  <ravi@ximian.com>
1225
1226         * cs-parser.jay (operator_declaration): Continue on my quest : update
1227         to take attributes argument.
1228         (event_declaration): Ditto.
1229         (enum_declaration): Ditto.
1230         (indexer_declaration): Ditto.
1231         
1232         * class.cs (Operator::Operator): Update constructor accordingly.
1233         (Event::Event): Ditto.
1234
1235         * delegate.cs (Delegate::Delegate): Same here.
1236
1237         * enum.cs (Enum::Enum): Same here.
1238         
1239 2001-09-05  Ravi Pratap  <ravi@ximian.com>
1240
1241         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
1242
1243         * ../tests/cs0658.cs : New file to demonstrate error 0658.
1244
1245         * attribute.cs (Attributes): New class to encapsulate all attributes which were
1246         being passed around as an arraylist.
1247         (Attributes::AddAttribute): Method to add attribute sections.
1248
1249         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
1250         (struct_declaration): Update accordingly.
1251         (constant_declaration): Update.
1252         (field_declaration): Update.
1253         (method_header): Update.
1254         (fixed_parameter): Update.
1255         (parameter_array): Ditto.
1256         (property_declaration): Ditto.
1257         (destructor_declaration): Ditto.
1258         
1259         * class.cs (Struct::Struct): Update constructors accordingly.
1260         (Class::Class): Ditto.
1261         (Field::Field): Ditto.
1262         (Method::Method): Ditto.
1263         (Property::Property): Ditto.
1264         (TypeContainer::OptAttribute): update property's return type.
1265         
1266         * interface.cs (Interface.opt_attributes): New member.
1267         (Interface::Interface): Update to take the extra Attributes argument.
1268
1269         * parameter.cs (Parameter::Parameter): Ditto.
1270
1271         * constant.cs (Constant::Constant): Ditto.
1272
1273         * interface.cs (InterfaceMemberBase): New OptAttributes field.
1274         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
1275         the attributes as a parameter.
1276         (InterfaceProperty): Update constructor call.
1277         (InterfaceEvent): Ditto.
1278         (InterfaceMethod): Ditto.
1279         (InterfaceIndexer): Ditto.
1280
1281         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
1282         pass the attributes too.
1283         (interface_event_declaration): Ditto.
1284         (interface_property_declaration): Ditto.
1285         (interface_method_declaration): Ditto.
1286         (interface_declaration): Ditto.
1287
1288 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
1289
1290         * class.cs (Method::Define): Track the "static Main" definition to
1291         create an entry point. 
1292
1293         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
1294         EntryPoint if we find it. 
1295
1296         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
1297         (EmitContext::ig): Make this variable public.
1298
1299         * driver.cs: Make the default output file be the first file name
1300         with the .exe extension.  
1301
1302         Detect empty compilations
1303
1304         Handle various kinds of output targets.  Handle --target and
1305         rename -t to --dumper.
1306
1307         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
1308         methods inherited from Expression return now an Expression.  This
1309         will is used during the tree rewriting as we resolve them during
1310         semantic analysis.
1311
1312         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
1313         the spec.  Missing entirely is the information about
1314         accessability of elements of it.
1315
1316         (Expression::ExprClassFromMemberInfo): New constructor for
1317         Expressions that creates a fully initialized Expression based on
1318         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
1319         a Type.
1320
1321         (Invocation::Resolve): Begin implementing resolution of invocations.
1322         
1323         * literal.cs (StringLiteral):  Implement Emit.
1324
1325 2001-09-05  Ravi Pratap  <ravi@ximian.com>
1326
1327         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
1328         member.
1329         
1330 2001-09-04  Ravi Pratap  <ravi@ximian.com>
1331
1332         * cs-parser.jay (attribute_arguments): Implement actions.
1333         (attribute): Fix bug in production. Implement action.
1334         (attribute_list): Implement.
1335         (attribute_target): Implement.
1336         (attribute_target_specifier, opt_target_specifier): Implement
1337         (CheckAttributeTarget): New method to check if the attribute target
1338         is valid.
1339         (attribute_section): Implement.
1340         (opt_attributes): Implement.
1341
1342         * attribute.cs : New file to handle attributes.
1343         (Attribute): Class to hold attribute info.
1344
1345         * cs-parser.jay (opt_attribute_target_specifier): Remove production
1346         (attribute_section): Modify production to use 2 different rules to 
1347         achieve the same thing. 1 s/r conflict down !
1348         Clean out commented, useless, non-reducing dimension_separator rules.
1349         
1350         * class.cs (TypeContainer.attributes): New member to hold list
1351         of attributes for a type.
1352         (Struct::Struct): Modify to take one more argument, the attribute list.
1353         (Class::Class): Ditto.
1354         (Field::Field): Ditto.
1355         (Method::Method): Ditto.
1356         (Property::Property): Ditto.
1357         
1358         * cs-parser.jay (struct_declaration): Update constructor call to
1359         pass in the attributes too.
1360         (class_declaration): Ditto.
1361         (constant_declaration): Ditto.
1362         (field_declaration): Ditto.
1363         (method_header): Ditto.
1364         (fixed_parameter): Ditto.
1365         (parameter_array): Ditto.
1366         (property_declaration): Ditto.
1367
1368         * constant.cs (Constant::Constant): Update constructor similarly.
1369         Use System.Collections.
1370
1371         * parameter.cs (Parameter::Parameter): Update as above.
1372
1373 2001-09-02  Ravi Pratap  <ravi@ximian.com>
1374
1375         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
1376         (TypeContainer.delegates): New member to hold list of delegates.
1377
1378         * cs-parser.jay (delegate_declaration): Implement the action correctly 
1379         this time as I seem to be on crack ;-)
1380
1381 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
1382
1383         * rootcontext.cs (RootContext::IsNamespace): new function, used to
1384         tell whether an identifier represents a namespace.
1385
1386         * expression.cs (NamespaceExpr): A namespace expression, used only
1387         temporarly during expression resolution.
1388         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
1389         utility functions to resolve names on expressions.
1390
1391 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
1392
1393         * codegen.cs: Add hook for StatementExpressions. 
1394
1395         * class.cs: Fix inverted test for static flag in methods.
1396
1397 2001-09-02  Ravi Pratap  <ravi@ximian.com>
1398
1399         * class.cs (Operator::CheckUnaryOperator): Correct error number used
1400         to make it coincide with MS' number.
1401         (Operator::CheckBinaryOperator): Ditto.
1402
1403         * ../errors/errors.txt : Remove error numbers added earlier.
1404
1405         * ../errors/cs1019.cs : Test case for error # 1019
1406
1407         * ../errros/cs1020.cs : Test case for error # 1020
1408
1409         * cs-parser.jay : Clean out commented cruft.
1410         (dimension_separators, dimension_separator): Comment out. Ostensibly not
1411         used anywhere - non-reducing rule.
1412         (namespace_declarations): Non-reducing rule - comment out.
1413
1414         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
1415         with TypeContainer::AddEnum.
1416
1417         * delegate.cs : New file for delegate handling classes.
1418         (Delegate): Class for declaring delegates.
1419
1420         * makefile : Update.
1421
1422         * cs-parser.jay (delegate_declaration): Implement.
1423
1424 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
1425
1426         * class.cs (Event::Define): Implement.
1427         (Event.EventBuilder): New member.
1428
1429         * class.cs (TypeContainer::Populate): Update to define all enums and events
1430         we have.
1431         (Events): New property for the events arraylist we hold. Shouldn't we move to using
1432         readonly fields for all these cases ?
1433
1434 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
1435
1436         * class.cs (Property): Revamp to use the convention of making fields readonly.
1437         Accordingly modify code elsewhere.
1438
1439         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
1440         the Define method of the Property class.
1441
1442         * class.cs : Clean up applied patch and update references to variables etc. Fix 
1443         trivial bug.
1444         (TypeContainer::Populate): Update to define all the properties we have. Also
1445         define all enumerations.
1446
1447         * enum.cs (Define): Implement.
1448         
1449 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
1450
1451         * cs-parser.jay (overloadable_operator): The semantic value is an
1452         enum of the Operator class.
1453         (operator_declarator): Implement actions.
1454         (operator_declaration): Implement.
1455
1456         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
1457         validity of definitions.
1458         (Operator::CheckBinaryOperator): Static method to check for binary operators
1459         (TypeContainer::AddOperator): New method to add an operator to a type.
1460
1461         * cs-parser.jay (indexer_declaration): Added line to actually call the
1462         AddIndexer method so it gets added ;-)
1463
1464         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
1465         already taken care of by the MS compiler ?  
1466
1467 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
1468
1469         * class.cs (Operator): New class for operator declarations.
1470         (Operator::OpType): Enum for the various operators.
1471
1472 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
1473
1474         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
1475         ostensibly handle this in semantic analysis.
1476
1477         * cs-parser.jay (general_catch_clause): Comment out
1478         (specific_catch_clauses, specific_catch_clause): Ditto.
1479         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
1480         (catch_args, opt_catch_args): New productions.
1481         (catch_clause): Rewrite to use the new productions above
1482         (catch_clauses): Modify accordingly.
1483         (opt_catch_clauses): New production to use in try_statement
1484         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
1485         and re-write the code in the actions to extract the specific and
1486         general catch clauses by being a little smart ;-)
1487
1488         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
1489         Hooray, try and catch statements parse fine !
1490         
1491 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
1492
1493         * statement.cs (Block::GetVariableType): Fix logic to extract the type
1494         string from the hashtable of variables.
1495
1496         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
1497         I end up making that mistake ;-)
1498         (catch_clauses): Fixed gross error which made Key and Value of the 
1499         DictionaryEntry the same : $1 !!
1500
1501 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
1502
1503         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
1504
1505         * cs-parser.jay (event_declaration): Correct to remove the semicolon
1506         when the add and remove accessors are specified. 
1507
1508 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
1509
1510         * cs-parser.jay (IndexerDeclaration): New helper class to hold
1511         information about indexer_declarator.
1512         (indexer_declarator): Implement actions.
1513         (parsing_indexer): New local boolean used to keep track of whether
1514         we are parsing indexers or properties. This is necessary because 
1515         implicit_parameters come into picture even for the get accessor in the 
1516         case of an indexer.
1517         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
1518
1519         * class.cs (Indexer): New class for indexer declarations.
1520         (TypeContainer::AddIndexer): New method to add an indexer to a type.
1521         (TypeContainer::indexers): New member to hold list of indexers for the
1522         type.
1523
1524 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
1525
1526         * cs-parser.jay (add_accessor_declaration): Implement action.
1527         (remove_accessor_declaration): Implement action.
1528         (event_accessors_declaration): Implement
1529         (variable_declarators): swap statements for first rule - trivial.
1530
1531         * class.cs (Event): New class to hold information about event
1532         declarations.
1533         (TypeContainer::AddEvent): New method to add an event to a type
1534         (TypeContainer::events): New member to hold list of events.
1535
1536         * cs-parser.jay (event_declaration): Implement actions.
1537
1538 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
1539
1540         * cs-parser.jay (dim_separators): Implement. Make it a string
1541         concatenating all the commas together, just as they appear.
1542         (opt_dim_separators): Modify accordingly
1543         (rank_specifiers): Update accordingly. Basically do the same
1544         thing - instead, collect the brackets here.
1545         (opt_rank_sepcifiers): Modify accordingly.
1546         (array_type): Modify to actually return the complete type string
1547         instead of ignoring the rank_specifiers.
1548         (expression_list): Implement to collect the expressions
1549         (variable_initializer): Implement. We make it a list of expressions
1550         essentially so that we can handle the array_initializer case neatly too.
1551         (variable_initializer_list): Implement.
1552         (array_initializer): Make it a list of variable_initializers
1553         (opt_array_initializer): Modify accordingly.
1554
1555         * expression.cs (New::NType): Add enumeration to help us
1556         keep track of whether we have an object/delegate creation
1557         or an array creation.
1558         (New:NewType, New::Rank, New::Indices, New::Initializers): New
1559         members to hold data about array creation.
1560         (New:New): Modify to update NewType
1561         (New:New): New Overloaded contructor for the array creation
1562         case.
1563
1564         * cs-parser.jay (array_creation_expression): Implement to call
1565         the overloaded New constructor.
1566         
1567 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
1568
1569         * class.cs (TypeContainer::Constructors): Return member
1570         constructors instead of returning null.
1571
1572 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
1573
1574         * typemanager.cs (InitCoreTypes): Initialize the various core
1575         types after we have populated the type manager with the user
1576         defined types (this distinction will be important later while
1577         compiling corlib.dll)
1578
1579         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
1580         on Expression Classification.  Now all expressions have a method
1581         `Resolve' and a method `Emit'.
1582
1583         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
1584         generation from working.     Also add some temporary debugging
1585         code. 
1586         
1587 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
1588
1589         * codegen.cs: Lots of code generation pieces.  This is only the
1590         beginning, will continue tomorrow with more touches of polish.  We
1591         handle the fundamentals of if, while, do, for, return.  Others are
1592         trickier and I need to start working on invocations soon.
1593         
1594         * gen-treedump.cs: Bug fix, use s.Increment here instead of
1595         s.InitStatement. 
1596
1597         * codegen.cs (EmitContext): New struct, used during code
1598         emission to keep a context.   Most of the code generation will be
1599         here. 
1600
1601         * cs-parser.jay: Add embedded blocks to the list of statements of
1602         this block.  So code generation proceeds in a top down fashion.
1603
1604 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
1605
1606         * statement.cs: Add support for multiple child blocks.
1607
1608 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
1609
1610         * codegen.cs (EmitCode): New function, will emit the code for a
1611         Block of code given a TypeContainer and its ILGenerator. 
1612
1613         * statement.cs (Block): Standard public readonly optimization.
1614         (Block::Block constructors): Link children. 
1615         (Block::Child): Child Linker.
1616         (Block::EmitVariables): Emits IL variable declarations.
1617
1618         * class.cs: Drop support for MethodGroups here, delay until
1619         Semantic Analysis.
1620         (Method::): Applied the same simplification that I did before, and
1621         move from Properties to public readonly fields.
1622         (Method::ParameterTypes): Returns the parameter types for the
1623         function, and implements a cache that will be useful later when I
1624         do error checking and the semantic analysis on the methods is
1625         performed.
1626         (Constructor::GetCallingConvention): Renamed from CallingConvetion
1627         and made a method, optional argument tells whether this is a class
1628         or a structure to apply the `has-this' bit.
1629         (Method::GetCallingConvention): Implement, returns the calling
1630         convention. 
1631         (Method::Define): Defines the type, a second pass is performed
1632         later to populate the methods.
1633
1634         (Constructor::ParameterTypes): implement a cache similar to the
1635         one on Method::ParameterTypes, useful later when we do semantic
1636         analysis. 
1637
1638         (TypeContainer::EmitMethod):  New method.  Emits methods.
1639
1640         * expression.cs: Removed MethodGroup class from here.
1641         
1642         * parameter.cs (Parameters::GetCallingConvention): new method.
1643
1644 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
1645
1646         * class.cs (TypeContainer::Populate): Drop RootContext from the
1647         argument. 
1648
1649         (Constructor::CallingConvention): Returns the calling convention.
1650         (Constructor::ParameterTypes): Returns the constructor parameter
1651         types. 
1652         
1653         (TypeContainer::AddConstructor): Keep track of default constructor
1654         and the default static constructor.
1655
1656         (Constructor::) Another class that starts using `public readonly'
1657         instead of properties. 
1658
1659         (Constructor::IsDefault): Whether this is a default constructor. 
1660
1661         (Field::) use readonly public fields instead of properties also.
1662
1663         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
1664         track of static constructors;  If none is used, turn on
1665         BeforeFieldInit in the TypeAttributes. 
1666
1667         * cs-parser.jay (opt_argument_list): now the return can be null
1668         for the cases where there are no arguments. 
1669
1670         (constructor_declarator): If there is no implicit `base' or
1671         `this', then invoke the default parent constructor. 
1672         
1673         * modifiers.cs (MethodAttr): New static function maps a set of
1674         modifiers flags into a MethodAttributes enum
1675         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
1676         MethodAttr, TypeAttr to represent the various mappings where the
1677         modifiers are used.
1678         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
1679
1680 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
1681
1682         * parameter.cs (GetParameterInfo): Fix bug where there would be no
1683         method arguments.
1684
1685         * interface.cs (PopulateIndexer): Implemented the code generator
1686         for interface indexers.
1687
1688 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
1689
1690         * interface.cs (InterfaceMemberBase): Now we track the new status
1691         here.  
1692
1693         (PopulateProperty): Implement property population.  Woohoo!  Got
1694         Methods and Properties going today. 
1695
1696         Removed all the properties for interfaces, and replaced them with
1697         `public readonly' fields. 
1698
1699 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
1700
1701         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
1702         initialize their hashtables/arraylists only when they are needed
1703         instead of doing this always.
1704
1705         * parameter.cs: Handle refs and out parameters.
1706
1707         * cs-parser.jay: Use an ArrayList to construct the arguments
1708         instead of the ParameterCollection, and then cast that to a
1709         Parameter[] array.
1710
1711         * parameter.cs: Drop the use of ParameterCollection and use
1712         instead arrays of Parameters.
1713
1714         (GetParameterInfo): Use the Type, not the Name when resolving
1715         types. 
1716
1717 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
1718
1719         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
1720         and instead use public readonly fields.
1721
1722         * class.cs: Put back walking code for type containers.
1723
1724 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
1725
1726         * class.cs (MakeConstant): Code to define constants.
1727
1728         * rootcontext.cs (LookupType): New function.  Used to locate types 
1729
1730         
1731 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
1732
1733         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
1734         this System.Reflection code is.  Kudos to Microsoft
1735         
1736         * typemanager.cs: Implement a type cache and avoid loading all
1737         types at boot time.  Wrap in LookupType the internals.  This made
1738         the compiler so much faster.  Wow.  I rule!
1739         
1740         * driver.cs: Make sure we always load mscorlib first (for
1741         debugging purposes, nothing really important).
1742
1743         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
1744         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
1745
1746         * rootcontext.cs: Lookup types on their namespace;  Lookup types
1747         on namespaces that have been imported using the `using' keyword.
1748
1749         * class.cs (TypeContainer::TypeAttr): Virtualize.
1750         (Class::TypeAttr): Return attributes suitable for this bad boy.
1751         (Struct::TypeAttr): ditto.
1752         Handle nested classes.
1753         (TypeContainer::) Remove all the type visiting code, it is now
1754         replaced with the rootcontext.cs code
1755
1756         * rootcontext.cs (GetClassBases): Added support for structs. 
1757
1758 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
1759
1760         * interface.cs, statement.cs, class.cs, parameter.cs,
1761         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
1762         Drop use of TypeRefs, and use strings instead.
1763
1764 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
1765
1766         * rootcontext.cs: 
1767
1768         * class.cs (Struct::Struct): set the SEALED flags after
1769         checking the modifiers.
1770         (TypeContainer::TypeAttr): new property, returns the
1771         TypeAttributes for a class.  
1772
1773         * cs-parser.jay (type_list): Oops, list production was creating a
1774         new list of base types.
1775
1776         * rootcontext.cs (StdLib): New property.
1777         (GetInterfaceTypeByName): returns an interface by type name, and
1778         encapsulates error handling here.
1779         (GetInterfaces): simplified.
1780         (ResolveTree): Encapsulated all the tree resolution here.
1781         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
1782         types. 
1783         
1784         * driver.cs: Add support for --nostdlib, to avoid loading the
1785         default assemblies.
1786         (Main): Do not put tree resolution here. 
1787
1788         * rootcontext.cs: Beginning of the class resolution.
1789
1790 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
1791
1792         * rootcontext.cs: Provide better error reporting. 
1793
1794         * cs-parser.jay (interface_base): set our $$ to be interfaces.
1795
1796         * rootcontext.cs (CreateInterface): Handle the case where there
1797         are no parent interfaces.
1798         
1799         (CloseTypes): Routine to flush types at the end.
1800         (CreateInterface): Track types.
1801         (GetInterfaces): Returns an array of Types from the list of
1802         defined interfaces.
1803
1804         * typemanager.c (AddUserType): Mechanism to track user types (puts
1805         the type on the global type hash, and allows us to close it at the
1806         end). 
1807         
1808 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
1809
1810         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
1811         RecordInterface instead.
1812
1813         * cs-parser.jay: Updated to reflect changes above.
1814
1815         * decl.cs (Definition): Keep track of the TypeBuilder type that
1816         represents this type here.  Not sure we will use it in the long
1817         run, but wont hurt for now.
1818
1819         * driver.cs: Smaller changes to accomodate the new code.
1820
1821         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
1822         when done. 
1823
1824         * rootcontext.cs (CreateInterface):  New method, used to create
1825         the System.TypeBuilder type for interfaces.
1826         (ResolveInterfaces): new entry point to resolve the interface
1827         hierarchy. 
1828         (CodeGen): Property, used to keep track of the code generator.
1829
1830 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
1831
1832         * cs-parser.jay: Add a second production for delegate_declaration
1833         with `VOID'.
1834
1835         (enum_body): Put an opt_comma here instead of putting it on
1836         enum_body or enum_member_declarations so we can handle trailing
1837         commas on enumeration members.  Gets rid of a shift/reduce.
1838         
1839         (type_list): Need a COMMA in the middle.
1840
1841         (indexer_declaration): Tell tokenizer to recognize get/set
1842
1843         * Remove old targets.
1844
1845         * Re-add the parser target.
1846
1847 2001-07-13  Simon Cozens <simon@simon-cozens.org>
1848
1849         * cs-parser.jay: Add precendence rules for a number of operators
1850         ot reduce the number of shift/reduce conflicts in the grammar.
1851         
1852 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
1853
1854         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
1855         and put it here.
1856
1857         Get rid of old crufty code.
1858
1859         * rootcontext.cs: Use this to keep track of the parsed
1860         representation and the defined types available to the program. 
1861
1862         * gen-treedump.cs: adjust for new convention.
1863
1864         * type.cs: Split out the type manager, and the assembly builder
1865         from here. 
1866
1867         * typemanager.cs: the type manager will live here now.
1868
1869         * cil-codegen.cs: And the code generator here. 
1870
1871 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
1872
1873         * makefile: Fixed up for easy making.
1874
1875 2001-07-13  Simon Cozens <simon@simon-cozens.org>
1876
1877         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
1878         the 
1879
1880         (unary_expression): Expand pre_increment_expression and
1881         post_decrement_expression to reduce a shift/reduce.
1882
1883 2001-07-11  Simon Cozens
1884
1885         * cs-tokenizer.cs: Hex numbers should begin with a 0.
1886
1887         Improve allow_keyword_as_indent name.
1888
1889 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
1890
1891         * Adjustments for Beta2. 
1892
1893 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
1894
1895         * decl.cs: Added `Define' abstract method.
1896         (InTransit): new property, used to catch recursive definitions. 
1897
1898         * interface.cs: Implement `Define'. 
1899
1900         * modifiers.cs: Map Modifiers.constants to
1901         System.Reflection.TypeAttribute flags.
1902
1903         * class.cs: Keep track of types and user-defined types.
1904         (BuilderInit): New method for creating an assembly
1905         (ResolveType): New function to launch the resolution process, only
1906         used by interfaces for now.
1907
1908         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
1909         that are inserted into the name space. 
1910
1911 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
1912
1913         * ARGH.  I have screwed up my tree so many times due to the use of
1914         rsync rather than using CVS.  Going to fix this at once. 
1915
1916         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
1917         load types.
1918
1919 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
1920
1921         * Experiment successful: Use System.Type rather that our own
1922         version of Type.  
1923
1924 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
1925
1926         * cs-parser.jay: Removed nsAliases from here.
1927
1928         Use new namespaces, handle `using XXX;' 
1929
1930         * namespace.cs: Reimplemented namespace handling, use a recursive
1931         definition of the class.  Now we can keep track of using clauses
1932         and catch invalid using clauses.
1933
1934 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
1935
1936         * gen-treedump.cs: Adapted for all the renaming.
1937
1938         * expression.cs (Expression): this class now has a Type property
1939         which returns an expression Type.
1940
1941         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
1942         `Type', as this has a different meaning now in the base
1943
1944 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
1945
1946         * interface.cs, class.cs: Removed from all the sources the
1947         references to signature computation, as we can not do method
1948         signature computation during the parsing time, as we are not
1949         trying to solve at that point distinguishing:
1950
1951         class X {
1952                 void a (Blah x) {}
1953                 void a (NS.Blah x) {}
1954         }
1955
1956         Which depending on the context might be valid or not, as we do not
1957         know if Blah is the same thing as NS.Blah at that point.
1958
1959         * Redid everything so the code uses TypeRefs now instead of
1960         Types.  TypeRefs are just temporary type placeholders, that need
1961         to be resolved.  They initially have a pointer to a string and the
1962         current scope in which they are used.  This is used later by the
1963         compiler to resolve the reference to an actual Type. 
1964
1965         * DeclSpace is no longer a CIR.Type, and neither are
1966         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
1967         are all DeclSpaces, but no Types. 
1968
1969         * type.cs (TypeRefManager): This implements the TypeRef manager,
1970         which keeps track of all the types that need to be resolved after
1971         the parsing has finished. 
1972
1973 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
1974
1975         * ARGH.  We are going to have to store `foreach' as a class rather
1976         than resolving it, as we need to verify error 1579 after name
1977         resolution.   *OR* we could keep a flag that says `This request to
1978         IEnumerator comes from a foreach statement' which we can then use
1979         to generate the error.
1980
1981 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
1982
1983         * class.cs (TypeContainer.AddMethod): we now add methods to the
1984         MethodGroup instead of the method hashtable.  
1985
1986         * expression.cs: Add MethodGroup abstraction, which gets us one
1987         step closer to the specification in the way we handle method
1988         declarations.  
1989
1990         * cs-parser.jay (primary_expression): qualified_identifier now
1991         tried to match up an identifier to a local variable reference or
1992         to a parameter reference.
1993
1994         current_local_parameters is now a parser global variable that
1995         points to the current parameters for the block, used during name
1996         lookup.
1997
1998         (property_declaration): Now creates an implicit `value' argument to
1999         the set accessor.
2000
2001 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
2002
2003         * parameter.cs: Do not use `param' arguments as part of the
2004         signature, per the spec.
2005
2006 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
2007
2008         * decl.cs: Base class for classes, structs and interfaces.  This
2009         is the "Declaration Space" 
2010
2011         * cs-parser.jay: Use CheckDef for checking declaration errors
2012         instead of having one on each function.
2013
2014         * class.cs: Factor out some code for handling error handling in
2015         accordance to the "Declarations" section in the "Basic Concepts"
2016         chapter in the ECMA C# spec.
2017
2018         * interface.cs: Make all interface member classes derive from
2019         InterfaceMemberBase.
2020
2021 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
2022
2023         * Many things: all interfaces are parsed and generated in
2024         gen-treedump.  Support for member variables, constructors,
2025         destructors, properties, constants is there.
2026
2027         Beginning of the IL backend, but very little done, just there for
2028         testing purposes. 
2029
2030 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
2031
2032         * cs-parser.jay: Fix labeled statement.
2033
2034         * cs-tokenizer.cs (escape): Escape " and ' always.
2035         ref_line, ref_name: keep track of the line/filename as instructed
2036         by #line by the compiler.
2037         Parse #line.
2038
2039 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
2040
2041         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
2042         to match the values in System.CodeDOM.
2043
2044         Divid renamed to Divide.
2045
2046         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
2047         statements. 
2048         (Statements.set): remove.
2049
2050         * System.CodeDOM/CodeCatchClause.cs: always have a valid
2051         statements. 
2052
2053         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
2054         falseStatements always have valid values. 
2055
2056         * cs-parser.jay: Use System.CodeDOM now.
2057