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