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