f94d38f675c4ca99b5e403d8cd96178e0ed3ceee
[mono.git] / mcs / mcs / ChangeLog
1 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
2
3         * expression.cs:  Instead of having FIXMEs in the Resolve
4         functions, throw exceptions so it is obvious that we are facing a
5         bug. 
6
7         * cs-parser.jay (invocation_expression): Pass Location information.
8
9         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
10         Use a basename for those routines because .NET does not like paths
11         on them. 
12
13         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
14         already defined.
15
16 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
17
18         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
19         are loading the correct data types (throws an exception if not).
20         (TypeManager::InitCoreTypes): Use CoreLookupType
21
22         * expression.cs (Unary::ResolveOperator): return the child
23         expression for expressions which are just +expr.
24         (Unary::ResolveOperator): Return negative literals for -LITERAL
25         expressions (otherwise they are Unary {Literal}).
26         (Invocation::Badness): Take into account `Implicit constant
27         expression conversions'.
28
29         * literal.cs (LongLiteral): Implement long literal class.
30         (IntLiteral): export the `Value' of the intliteral. 
31
32 2001-09-19  Ravi Pratap  <ravi@ximian.com>
33
34         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
35
36         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
37         instead of 'Operator'
38
39         * expression.cs (Binary::ResolveOperator): Update accordingly.
40         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
41         and 'Minus'
42
43         * cs-parser.jay (unary_expression): Update to use the new names.
44
45         * gen-treedump.cs (GetUnary): Same here.
46
47         * expression.cs (Unary::Resolve): Implement.
48         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
49         operators are found instead of making noise ;-)
50         (Unary::ResolveOperator): New method to do precisely the same thing which
51         Binary::ResolveOperator does for Binary expressions.
52         (Unary.method, .Arguments): Add.
53         (Unary::OperName): Implement.   
54         (Unary::ForceConversion): Copy and Paste !
55
56         * class.cs (Operator::Define): Fix a small bug for the case when we have 
57         a unary operator.
58
59         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
60         for the inbuilt operators. Only overloading works for now ;-)
61
62 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
63
64         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
65         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
66
67         * expression.cs (This::Emit): Implement. 
68         (This::Resolve): Implement.
69         (TypeOf:Resolve): Implement.
70         (Expression::ResolveSimpleName): Add an implicit this to instance
71         field references. 
72         (MemberAccess::Resolve): Deal with Parameters and Fields. 
73         Bind instance variable to Field expressions.
74         (FieldExpr::Instance): New field used to track the expression that
75         represents the object instance.
76         (FieldExpr::Resolve): Track potential errors from MemberLookup not
77         binding 
78         (FieldExpr::Emit): Implement.
79
80         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
81         the last instruction contains a return opcode to avoid generating
82         the last `ret' instruction (this generates correct code, and it is
83         nice to pass the peverify output).
84
85         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
86         initializer for static and instance variables.
87         (Constructor::Emit): Allow initializer to be null in the case of
88         static constructors.  Only emit initializer for instance
89         constructors. 
90
91         (TypeContainer::FindMembers): Return a null array if there are no
92         matches.
93
94         Also fix the code for the MemberTypes.Method branch, as it was not
95         scanning that for operators (or tried to access null variables before).
96
97         * assign.cs (Assign::Emit): Handle instance and static fields. 
98
99         * TODO: Updated.
100
101         * driver.cs: Stop compilation if there are parse errors.
102
103         * cs-parser.jay (constructor_declaration): Provide default base
104         initializer for non-static constructors.
105         (constructor_declarator): Do not provide a default base
106         initializers if none was specified.
107         Catch the fact that constructors should not have parameters.
108
109         * class.cs: Do not emit parent class initializers for static
110         constructors, that should be flagged as an error.
111
112 2001-09-18  Ravi Pratap  <ravi@ximian.com>
113
114         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
115         Move back code into TypeContainer::Populate.
116
117 2001-09-18  Ravi Pratap  <ravi@ximian.com>
118
119         * class.cs (TypeContainer::AddConstructor): Fix the check to
120         compare against Name, not Basename. 
121         (Operator::OpType): Change Plus and Minus to Add and Subtract.
122
123         * cs-parser.jay : Update accordingly.
124
125         * class.cs (TypeContainer::FindMembers): For the case where we are searching
126         for methods, don't forget to look into the operators too.
127         (RegisterMethodBuilder): Helper method to take care of this for
128         methods, constructors and operators.
129         (Operator::Define): Completely revamp.
130         (Operator.OperatorMethod, MethodName): New fields.
131         (TypeContainer::Populate): Move the registering of builders into
132         RegisterMethodBuilder.
133         (Operator::Emit): Re-write.
134
135         * expression.cs (Binary::Emit): Comment out code path to emit method
136         invocation stuff for the case when we have a user defined operator. I am
137         just not able to get it right !
138         
139 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
140
141         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
142         argument. 
143
144         (Expression::MemberLookup): Provide a version that allows to
145         specify the MemberTypes and BindingFlags. 
146
147         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
148         so it was not fetching variable information from outer blocks.
149
150         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
151         Beforefieldinit as it was buggy.
152
153         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
154         that Ravi put here.  
155
156         * class.cs (Constructor::Emit): Only emit if block is not null.
157         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
158         deal with this by semantically definining it as if the user had
159         done it.
160
161         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
162         constructors as we now "emit" them at a higher level.
163
164         (TypeContainer::DefineDefaultConstructor): Used to define the
165         default constructors if none was provided.
166
167         (ConstructorInitializer): Add methods Resolve and Emit. 
168         
169         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
170
171 2001-09-17  Ravi Pratap  <ravi@ximian.com>
172
173         * class.cs (TypeContainer::EmitDefaultConstructor): Register
174         the default constructor builder with our hashtable for methodbuilders
175         to methodcores.
176
177         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
178         and argument_count is 0 in which case we have a match.
179         (Binary::ResolveOperator): More null checking and miscellaneous coding
180         style cleanup.
181
182 2001-09-17  Ravi Pratap  <ravi@ximian.com>
183
184         * rootcontext.cs (IsNameSpace): Compare against null.
185
186         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
187
188         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
189         and Unary::Operator.
190
191         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
192         accordingly.
193
194         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
195         we have overloaded operators.
196         (Binary::ResolveOperator): Implement the part which does the operator overload
197         resolution.
198
199         * class.cs (Operator::Emit): Implement.
200         (TypeContainer::Emit): Emit the operators we have too.
201
202         * expression.cs (Binary::Emit): Update to emit the appropriate code for
203         the case when we have a user-defined operator.
204         
205 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
206
207         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
208
209 2001-09-16  Ravi Pratap  <ravi@ximian.com>
210
211         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
212         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
213         (Constructor::Emit): Implement.
214         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
215         if we have no work to do. 
216         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
217         Emit method.
218
219         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
220         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
221
222         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
223         of parent.parent.
224
225 2001-09-15  Ravi Pratap  <ravi@ximian.com>
226
227         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
228         in the source.
229         (Tree::RecordNamespace): Method to do what the name says ;-)
230         (Tree::Namespaces): Property to get at the namespaces hashtable.
231
232         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
233         keep track.
234
235         * rootcontext.cs (IsNamespace): Fixed it :-)
236
237 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
238
239         * class.cs (TypeContainer::FindMembers): Add support for
240         constructors. 
241         (MethodCore): New class that encapsulates both the shared aspects
242         of a Constructor and a Method.  
243         (Method, Constructor): Factored pieces into MethodCore.
244
245         * driver.cs: Added --fatal which makes errors throw exceptions.
246         Load System assembly as well as part of the standard library.
247
248         * report.cs: Allow throwing exceptions on errors for debugging.
249
250         * modifiers.cs: Do not use `parent', instead use the real type
251         container to evaluate permission settings.
252
253         * class.cs: Put Ravi's patch back in.  He is right, and we will
254         have to cope with the
255
256 2001-09-14  Ravi Pratap  <ravi@ximian.com>
257
258         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
259         FamORAssem, not FamANDAssem.
260         
261 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
262
263         * driver.cs: Added --parse option that only parses its input files
264         and terminates.
265
266         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
267         incorrect.  IsTopLevel is not used to tell whether an object is
268         root_types or not (that can be achieved by testing this ==
269         root_types).  But to see if this is a top-level *class* (not
270         necessarly our "toplevel" container). 
271
272 2001-09-14  Ravi Pratap  <ravi@ximian.com>
273
274         * enum.cs (Enum::Define): Modify to call the Lookup method on the
275         parent instead of a direct call to GetType.
276
277 2001-09-14  Ravi Pratap  <ravi@ximian.com>
278
279         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
280         Modifiers.TypeAttr. This should just be a call to that method.
281
282         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
283         object so that we can determine if we are top-level or not.
284
285         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
286         TypeContainer too.
287
288         * enum.cs (Enum::Define): Ditto.
289
290         * modifiers.cs (FieldAttr): Re-write.
291
292         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
293         (TypeContainer::HaveStaticConstructor): New property to provide access
294         to precisely that info.
295
296         * modifiers.cs (MethodAttr): Re-write.
297         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
298
299         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
300         of top-level types as claimed.
301         
302 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
303
304         * expression.cs (MemberLookup): Fruitless attempt to lookup
305         constructors.  Maybe I need to emit default constructors?  That
306         might be it (currently .NET emits this for me automatically).
307         (Invocation::OverloadResolve): Cope with Arguments == null.
308         (Invocation::EmitArguments): new function, shared by the new
309         constructor and us.
310         (Invocation::Emit): Handle static and instance methods.  Emit
311         proper call instruction for virtual or non-virtual invocations.
312         (New::Emit): Implement.
313         (New::Resolve): Implement.
314         (MemberAccess:Resolve): Implement.
315         (MethodGroupExpr::InstanceExpression): used conforming to the spec
316         to track instances.
317         (FieldExpr::Resolve): Set type.
318
319         * support.cs: Handle empty arguments.
320                 
321         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
322         SimpleLookup): Auxiliary routines to help parse a qualifier
323         identifier.  
324
325         Update qualifier_identifier rule.
326
327         * codegen.cs: Removed debugging messages.
328
329         * class.cs: Make this a global thing, this acts just as a "key" to
330         objects that we might have around.
331
332         (Populate): Only initialize method_builders_to_methods once.
333
334         * expression.cs (PropertyExpr): Initialize type from the
335         PropertyType. 
336
337         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
338         Resolve pattern.  Attempt to implicitly convert value to boolean.
339         Emit code.
340
341         * expression.cs: Set the type for the int32/int32 argument case.
342         (Binary::ResolveOperator): Set the return type to boolean for
343         comparission operators
344
345         * typemanager.cs: Remove debugging print code.
346
347         (Invocation::Resolve): resolve type.
348
349         * class.cs: Allocate a MemberInfo of the correct size, as the code
350         elsewhere depends on the test to reflect the correct contents.
351
352         (Method::) Keep track of parameters, due to System.Reflection holes
353
354         (TypeContainer::Populate): Keep track of MethodBuilders to Method
355         mapping here.
356
357         (TypeContainer::FindMembers): Use ArrayList and then copy an array
358         of the exact size and return that.
359
360         (Class::LookupMethodByBuilder): New function that maps
361         MethodBuilders to its methods.  Required to locate the information
362         on methods because System.Reflection bit us again.
363
364         * support.cs: New file, contains an interface ParameterData and
365         two implementations: ReflectionParameters and InternalParameters
366         used to access Parameter information.  We will need to grow this
367         as required.
368
369         * expression.cs (Invocation::GetParameterData): implement a cache
370         and a wrapper around the ParameterData creation for methods. 
371         (Invocation::OverloadResolve): Use new code.
372
373 2001-09-13  Ravi Pratap  <ravi@ximian.com>
374
375         * class.cs (TypeContainer::EmitField): Remove and move into 
376         (Field::Define): here and modify accordingly.
377         (Field.FieldBuilder): New member.
378         (TypeContainer::Populate): Update accordingly.
379         (TypeContainer::FindMembers): Implement.
380
381 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
382
383         * statement.cs: (VariableInfo::VariableType): New field to be
384         initialized with the full type once it is resolved. 
385
386 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
387
388         * parameter.cs (GetParameterInfo): Use a type cache to compute
389         things only once, and to reuse this information
390
391         * expression.cs (LocalVariableReference::Emit): Implement.
392         (OpcodeCast::Emit): fix.
393
394         (ParameterReference::Resolve): Implement.
395         (ParameterReference::Emit): Implement.
396
397         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
398         that are expressions need to stay as Expressions.
399
400         * typemanager.cs (CSharpName): Returns the C# name of a type if
401         possible. 
402
403         * expression.cs (Expression::ConvertImplicit): New function that
404         implements implicit type conversions.
405
406         (Expression::ImplicitReferenceConversion): Implements implicit
407         reference conversions.
408
409         (EmptyCast): New type for transparent casts.
410
411         (OpcodeCast): New type for casts of types that are performed with
412         a sequence of bytecodes.
413         
414         (BoxedCast): New type used for casting value types into reference
415         types.  Emits a box opcode.
416
417         (Binary::DoNumericPromotions): Implements numeric promotions of
418         and computation of the Binary::Type.
419
420         (Binary::EmitBranchable): Optimization.
421
422         (Binary::Emit): Implement code emission for expressions.
423         
424         * typemanager.cs (TypeManager): Added two new core types: sbyte
425         and byte.
426
427 2001-09-12  Ravi Pratap  <ravi@ximian.com>
428
429         * class.cs (TypeContainer::FindMembers): Method which does exactly
430         what Type.FindMembers does, only we don't have to use reflection. No
431         implementation yet.
432
433         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
434         typecontainer objects as we need to get at them.
435         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
436
437         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
438         typecontainer object.
439
440         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
441         of just a Report object.
442
443 2001-09-11  Ravi Pratap  <ravi@ximian.com>
444
445         * class.cs (Event::Define): Go back to using the prefixes "add_" and
446         "remove_"
447         (TypeContainer::Populate): Now define the delegates of the type too.
448         (TypeContainer.Delegates): Property to access the list of delegates defined
449         in the type.
450
451         * delegates.cs (Delegate::Define): Implement partially.
452
453         * modifiers.cs (TypeAttr): Handle more flags.
454
455 2001-09-11  Ravi Pratap  <ravi@ximian.com>
456
457         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
458         and not <=
459         (Operator::Define): Re-write logic to get types by using the LookupType method
460         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
461         (Indexer::Define): Ditto.
462         (Event::Define): Ditto.
463         (Property::Define): Ditto.
464         
465 2001-09-10  Ravi Pratap  <ravi@ximian.com>
466
467         * class.cs (TypeContainer::Populate): Now define operators too. 
468         (TypeContainer.Operators): New property to access the list of operators
469         in a type.
470         (Operator.OperatorMethodBuilder): New member to hold the method builder
471         for the operator we are defining.
472         (Operator::Define): Implement.
473
474 2001-09-10  Ravi Pratap  <ravi@ximian.com>
475
476         * class.cs (Event::Define): Make the prefixes of the accessor methods
477         addOn_ and removeOn_ 
478
479         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
480         of the location being passed in too. Ideally, this should go later since all
481         error reporting should be done through the Report object.
482
483         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
484         (Populate): Iterate thru the indexers we have and define them too.
485         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
486         for the get and set accessors.
487         (Indexer::Define): Implement.
488         
489 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
490
491         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
492         my previous implementation, did not work.
493
494         * typemanager.cs: Add a couple of missing types (the longs).
495
496         * literal.cs: Use TypeManager.bool_type instead of getting it.
497
498         * expression.cs (EventExpr): New kind of expressions.
499         (Expressio::ExprClassFromMemberInfo): finish
500
501 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
502
503         * assign.cs: Emit stores to static fields differently.
504
505 2001-09-08  Ravi Pratap  <ravi@ximian.com>
506
507         * Merge in changes and adjust code to tackle conflicts. Backed out my
508         code in Assign::Resolve ;-) 
509
510 2001-09-08  Ravi Pratap  <ravi@ximian.com>
511
512         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
513         instead Report.Error and also pass in the location.
514         (CSharpParser::Lexer): New readonly property to return the reference
515         to the Tokenizer object.
516         (declare_local_variables): Use Report.Error with location instead of plain 
517         old error.
518         (CheckDef): Ditto.
519
520         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
521         (Operator.CheckBinaryOperator): Ditto.
522
523         * cs-parser.jay (operator_declarator): Update accordingly.
524
525         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
526         (CheckBinaryOperator): Same here.
527
528         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
529         on the name without any prefixes of namespace names etc. This is because we
530         already might have something already fully qualified like 
531         'System.Console.WriteLine'
532
533         * assign.cs (Resolve): Begin implementation. Stuck ;-)
534
535 2001-09-07  Ravi Pratap  <ravi@ximian.com>
536
537         * cs-tokenizer.cs (location): Return a string which also contains
538         the file name.
539
540         * expression.cs (ElementAccess): New class for expressions of the
541         type 'element access.'
542         (BaseAccess): New class for expressions of the type 'base access.'
543         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
544         respectively.
545         
546         * cs-parser.jay (element_access): Implement action.
547         (base_access): Implement actions.
548         (checked_expression, unchecked_expression): Implement.
549
550         * cs-parser.jay (local_variable_type): Correct and implement.
551         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
552
553         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
554
555         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
556         name and the specifiers.
557
558         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
559         
560         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
561         making them all public ;-)
562
563         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
564         class anyways.
565         
566 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
567
568         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
569         PropertyExprs.
570         (FieldExpr, PropertyExprs): New resolved expressions.
571         (SimpleName::MemberStaticCheck): Perform static checks for access
572         to non-static fields on static methods. Maybe this should be
573         generalized for MemberAccesses. 
574         (SimpleName::ResolveSimpleName): More work on simple name
575         resolution. 
576
577         * cs-parser.jay (primary_expression/qualified_identifier): track
578         the parameter index.
579
580         * codegen.cs (CodeGen::Save): Catch save exception, report error.
581         (EmitContext::EmitBoolExpression): Chain to expression generation
582         instead of temporary hack.
583         (::EmitStatementExpression): Put generic expression code generation.
584
585         * assign.cs (Assign::Emit): Implement variable assignments to
586         local variables, parameters and fields.
587
588 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
589
590         * statement.cs (Block::GetVariableInfo): New method, returns the
591         VariableInfo for a variable name in a block.
592         (Block::GetVariableType): Implement in terms of GetVariableInfo
593
594         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
595         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
596
597 2001-09-06  Ravi Pratap  <ravi@ximian.com>
598
599         * cs-parser.jay (operator_declaration): Continue on my quest : update
600         to take attributes argument.
601         (event_declaration): Ditto.
602         (enum_declaration): Ditto.
603         (indexer_declaration): Ditto.
604         
605         * class.cs (Operator::Operator): Update constructor accordingly.
606         (Event::Event): Ditto.
607
608         * delegate.cs (Delegate::Delegate): Same here.
609
610         * enum.cs (Enum::Enum): Same here.
611         
612 2001-09-05  Ravi Pratap  <ravi@ximian.com>
613
614         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
615
616         * ../tests/cs0658.cs : New file to demonstrate error 0658.
617
618         * attribute.cs (Attributes): New class to encapsulate all attributes which were
619         being passed around as an arraylist.
620         (Attributes::AddAttribute): Method to add attribute sections.
621
622         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
623         (struct_declaration): Update accordingly.
624         (constant_declaration): Update.
625         (field_declaration): Update.
626         (method_header): Update.
627         (fixed_parameter): Update.
628         (parameter_array): Ditto.
629         (property_declaration): Ditto.
630         (destructor_declaration): Ditto.
631         
632         * class.cs (Struct::Struct): Update constructors accordingly.
633         (Class::Class): Ditto.
634         (Field::Field): Ditto.
635         (Method::Method): Ditto.
636         (Property::Property): Ditto.
637         (TypeContainer::OptAttribute): update property's return type.
638         
639         * interface.cs (Interface.opt_attributes): New member.
640         (Interface::Interface): Update to take the extra Attributes argument.
641
642         * parameter.cs (Parameter::Parameter): Ditto.
643
644         * constant.cs (Constant::Constant): Ditto.
645
646         * interface.cs (InterfaceMemberBase): New OptAttributes field.
647         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
648         the attributes as a parameter.
649         (InterfaceProperty): Update constructor call.
650         (InterfaceEvent): Ditto.
651         (InterfaceMethod): Ditto.
652         (InterfaceIndexer): Ditto.
653
654         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
655         pass the attributes too.
656         (interface_event_declaration): Ditto.
657         (interface_property_declaration): Ditto.
658         (interface_method_declaration): Ditto.
659         (interface_declaration): Ditto.
660
661 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
662
663         * class.cs (Method::Define): Track the "static Main" definition to
664         create an entry point. 
665
666         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
667         EntryPoint if we find it. 
668
669         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
670         (EmitContext::ig): Make this variable public.
671
672         * driver.cs: Make the default output file be the first file name
673         with the .exe extension.  
674
675         Detect empty compilations
676
677         Handle various kinds of output targets.  Handle --target and
678         rename -t to --dumper.
679
680         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
681         methods inherited from Expression return now an Expression.  This
682         will is used during the tree rewriting as we resolve them during
683         semantic analysis.
684
685         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
686         the spec.  Missing entirely is the information about
687         accessability of elements of it.
688
689         (Expression::ExprClassFromMemberInfo): New constructor for
690         Expressions that creates a fully initialized Expression based on
691         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
692         a Type.
693
694         (Invocation::Resolve): Begin implementing resolution of invocations.
695         
696         * literal.cs (StringLiteral):  Implement Emit.
697
698 2001-09-05  Ravi Pratap  <ravi@ximian.com>
699
700         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
701         member.
702         
703 2001-09-04  Ravi Pratap  <ravi@ximian.com>
704
705         * cs-parser.jay (attribute_arguments): Implement actions.
706         (attribute): Fix bug in production. Implement action.
707         (attribute_list): Implement.
708         (attribute_target): Implement.
709         (attribute_target_specifier, opt_target_specifier): Implement
710         (CheckAttributeTarget): New method to check if the attribute target
711         is valid.
712         (attribute_section): Implement.
713         (opt_attributes): Implement.
714
715         * attribute.cs : New file to handle attributes.
716         (Attribute): Class to hold attribute info.
717
718         * cs-parser.jay (opt_attribute_target_specifier): Remove production
719         (attribute_section): Modify production to use 2 different rules to 
720         achieve the same thing. 1 s/r conflict down !
721         Clean out commented, useless, non-reducing dimension_separator rules.
722         
723         * class.cs (TypeContainer.attributes): New member to hold list
724         of attributes for a type.
725         (Struct::Struct): Modify to take one more argument, the attribute list.
726         (Class::Class): Ditto.
727         (Field::Field): Ditto.
728         (Method::Method): Ditto.
729         (Property::Property): Ditto.
730         
731         * cs-parser.jay (struct_declaration): Update constructor call to
732         pass in the attributes too.
733         (class_declaration): Ditto.
734         (constant_declaration): Ditto.
735         (field_declaration): Ditto.
736         (method_header): Ditto.
737         (fixed_parameter): Ditto.
738         (parameter_array): Ditto.
739         (property_declaration): Ditto.
740
741         * constant.cs (Constant::Constant): Update constructor similarly.
742         Use System.Collections.
743
744         * parameter.cs (Parameter::Parameter): Update as above.
745
746 2001-09-02  Ravi Pratap  <ravi@ximian.com>
747
748         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
749         (TypeContainer.delegates): New member to hold list of delegates.
750
751         * cs-parser.jay (delegate_declaration): Implement the action correctly 
752         this time as I seem to be on crack ;-)
753
754 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
755
756         * rootcontext.cs (RootContext::IsNamespace): new function, used to
757         tell whether an identifier represents a namespace.
758
759         * expression.cs (NamespaceExpr): A namespace expression, used only
760         temporarly during expression resolution.
761         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
762         utility functions to resolve names on expressions.
763
764 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
765
766         * codegen.cs: Add hook for StatementExpressions. 
767
768         * class.cs: Fix inverted test for static flag in methods.
769
770 2001-09-02  Ravi Pratap  <ravi@ximian.com>
771
772         * class.cs (Operator::CheckUnaryOperator): Correct error number used
773         to make it coincide with MS' number.
774         (Operator::CheckBinaryOperator): Ditto.
775
776         * ../errors/errors.txt : Remove error numbers added earlier.
777
778         * ../errors/cs1019.cs : Test case for error # 1019
779
780         * ../errros/cs1020.cs : Test case for error # 1020
781
782         * cs-parser.jay : Clean out commented cruft.
783         (dimension_separators, dimension_separator): Comment out. Ostensibly not
784         used anywhere - non-reducing rule.
785         (namespace_declarations): Non-reducing rule - comment out.
786
787         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
788         with TypeContainer::AddEnum.
789
790         * delegate.cs : New file for delegate handling classes.
791         (Delegate): Class for declaring delegates.
792
793         * makefile : Update.
794
795         * cs-parser.jay (delegate_declaration): Implement.
796
797 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
798
799         * class.cs (Event::Define): Implement.
800         (Event.EventBuilder): New member.
801
802         * class.cs (TypeContainer::Populate): Update to define all enums and events
803         we have.
804         (Events): New property for the events arraylist we hold. Shouldn't we move to using
805         readonly fields for all these cases ?
806
807 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
808
809         * class.cs (Property): Revamp to use the convention of making fields readonly.
810         Accordingly modify code elsewhere.
811
812         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
813         the Define method of the Property class.
814
815         * class.cs : Clean up applied patch and update references to variables etc. Fix 
816         trivial bug.
817         (TypeContainer::Populate): Update to define all the properties we have. Also
818         define all enumerations.
819
820         * enum.cs (Define): Implement.
821         
822 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
823
824         * cs-parser.jay (overloadable_operator): The semantic value is an
825         enum of the Operator class.
826         (operator_declarator): Implement actions.
827         (operator_declaration): Implement.
828
829         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
830         validity of definitions.
831         (Operator::CheckBinaryOperator): Static method to check for binary operators
832         (TypeContainer::AddOperator): New method to add an operator to a type.
833
834         * cs-parser.jay (indexer_declaration): Added line to actually call the
835         AddIndexer method so it gets added ;-)
836
837         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
838         already taken care of by the MS compiler ?  
839
840 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
841
842         * class.cs (Operator): New class for operator declarations.
843         (Operator::OpType): Enum for the various operators.
844
845 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
846
847         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
848         ostensibly handle this in semantic analysis.
849
850         * cs-parser.jay (general_catch_clause): Comment out
851         (specific_catch_clauses, specific_catch_clause): Ditto.
852         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
853         (catch_args, opt_catch_args): New productions.
854         (catch_clause): Rewrite to use the new productions above
855         (catch_clauses): Modify accordingly.
856         (opt_catch_clauses): New production to use in try_statement
857         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
858         and re-write the code in the actions to extract the specific and
859         general catch clauses by being a little smart ;-)
860
861         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
862         Hooray, try and catch statements parse fine !
863         
864 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
865
866         * statement.cs (Block::GetVariableType): Fix logic to extract the type
867         string from the hashtable of variables.
868
869         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
870         I end up making that mistake ;-)
871         (catch_clauses): Fixed gross error which made Key and Value of the 
872         DictionaryEntry the same : $1 !!
873
874 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
875
876         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
877
878         * cs-parser.jay (event_declaration): Correct to remove the semicolon
879         when the add and remove accessors are specified. 
880
881 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
882
883         * cs-parser.jay (IndexerDeclaration): New helper class to hold
884         information about indexer_declarator.
885         (indexer_declarator): Implement actions.
886         (parsing_indexer): New local boolean used to keep track of whether
887         we are parsing indexers or properties. This is necessary because 
888         implicit_parameters come into picture even for the get accessor in the 
889         case of an indexer.
890         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
891
892         * class.cs (Indexer): New class for indexer declarations.
893         (TypeContainer::AddIndexer): New method to add an indexer to a type.
894         (TypeContainer::indexers): New member to hold list of indexers for the
895         type.
896
897 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
898
899         * cs-parser.jay (add_accessor_declaration): Implement action.
900         (remove_accessor_declaration): Implement action.
901         (event_accessors_declaration): Implement
902         (variable_declarators): swap statements for first rule - trivial.
903
904         * class.cs (Event): New class to hold information about event
905         declarations.
906         (TypeContainer::AddEvent): New method to add an event to a type
907         (TypeContainer::events): New member to hold list of events.
908
909         * cs-parser.jay (event_declaration): Implement actions.
910
911 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
912
913         * cs-parser.jay (dim_separators): Implement. Make it a string
914         concatenating all the commas together, just as they appear.
915         (opt_dim_separators): Modify accordingly
916         (rank_specifiers): Update accordingly. Basically do the same
917         thing - instead, collect the brackets here.
918         (opt_rank_sepcifiers): Modify accordingly.
919         (array_type): Modify to actually return the complete type string
920         instead of ignoring the rank_specifiers.
921         (expression_list): Implement to collect the expressions
922         (variable_initializer): Implement. We make it a list of expressions
923         essentially so that we can handle the array_initializer case neatly too.
924         (variable_initializer_list): Implement.
925         (array_initializer): Make it a list of variable_initializers
926         (opt_array_initializer): Modify accordingly.
927
928         * expression.cs (New::NType): Add enumeration to help us
929         keep track of whether we have an object/delegate creation
930         or an array creation.
931         (New:NewType, New::Rank, New::Indices, New::Initializers): New
932         members to hold data about array creation.
933         (New:New): Modify to update NewType
934         (New:New): New Overloaded contructor for the array creation
935         case.
936
937         * cs-parser.jay (array_creation_expression): Implement to call
938         the overloaded New constructor.
939         
940 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
941
942         * class.cs (TypeContainer::Constructors): Return member
943         constructors instead of returning null.
944
945 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
946
947         * typemanager.cs (InitCoreTypes): Initialize the various core
948         types after we have populated the type manager with the user
949         defined types (this distinction will be important later while
950         compiling corlib.dll)
951
952         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
953         on Expression Classification.  Now all expressions have a method
954         `Resolve' and a method `Emit'.
955
956         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
957         generation from working.     Also add some temporary debugging
958         code. 
959         
960 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
961
962         * codegen.cs: Lots of code generation pieces.  This is only the
963         beginning, will continue tomorrow with more touches of polish.  We
964         handle the fundamentals of if, while, do, for, return.  Others are
965         trickier and I need to start working on invocations soon.
966         
967         * gen-treedump.cs: Bug fix, use s.Increment here instead of
968         s.InitStatement. 
969
970         * codegen.cs (EmitContext): New struct, used during code
971         emission to keep a context.   Most of the code generation will be
972         here. 
973
974         * cs-parser.jay: Add embedded blocks to the list of statements of
975         this block.  So code generation proceeds in a top down fashion.
976
977 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
978
979         * statement.cs: Add support for multiple child blocks.
980
981 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
982
983         * codegen.cs (EmitCode): New function, will emit the code for a
984         Block of code given a TypeContainer and its ILGenerator. 
985
986         * statement.cs (Block): Standard public readonly optimization.
987         (Block::Block constructors): Link children. 
988         (Block::Child): Child Linker.
989         (Block::EmitVariables): Emits IL variable declarations.
990
991         * class.cs: Drop support for MethodGroups here, delay until
992         Semantic Analysis.
993         (Method::): Applied the same simplification that I did before, and
994         move from Properties to public readonly fields.
995         (Method::ParameterTypes): Returns the parameter types for the
996         function, and implements a cache that will be useful later when I
997         do error checking and the semantic analysis on the methods is
998         performed.
999         (Constructor::GetCallingConvention): Renamed from CallingConvetion
1000         and made a method, optional argument tells whether this is a class
1001         or a structure to apply the `has-this' bit.
1002         (Method::GetCallingConvention): Implement, returns the calling
1003         convention. 
1004         (Method::Define): Defines the type, a second pass is performed
1005         later to populate the methods.
1006
1007         (Constructor::ParameterTypes): implement a cache similar to the
1008         one on Method::ParameterTypes, useful later when we do semantic
1009         analysis. 
1010
1011         (TypeContainer::EmitMethod):  New method.  Emits methods.
1012
1013         * expression.cs: Removed MethodGroup class from here.
1014         
1015         * parameter.cs (Parameters::GetCallingConvention): new method.
1016
1017 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
1018
1019         * class.cs (TypeContainer::Populate): Drop RootContext from the
1020         argument. 
1021
1022         (Constructor::CallingConvention): Returns the calling convention.
1023         (Constructor::ParameterTypes): Returns the constructor parameter
1024         types. 
1025         
1026         (TypeContainer::AddConstructor): Keep track of default constructor
1027         and the default static constructor.
1028
1029         (Constructor::) Another class that starts using `public readonly'
1030         instead of properties. 
1031
1032         (Constructor::IsDefault): Whether this is a default constructor. 
1033
1034         (Field::) use readonly public fields instead of properties also.
1035
1036         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
1037         track of static constructors;  If none is used, turn on
1038         BeforeFieldInit in the TypeAttributes. 
1039
1040         * cs-parser.jay (opt_argument_list): now the return can be null
1041         for the cases where there are no arguments. 
1042
1043         (constructor_declarator): If there is no implicit `base' or
1044         `this', then invoke the default parent constructor. 
1045         
1046         * modifiers.cs (MethodAttr): New static function maps a set of
1047         modifiers flags into a MethodAttributes enum
1048         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
1049         MethodAttr, TypeAttr to represent the various mappings where the
1050         modifiers are used.
1051         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
1052
1053 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
1054
1055         * parameter.cs (GetParameterInfo): Fix bug where there would be no
1056         method arguments.
1057
1058         * interface.cs (PopulateIndexer): Implemented the code generator
1059         for interface indexers.
1060
1061 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
1062
1063         * interface.cs (InterfaceMemberBase): Now we track the new status
1064         here.  
1065
1066         (PopulateProperty): Implement property population.  Woohoo!  Got
1067         Methods and Properties going today. 
1068
1069         Removed all the properties for interfaces, and replaced them with
1070         `public readonly' fields. 
1071
1072 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
1073
1074         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
1075         initialize their hashtables/arraylists only when they are needed
1076         instead of doing this always.
1077
1078         * parameter.cs: Handle refs and out parameters.
1079
1080         * cs-parser.jay: Use an ArrayList to construct the arguments
1081         instead of the ParameterCollection, and then cast that to a
1082         Parameter[] array.
1083
1084         * parameter.cs: Drop the use of ParameterCollection and use
1085         instead arrays of Parameters.
1086
1087         (GetParameterInfo): Use the Type, not the Name when resolving
1088         types. 
1089
1090 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
1091
1092         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
1093         and instead use public readonly fields.
1094
1095         * class.cs: Put back walking code for type containers.
1096
1097 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
1098
1099         * class.cs (MakeConstant): Code to define constants.
1100
1101         * rootcontext.cs (LookupType): New function.  Used to locate types 
1102
1103         
1104 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
1105
1106         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
1107         this System.Reflection code is.  Kudos to Microsoft
1108         
1109         * typemanager.cs: Implement a type cache and avoid loading all
1110         types at boot time.  Wrap in LookupType the internals.  This made
1111         the compiler so much faster.  Wow.  I rule!
1112         
1113         * driver.cs: Make sure we always load mscorlib first (for
1114         debugging purposes, nothing really important).
1115
1116         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
1117         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
1118
1119         * rootcontext.cs: Lookup types on their namespace;  Lookup types
1120         on namespaces that have been imported using the `using' keyword.
1121
1122         * class.cs (TypeContainer::TypeAttr): Virtualize.
1123         (Class::TypeAttr): Return attributes suitable for this bad boy.
1124         (Struct::TypeAttr): ditto.
1125         Handle nested classes.
1126         (TypeContainer::) Remove all the type visiting code, it is now
1127         replaced with the rootcontext.cs code
1128
1129         * rootcontext.cs (GetClassBases): Added support for structs. 
1130
1131 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
1132
1133         * interface.cs, statement.cs, class.cs, parameter.cs,
1134         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
1135         Drop use of TypeRefs, and use strings instead.
1136
1137 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
1138
1139         * rootcontext.cs: 
1140
1141         * class.cs (Struct::Struct): set the SEALED flags after
1142         checking the modifiers.
1143         (TypeContainer::TypeAttr): new property, returns the
1144         TypeAttributes for a class.  
1145
1146         * cs-parser.jay (type_list): Oops, list production was creating a
1147         new list of base types.
1148
1149         * rootcontext.cs (StdLib): New property.
1150         (GetInterfaceTypeByName): returns an interface by type name, and
1151         encapsulates error handling here.
1152         (GetInterfaces): simplified.
1153         (ResolveTree): Encapsulated all the tree resolution here.
1154         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
1155         types. 
1156         
1157         * driver.cs: Add support for --nostdlib, to avoid loading the
1158         default assemblies.
1159         (Main): Do not put tree resolution here. 
1160
1161         * rootcontext.cs: Beginning of the class resolution.
1162
1163 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
1164
1165         * rootcontext.cs: Provide better error reporting. 
1166
1167         * cs-parser.jay (interface_base): set our $$ to be interfaces.
1168
1169         * rootcontext.cs (CreateInterface): Handle the case where there
1170         are no parent interfaces.
1171         
1172         (CloseTypes): Routine to flush types at the end.
1173         (CreateInterface): Track types.
1174         (GetInterfaces): Returns an array of Types from the list of
1175         defined interfaces.
1176
1177         * typemanager.c (AddUserType): Mechanism to track user types (puts
1178         the type on the global type hash, and allows us to close it at the
1179         end). 
1180         
1181 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
1182
1183         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
1184         RecordInterface instead.
1185
1186         * cs-parser.jay: Updated to reflect changes above.
1187
1188         * decl.cs (Definition): Keep track of the TypeBuilder type that
1189         represents this type here.  Not sure we will use it in the long
1190         run, but wont hurt for now.
1191
1192         * driver.cs: Smaller changes to accomodate the new code.
1193
1194         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
1195         when done. 
1196
1197         * rootcontext.cs (CreateInterface):  New method, used to create
1198         the System.TypeBuilder type for interfaces.
1199         (ResolveInterfaces): new entry point to resolve the interface
1200         hierarchy. 
1201         (CodeGen): Property, used to keep track of the code generator.
1202
1203 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
1204
1205         * cs-parser.jay: Add a second production for delegate_declaration
1206         with `VOID'.
1207
1208         (enum_body): Put an opt_comma here instead of putting it on
1209         enum_body or enum_member_declarations so we can handle trailing
1210         commas on enumeration members.  Gets rid of a shift/reduce.
1211         
1212         (type_list): Need a COMMA in the middle.
1213
1214         (indexer_declaration): Tell tokenizer to recognize get/set
1215
1216         * Remove old targets.
1217
1218         * Re-add the parser target.
1219
1220 2001-07-13  Simon Cozens <simon@simon-cozens.org>
1221
1222         * cs-parser.jay: Add precendence rules for a number of operators
1223         ot reduce the number of shift/reduce conflicts in the grammar.
1224         
1225 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
1226
1227         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
1228         and put it here.
1229
1230         Get rid of old crufty code.
1231
1232         * rootcontext.cs: Use this to keep track of the parsed
1233         representation and the defined types available to the program. 
1234
1235         * gen-treedump.cs: adjust for new convention.
1236
1237         * type.cs: Split out the type manager, and the assembly builder
1238         from here. 
1239
1240         * typemanager.cs: the type manager will live here now.
1241
1242         * cil-codegen.cs: And the code generator here. 
1243
1244 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
1245
1246         * makefile: Fixed up for easy making.
1247
1248 2001-07-13  Simon Cozens <simon@simon-cozens.org>
1249
1250         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
1251         the 
1252
1253         (unary_expression): Expand pre_increment_expression and
1254         post_decrement_expression to reduce a shift/reduce.
1255
1256 2001-07-11  Simon Cozens
1257
1258         * cs-tokenizer.cs: Hex numbers should begin with a 0.
1259
1260         Improve allow_keyword_as_indent name.
1261
1262 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
1263
1264         * Adjustments for Beta2. 
1265
1266 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
1267
1268         * decl.cs: Added `Define' abstract method.
1269         (InTransit): new property, used to catch recursive definitions. 
1270
1271         * interface.cs: Implement `Define'. 
1272
1273         * modifiers.cs: Map Modifiers.constants to
1274         System.Reflection.TypeAttribute flags.
1275
1276         * class.cs: Keep track of types and user-defined types.
1277         (BuilderInit): New method for creating an assembly
1278         (ResolveType): New function to launch the resolution process, only
1279         used by interfaces for now.
1280
1281         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
1282         that are inserted into the name space. 
1283
1284 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
1285
1286         * ARGH.  I have screwed up my tree so many times due to the use of
1287         rsync rather than using CVS.  Going to fix this at once. 
1288
1289         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
1290         load types.
1291
1292 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
1293
1294         * Experiment successful: Use System.Type rather that our own
1295         version of Type.  
1296
1297 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
1298
1299         * cs-parser.jay: Removed nsAliases from here.
1300
1301         Use new namespaces, handle `using XXX;' 
1302
1303         * namespace.cs: Reimplemented namespace handling, use a recursive
1304         definition of the class.  Now we can keep track of using clauses
1305         and catch invalid using clauses.
1306
1307 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
1308
1309         * gen-treedump.cs: Adapted for all the renaming.
1310
1311         * expression.cs (Expression): this class now has a Type property
1312         which returns an expression Type.
1313
1314         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
1315         `Type', as this has a different meaning now in the base
1316
1317 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
1318
1319         * interface.cs, class.cs: Removed from all the sources the
1320         references to signature computation, as we can not do method
1321         signature computation during the parsing time, as we are not
1322         trying to solve at that point distinguishing:
1323
1324         class X {
1325                 void a (Blah x) {}
1326                 void a (NS.Blah x) {}
1327         }
1328
1329         Which depending on the context might be valid or not, as we do not
1330         know if Blah is the same thing as NS.Blah at that point.
1331
1332         * Redid everything so the code uses TypeRefs now instead of
1333         Types.  TypeRefs are just temporary type placeholders, that need
1334         to be resolved.  They initially have a pointer to a string and the
1335         current scope in which they are used.  This is used later by the
1336         compiler to resolve the reference to an actual Type. 
1337
1338         * DeclSpace is no longer a CIR.Type, and neither are
1339         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
1340         are all DeclSpaces, but no Types. 
1341
1342         * type.cs (TypeRefManager): This implements the TypeRef manager,
1343         which keeps track of all the types that need to be resolved after
1344         the parsing has finished. 
1345
1346 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
1347
1348         * ARGH.  We are going to have to store `foreach' as a class rather
1349         than resolving it, as we need to verify error 1579 after name
1350         resolution.   *OR* we could keep a flag that says `This request to
1351         IEnumerator comes from a foreach statement' which we can then use
1352         to generate the error.
1353
1354 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
1355
1356         * class.cs (TypeContainer.AddMethod): we now add methods to the
1357         MethodGroup instead of the method hashtable.  
1358
1359         * expression.cs: Add MethodGroup abstraction, which gets us one
1360         step closer to the specification in the way we handle method
1361         declarations.  
1362
1363         * cs-parser.jay (primary_expression): qualified_identifier now
1364         tried to match up an identifier to a local variable reference or
1365         to a parameter reference.
1366
1367         current_local_parameters is now a parser global variable that
1368         points to the current parameters for the block, used during name
1369         lookup.
1370
1371         (property_declaration): Now creates an implicit `value' argument to
1372         the set accessor.
1373
1374 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
1375
1376         * parameter.cs: Do not use `param' arguments as part of the
1377         signature, per the spec.
1378
1379 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
1380
1381         * decl.cs: Base class for classes, structs and interfaces.  This
1382         is the "Declaration Space" 
1383
1384         * cs-parser.jay: Use CheckDef for checking declaration errors
1385         instead of having one on each function.
1386
1387         * class.cs: Factor out some code for handling error handling in
1388         accordance to the "Declarations" section in the "Basic Concepts"
1389         chapter in the ECMA C# spec.
1390
1391         * interface.cs: Make all interface member classes derive from
1392         InterfaceMemberBase.
1393
1394 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
1395
1396         * Many things: all interfaces are parsed and generated in
1397         gen-treedump.  Support for member variables, constructors,
1398         destructors, properties, constants is there.
1399
1400         Beginning of the IL backend, but very little done, just there for
1401         testing purposes. 
1402
1403 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
1404
1405         * cs-parser.jay: Fix labeled statement.
1406
1407         * cs-tokenizer.cs (escape): Escape " and ' always.
1408         ref_line, ref_name: keep track of the line/filename as instructed
1409         by #line by the compiler.
1410         Parse #line.
1411
1412 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
1413
1414         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
1415         to match the values in System.CodeDOM.
1416
1417         Divid renamed to Divide.
1418
1419         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
1420         statements. 
1421         (Statements.set): remove.
1422
1423         * System.CodeDOM/CodeCatchClause.cs: always have a valid
1424         statements. 
1425
1426         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
1427         falseStatements always have valid values. 
1428
1429         * cs-parser.jay: Use System.CodeDOM now.
1430