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