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