2001-09-12 Miguel de Icaza <miguel@ximian.com>
[mono.git] / mcs / mcs / ChangeLog
1 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
2
3         * typemanager.cs (CSharpName): Returns the C# name of a type if
4         possible. 
5
6         * expression.cs (Expression::ConvertImplicit): New function that
7         implements implicit type conversions.
8
9         (Expression::ImplicitReferenceConversion): Implements implicit
10         reference conversions.
11
12         (EmptyCast): New type for transparent casts.
13
14         (OpcodeCast): New type for casts of types that are performed with
15         a sequence of bytecodes.
16         
17         (BoxedCast): New type used for casting value types into reference
18         types.  Emits a box opcode.
19
20         (Binary::DoNumericPromotions): Implements numeric promotions of
21         and computation of the Binary::Type.
22
23         (Binary::EmitBranchable): Optimization.
24
25         (Binary::Emit): Implement code emission for expressions.
26         
27         * typemanager.cs (TypeManager): Added two new core types: sbyte
28         and byte.
29
30 2001-09-12  Ravi Pratap  <ravi@ximian.com>
31
32         * class.cs (TypeContainer::FindMembers): Method which does exactly
33         what Type.FindMembers does, only we don't have to use reflection. No
34         implementation yet.
35
36         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
37         typecontainer objects as we need to get at them.
38         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
39
40         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
41         typecontainer object.
42
43         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
44         of just a Report object.
45
46 2001-09-11  Ravi Pratap  <ravi@ximian.com>
47
48         * class.cs (Event::Define): Go back to using the prefixes "add_" and
49         "remove_"
50         (TypeContainer::Populate): Now define the delegates of the type too.
51         (TypeContainer.Delegates): Property to access the list of delegates defined
52         in the type.
53
54         * delegates.cs (Delegate::Define): Implement partially.
55
56         * modifiers.cs (TypeAttr): Handle more flags.
57
58 2001-09-11  Ravi Pratap  <ravi@ximian.com>
59
60         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
61         and not <=
62         (Operator::Define): Re-write logic to get types by using the LookupType method
63         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
64         (Indexer::Define): Ditto.
65         (Event::Define): Ditto.
66         (Property::Define): Ditto.
67         
68 2001-09-10  Ravi Pratap  <ravi@ximian.com>
69
70         * class.cs (TypeContainer::Populate): Now define operators too. 
71         (TypeContainer.Operators): New property to access the list of operators
72         in a type.
73         (Operator.OperatorMethodBuilder): New member to hold the method builder
74         for the operator we are defining.
75         (Operator::Define): Implement.
76
77 2001-09-10  Ravi Pratap  <ravi@ximian.com>
78
79         * class.cs (Event::Define): Make the prefixes of the accessor methods
80         addOn_ and removeOn_ 
81
82         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
83         of the location being passed in too. Ideally, this should go later since all
84         error reporting should be done through the Report object.
85
86         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
87         (Populate): Iterate thru the indexers we have and define them too.
88         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
89         for the get and set accessors.
90         (Indexer::Define): Implement.
91         
92 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
93
94         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
95         my previous implementation, did not work.
96
97         * typemanager.cs: Add a couple of missing types (the longs).
98
99         * literal.cs: Use TypeManager.bool_type instead of getting it.
100
101         * expression.cs (EventExpr): New kind of expressions.
102         (Expressio::ExprClassFromMemberInfo): finish
103
104 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
105
106         * assign.cs: Emit stores to static fields differently.
107
108 2001-09-08  Ravi Pratap  <ravi@ximian.com>
109
110         * Merge in changes and adjust code to tackle conflicts. Backed out my
111         code in Assign::Resolve ;-) 
112
113 2001-09-08  Ravi Pratap  <ravi@ximian.com>
114
115         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
116         instead Report.Error and also pass in the location.
117         (CSharpParser::Lexer): New readonly property to return the reference
118         to the Tokenizer object.
119         (declare_local_variables): Use Report.Error with location instead of plain 
120         old error.
121         (CheckDef): Ditto.
122
123         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
124         (Operator.CheckBinaryOperator): Ditto.
125
126         * cs-parser.jay (operator_declarator): Update accordingly.
127
128         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
129         (CheckBinaryOperator): Same here.
130
131         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
132         on the name without any prefixes of namespace names etc. This is because we
133         already might have something already fully qualified like 
134         'System.Console.WriteLine'
135
136         * assign.cs (Resolve): Begin implementation. Stuck ;-)
137
138 2001-09-07  Ravi Pratap  <ravi@ximian.com>
139
140         * cs-tokenizer.cs (location): Return a string which also contains
141         the file name.
142
143         * expression.cs (ElementAccess): New class for expressions of the
144         type 'element access.'
145         (BaseAccess): New class for expressions of the type 'base access.'
146         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
147         respectively.
148         
149         * cs-parser.jay (element_access): Implement action.
150         (base_access): Implement actions.
151         (checked_expression, unchecked_expression): Implement.
152
153         * cs-parser.jay (local_variable_type): Correct and implement.
154         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
155
156         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
157
158         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
159         name and the specifiers.
160
161         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
162         
163         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
164         making them all public ;-)
165
166         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
167         class anyways.
168         
169 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
170
171         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
172         PropertyExprs.
173         (FieldExpr, PropertyExprs): New resolved expressions.
174         (SimpleName::MemberStaticCheck): Perform static checks for access
175         to non-static fields on static methods. Maybe this should be
176         generalized for MemberAccesses. 
177         (SimpleName::ResolveSimpleName): More work on simple name
178         resolution. 
179
180         * cs-parser.jay (primary_expression/qualified_identifier): track
181         the parameter index.
182
183         * codegen.cs (CodeGen::Save): Catch save exception, report error.
184         (EmitContext::EmitBoolExpression): Chain to expression generation
185         instead of temporary hack.
186         (::EmitStatementExpression): Put generic expression code generation.
187
188         * assign.cs (Assign::Emit): Implement variable assignments to
189         local variables, parameters and fields.
190
191 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
192
193         * statement.cs (Block::GetVariableInfo): New method, returns the
194         VariableInfo for a variable name in a block.
195         (Block::GetVariableType): Implement in terms of GetVariableInfo
196
197         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
198         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
199
200 2001-09-06  Ravi Pratap  <ravi@ximian.com>
201
202         * cs-parser.jay (operator_declaration): Continue on my quest : update
203         to take attributes argument.
204         (event_declaration): Ditto.
205         (enum_declaration): Ditto.
206         (indexer_declaration): Ditto.
207         
208         * class.cs (Operator::Operator): Update constructor accordingly.
209         (Event::Event): Ditto.
210
211         * delegate.cs (Delegate::Delegate): Same here.
212
213         * enum.cs (Enum::Enum): Same here.
214         
215 2001-09-05  Ravi Pratap  <ravi@ximian.com>
216
217         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
218
219         * ../tests/cs0658.cs : New file to demonstrate error 0658.
220
221         * attribute.cs (Attributes): New class to encapsulate all attributes which were
222         being passed around as an arraylist.
223         (Attributes::AddAttribute): Method to add attribute sections.
224
225         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
226         (struct_declaration): Update accordingly.
227         (constant_declaration): Update.
228         (field_declaration): Update.
229         (method_header): Update.
230         (fixed_parameter): Update.
231         (parameter_array): Ditto.
232         (property_declaration): Ditto.
233         (destructor_declaration): Ditto.
234         
235         * class.cs (Struct::Struct): Update constructors accordingly.
236         (Class::Class): Ditto.
237         (Field::Field): Ditto.
238         (Method::Method): Ditto.
239         (Property::Property): Ditto.
240         (TypeContainer::OptAttribute): update property's return type.
241         
242         * interface.cs (Interface.opt_attributes): New member.
243         (Interface::Interface): Update to take the extra Attributes argument.
244
245         * parameter.cs (Parameter::Parameter): Ditto.
246
247         * constant.cs (Constant::Constant): Ditto.
248
249         * interface.cs (InterfaceMemberBase): New OptAttributes field.
250         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
251         the attributes as a parameter.
252         (InterfaceProperty): Update constructor call.
253         (InterfaceEvent): Ditto.
254         (InterfaceMethod): Ditto.
255         (InterfaceIndexer): Ditto.
256
257         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
258         pass the attributes too.
259         (interface_event_declaration): Ditto.
260         (interface_property_declaration): Ditto.
261         (interface_method_declaration): Ditto.
262         (interface_declaration): Ditto.
263
264 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
265
266         * class.cs (Method::Define): Track the "static Main" definition to
267         create an entry point. 
268
269         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
270         EntryPoint if we find it. 
271
272         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
273         (EmitContext::ig): Make this variable public.
274
275         * driver.cs: Make the default output file be the first file name
276         with the .exe extension.  
277
278         Detect empty compilations
279
280         Handle various kinds of output targets.  Handle --target and
281         rename -t to --dumper.
282
283         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
284         methods inherited from Expression return now an Expression.  This
285         will is used during the tree rewriting as we resolve them during
286         semantic analysis.
287
288         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
289         the spec.  Missing entirely is the information about
290         accessability of elements of it.
291
292         (Expression::ExprClassFromMemberInfo): New constructor for
293         Expressions that creates a fully initialized Expression based on
294         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
295         a Type.
296
297         (Invocation::Resolve): Begin implementing resolution of invocations.
298         
299         * literal.cs (StringLiteral):  Implement Emit.
300
301 2001-09-05  Ravi Pratap  <ravi@ximian.com>
302
303         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
304         member.
305         
306 2001-09-04  Ravi Pratap  <ravi@ximian.com>
307
308         * cs-parser.jay (attribute_arguments): Implement actions.
309         (attribute): Fix bug in production. Implement action.
310         (attribute_list): Implement.
311         (attribute_target): Implement.
312         (attribute_target_specifier, opt_target_specifier): Implement
313         (CheckAttributeTarget): New method to check if the attribute target
314         is valid.
315         (attribute_section): Implement.
316         (opt_attributes): Implement.
317
318         * attribute.cs : New file to handle attributes.
319         (Attribute): Class to hold attribute info.
320
321         * cs-parser.jay (opt_attribute_target_specifier): Remove production
322         (attribute_section): Modify production to use 2 different rules to 
323         achieve the same thing. 1 s/r conflict down !
324         Clean out commented, useless, non-reducing dimension_separator rules.
325         
326         * class.cs (TypeContainer.attributes): New member to hold list
327         of attributes for a type.
328         (Struct::Struct): Modify to take one more argument, the attribute list.
329         (Class::Class): Ditto.
330         (Field::Field): Ditto.
331         (Method::Method): Ditto.
332         (Property::Property): Ditto.
333         
334         * cs-parser.jay (struct_declaration): Update constructor call to
335         pass in the attributes too.
336         (class_declaration): Ditto.
337         (constant_declaration): Ditto.
338         (field_declaration): Ditto.
339         (method_header): Ditto.
340         (fixed_parameter): Ditto.
341         (parameter_array): Ditto.
342         (property_declaration): Ditto.
343
344         * constant.cs (Constant::Constant): Update constructor similarly.
345         Use System.Collections.
346
347         * parameter.cs (Parameter::Parameter): Update as above.
348
349 2001-09-02  Ravi Pratap  <ravi@ximian.com>
350
351         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
352         (TypeContainer.delegates): New member to hold list of delegates.
353
354         * cs-parser.jay (delegate_declaration): Implement the action correctly 
355         this time as I seem to be on crack ;-)
356
357 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
358
359         * rootcontext.cs (RootContext::IsNamespace): new function, used to
360         tell whether an identifier represents a namespace.
361
362         * expression.cs (NamespaceExpr): A namespace expression, used only
363         temporarly during expression resolution.
364         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
365         utility functions to resolve names on expressions.
366
367 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
368
369         * codegen.cs: Add hook for StatementExpressions. 
370
371         * class.cs: Fix inverted test for static flag in methods.
372
373 2001-09-02  Ravi Pratap  <ravi@ximian.com>
374
375         * class.cs (Operator::CheckUnaryOperator): Correct error number used
376         to make it coincide with MS' number.
377         (Operator::CheckBinaryOperator): Ditto.
378
379         * ../errors/errors.txt : Remove error numbers added earlier.
380
381         * ../errors/cs1019.cs : Test case for error # 1019
382
383         * ../errros/cs1020.cs : Test case for error # 1020
384
385         * cs-parser.jay : Clean out commented cruft.
386         (dimension_separators, dimension_separator): Comment out. Ostensibly not
387         used anywhere - non-reducing rule.
388         (namespace_declarations): Non-reducing rule - comment out.
389
390         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
391         with TypeContainer::AddEnum.
392
393         * delegate.cs : New file for delegate handling classes.
394         (Delegate): Class for declaring delegates.
395
396         * makefile : Update.
397
398         * cs-parser.jay (delegate_declaration): Implement.
399
400 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
401
402         * class.cs (Event::Define): Implement.
403         (Event.EventBuilder): New member.
404
405         * class.cs (TypeContainer::Populate): Update to define all enums and events
406         we have.
407         (Events): New property for the events arraylist we hold. Shouldn't we move to using
408         readonly fields for all these cases ?
409
410 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
411
412         * class.cs (Property): Revamp to use the convention of making fields readonly.
413         Accordingly modify code elsewhere.
414
415         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
416         the Define method of the Property class.
417
418         * class.cs : Clean up applied patch and update references to variables etc. Fix 
419         trivial bug.
420         (TypeContainer::Populate): Update to define all the properties we have. Also
421         define all enumerations.
422
423         * enum.cs (Define): Implement.
424         
425 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
426
427         * cs-parser.jay (overloadable_operator): The semantic value is an
428         enum of the Operator class.
429         (operator_declarator): Implement actions.
430         (operator_declaration): Implement.
431
432         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
433         validity of definitions.
434         (Operator::CheckBinaryOperator): Static method to check for binary operators
435         (TypeContainer::AddOperator): New method to add an operator to a type.
436
437         * cs-parser.jay (indexer_declaration): Added line to actually call the
438         AddIndexer method so it gets added ;-)
439
440         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
441         already taken care of by the MS compiler ?  
442
443 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
444
445         * class.cs (Operator): New class for operator declarations.
446         (Operator::OpType): Enum for the various operators.
447
448 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
449
450         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
451         ostensibly handle this in semantic analysis.
452
453         * cs-parser.jay (general_catch_clause): Comment out
454         (specific_catch_clauses, specific_catch_clause): Ditto.
455         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
456         (catch_args, opt_catch_args): New productions.
457         (catch_clause): Rewrite to use the new productions above
458         (catch_clauses): Modify accordingly.
459         (opt_catch_clauses): New production to use in try_statement
460         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
461         and re-write the code in the actions to extract the specific and
462         general catch clauses by being a little smart ;-)
463
464         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
465         Hooray, try and catch statements parse fine !
466         
467 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
468
469         * statement.cs (Block::GetVariableType): Fix logic to extract the type
470         string from the hashtable of variables.
471
472         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
473         I end up making that mistake ;-)
474         (catch_clauses): Fixed gross error which made Key and Value of the 
475         DictionaryEntry the same : $1 !!
476
477 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
478
479         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
480
481         * cs-parser.jay (event_declaration): Correct to remove the semicolon
482         when the add and remove accessors are specified. 
483
484 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
485
486         * cs-parser.jay (IndexerDeclaration): New helper class to hold
487         information about indexer_declarator.
488         (indexer_declarator): Implement actions.
489         (parsing_indexer): New local boolean used to keep track of whether
490         we are parsing indexers or properties. This is necessary because 
491         implicit_parameters come into picture even for the get accessor in the 
492         case of an indexer.
493         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
494
495         * class.cs (Indexer): New class for indexer declarations.
496         (TypeContainer::AddIndexer): New method to add an indexer to a type.
497         (TypeContainer::indexers): New member to hold list of indexers for the
498         type.
499
500 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
501
502         * cs-parser.jay (add_accessor_declaration): Implement action.
503         (remove_accessor_declaration): Implement action.
504         (event_accessors_declaration): Implement
505         (variable_declarators): swap statements for first rule - trivial.
506
507         * class.cs (Event): New class to hold information about event
508         declarations.
509         (TypeContainer::AddEvent): New method to add an event to a type
510         (TypeContainer::events): New member to hold list of events.
511
512         * cs-parser.jay (event_declaration): Implement actions.
513
514 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
515
516         * cs-parser.jay (dim_separators): Implement. Make it a string
517         concatenating all the commas together, just as they appear.
518         (opt_dim_separators): Modify accordingly
519         (rank_specifiers): Update accordingly. Basically do the same
520         thing - instead, collect the brackets here.
521         (opt_rank_sepcifiers): Modify accordingly.
522         (array_type): Modify to actually return the complete type string
523         instead of ignoring the rank_specifiers.
524         (expression_list): Implement to collect the expressions
525         (variable_initializer): Implement. We make it a list of expressions
526         essentially so that we can handle the array_initializer case neatly too.
527         (variable_initializer_list): Implement.
528         (array_initializer): Make it a list of variable_initializers
529         (opt_array_initializer): Modify accordingly.
530
531         * expression.cs (New::NType): Add enumeration to help us
532         keep track of whether we have an object/delegate creation
533         or an array creation.
534         (New:NewType, New::Rank, New::Indices, New::Initializers): New
535         members to hold data about array creation.
536         (New:New): Modify to update NewType
537         (New:New): New Overloaded contructor for the array creation
538         case.
539
540         * cs-parser.jay (array_creation_expression): Implement to call
541         the overloaded New constructor.
542         
543 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
544
545         * class.cs (TypeContainer::Constructors): Return member
546         constructors instead of returning null.
547
548 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
549
550         * typemanager.cs (InitCoreTypes): Initialize the various core
551         types after we have populated the type manager with the user
552         defined types (this distinction will be important later while
553         compiling corlib.dll)
554
555         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
556         on Expression Classification.  Now all expressions have a method
557         `Resolve' and a method `Emit'.
558
559         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
560         generation from working.     Also add some temporary debugging
561         code. 
562         
563 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
564
565         * codegen.cs: Lots of code generation pieces.  This is only the
566         beginning, will continue tomorrow with more touches of polish.  We
567         handle the fundamentals of if, while, do, for, return.  Others are
568         trickier and I need to start working on invocations soon.
569         
570         * gen-treedump.cs: Bug fix, use s.Increment here instead of
571         s.InitStatement. 
572
573         * codegen.cs (EmitContext): New struct, used during code
574         emission to keep a context.   Most of the code generation will be
575         here. 
576
577         * cs-parser.jay: Add embedded blocks to the list of statements of
578         this block.  So code generation proceeds in a top down fashion.
579
580 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
581
582         * statement.cs: Add support for multiple child blocks.
583
584 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
585
586         * codegen.cs (EmitCode): New function, will emit the code for a
587         Block of code given a TypeContainer and its ILGenerator. 
588
589         * statement.cs (Block): Standard public readonly optimization.
590         (Block::Block constructors): Link children. 
591         (Block::Child): Child Linker.
592         (Block::EmitVariables): Emits IL variable declarations.
593
594         * class.cs: Drop support for MethodGroups here, delay until
595         Semantic Analysis.
596         (Method::): Applied the same simplification that I did before, and
597         move from Properties to public readonly fields.
598         (Method::ParameterTypes): Returns the parameter types for the
599         function, and implements a cache that will be useful later when I
600         do error checking and the semantic analysis on the methods is
601         performed.
602         (Constructor::GetCallingConvention): Renamed from CallingConvetion
603         and made a method, optional argument tells whether this is a class
604         or a structure to apply the `has-this' bit.
605         (Method::GetCallingConvention): Implement, returns the calling
606         convention. 
607         (Method::Define): Defines the type, a second pass is performed
608         later to populate the methods.
609
610         (Constructor::ParameterTypes): implement a cache similar to the
611         one on Method::ParameterTypes, useful later when we do semantic
612         analysis. 
613
614         (TypeContainer::EmitMethod):  New method.  Emits methods.
615
616         * expression.cs: Removed MethodGroup class from here.
617         
618         * parameter.cs (Parameters::GetCallingConvention): new method.
619
620 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
621
622         * class.cs (TypeContainer::Populate): Drop RootContext from the
623         argument. 
624
625         (Constructor::CallingConvention): Returns the calling convention.
626         (Constructor::ParameterTypes): Returns the constructor parameter
627         types. 
628         
629         (TypeContainer::AddConstructor): Keep track of default constructor
630         and the default static constructor.
631
632         (Constructor::) Another class that starts using `public readonly'
633         instead of properties. 
634
635         (Constructor::IsDefault): Whether this is a default constructor. 
636
637         (Field::) use readonly public fields instead of properties also.
638
639         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
640         track of static constructors;  If none is used, turn on
641         BeforeFieldInit in the TypeAttributes. 
642
643         * cs-parser.jay (opt_argument_list): now the return can be null
644         for the cases where there are no arguments. 
645
646         (constructor_declarator): If there is no implicit `base' or
647         `this', then invoke the default parent constructor. 
648         
649         * modifiers.cs (MethodAttr): New static function maps a set of
650         modifiers flags into a MethodAttributes enum
651         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
652         MethodAttr, TypeAttr to represent the various mappings where the
653         modifiers are used.
654         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
655
656 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
657
658         * parameter.cs (GetParameterInfo): Fix bug where there would be no
659         method arguments.
660
661         * interface.cs (PopulateIndexer): Implemented the code generator
662         for interface indexers.
663
664 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
665
666         * interface.cs (InterfaceMemberBase): Now we track the new status
667         here.  
668
669         (PopulateProperty): Implement property population.  Woohoo!  Got
670         Methods and Properties going today. 
671
672         Removed all the properties for interfaces, and replaced them with
673         `public readonly' fields. 
674
675 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
676
677         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
678         initialize their hashtables/arraylists only when they are needed
679         instead of doing this always.
680
681         * parameter.cs: Handle refs and out parameters.
682
683         * cs-parser.jay: Use an ArrayList to construct the arguments
684         instead of the ParameterCollection, and then cast that to a
685         Parameter[] array.
686
687         * parameter.cs: Drop the use of ParameterCollection and use
688         instead arrays of Parameters.
689
690         (GetParameterInfo): Use the Type, not the Name when resolving
691         types. 
692
693 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
694
695         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
696         and instead use public readonly fields.
697
698         * class.cs: Put back walking code for type containers.
699
700 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
701
702         * class.cs (MakeConstant): Code to define constants.
703
704         * rootcontext.cs (LookupType): New function.  Used to locate types 
705
706         
707 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
708
709         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
710         this System.Reflection code is.  Kudos to Microsoft
711         
712         * typemanager.cs: Implement a type cache and avoid loading all
713         types at boot time.  Wrap in LookupType the internals.  This made
714         the compiler so much faster.  Wow.  I rule!
715         
716         * driver.cs: Make sure we always load mscorlib first (for
717         debugging purposes, nothing really important).
718
719         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
720         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
721
722         * rootcontext.cs: Lookup types on their namespace;  Lookup types
723         on namespaces that have been imported using the `using' keyword.
724
725         * class.cs (TypeContainer::TypeAttr): Virtualize.
726         (Class::TypeAttr): Return attributes suitable for this bad boy.
727         (Struct::TypeAttr): ditto.
728         Handle nested classes.
729         (TypeContainer::) Remove all the type visiting code, it is now
730         replaced with the rootcontext.cs code
731
732         * rootcontext.cs (GetClassBases): Added support for structs. 
733
734 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
735
736         * interface.cs, statement.cs, class.cs, parameter.cs,
737         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
738         Drop use of TypeRefs, and use strings instead.
739
740 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
741
742         * rootcontext.cs: 
743
744         * class.cs (Struct::Struct): set the SEALED flags after
745         checking the modifiers.
746         (TypeContainer::TypeAttr): new property, returns the
747         TypeAttributes for a class.  
748
749         * cs-parser.jay (type_list): Oops, list production was creating a
750         new list of base types.
751
752         * rootcontext.cs (StdLib): New property.
753         (GetInterfaceTypeByName): returns an interface by type name, and
754         encapsulates error handling here.
755         (GetInterfaces): simplified.
756         (ResolveTree): Encapsulated all the tree resolution here.
757         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
758         types. 
759         
760         * driver.cs: Add support for --nostdlib, to avoid loading the
761         default assemblies.
762         (Main): Do not put tree resolution here. 
763
764         * rootcontext.cs: Beginning of the class resolution.
765
766 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
767
768         * rootcontext.cs: Provide better error reporting. 
769
770         * cs-parser.jay (interface_base): set our $$ to be interfaces.
771
772         * rootcontext.cs (CreateInterface): Handle the case where there
773         are no parent interfaces.
774         
775         (CloseTypes): Routine to flush types at the end.
776         (CreateInterface): Track types.
777         (GetInterfaces): Returns an array of Types from the list of
778         defined interfaces.
779
780         * typemanager.c (AddUserType): Mechanism to track user types (puts
781         the type on the global type hash, and allows us to close it at the
782         end). 
783         
784 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
785
786         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
787         RecordInterface instead.
788
789         * cs-parser.jay: Updated to reflect changes above.
790
791         * decl.cs (Definition): Keep track of the TypeBuilder type that
792         represents this type here.  Not sure we will use it in the long
793         run, but wont hurt for now.
794
795         * driver.cs: Smaller changes to accomodate the new code.
796
797         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
798         when done. 
799
800         * rootcontext.cs (CreateInterface):  New method, used to create
801         the System.TypeBuilder type for interfaces.
802         (ResolveInterfaces): new entry point to resolve the interface
803         hierarchy. 
804         (CodeGen): Property, used to keep track of the code generator.
805
806 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
807
808         * cs-parser.jay: Add a second production for delegate_declaration
809         with `VOID'.
810
811         (enum_body): Put an opt_comma here instead of putting it on
812         enum_body or enum_member_declarations so we can handle trailing
813         commas on enumeration members.  Gets rid of a shift/reduce.
814         
815         (type_list): Need a COMMA in the middle.
816
817         (indexer_declaration): Tell tokenizer to recognize get/set
818
819         * Remove old targets.
820
821         * Re-add the parser target.
822
823 2001-07-13  Simon Cozens <simon@simon-cozens.org>
824
825         * cs-parser.jay: Add precendence rules for a number of operators
826         ot reduce the number of shift/reduce conflicts in the grammar.
827         
828 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
829
830         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
831         and put it here.
832
833         Get rid of old crufty code.
834
835         * rootcontext.cs: Use this to keep track of the parsed
836         representation and the defined types available to the program. 
837
838         * gen-treedump.cs: adjust for new convention.
839
840         * type.cs: Split out the type manager, and the assembly builder
841         from here. 
842
843         * typemanager.cs: the type manager will live here now.
844
845         * cil-codegen.cs: And the code generator here. 
846
847 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
848
849         * makefile: Fixed up for easy making.
850
851 2001-07-13  Simon Cozens <simon@simon-cozens.org>
852
853         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
854         the 
855
856         (unary_expression): Expand pre_increment_expression and
857         post_decrement_expression to reduce a shift/reduce.
858
859 2001-07-11  Simon Cozens
860
861         * cs-tokenizer.cs: Hex numbers should begin with a 0.
862
863         Improve allow_keyword_as_indent name.
864
865 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
866
867         * Adjustments for Beta2. 
868
869 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
870
871         * decl.cs: Added `Define' abstract method.
872         (InTransit): new property, used to catch recursive definitions. 
873
874         * interface.cs: Implement `Define'. 
875
876         * modifiers.cs: Map Modifiers.constants to
877         System.Reflection.TypeAttribute flags.
878
879         * class.cs: Keep track of types and user-defined types.
880         (BuilderInit): New method for creating an assembly
881         (ResolveType): New function to launch the resolution process, only
882         used by interfaces for now.
883
884         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
885         that are inserted into the name space. 
886
887 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
888
889         * ARGH.  I have screwed up my tree so many times due to the use of
890         rsync rather than using CVS.  Going to fix this at once. 
891
892         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
893         load types.
894
895 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
896
897         * Experiment successful: Use System.Type rather that our own
898         version of Type.  
899
900 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
901
902         * cs-parser.jay: Removed nsAliases from here.
903
904         Use new namespaces, handle `using XXX;' 
905
906         * namespace.cs: Reimplemented namespace handling, use a recursive
907         definition of the class.  Now we can keep track of using clauses
908         and catch invalid using clauses.
909
910 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
911
912         * gen-treedump.cs: Adapted for all the renaming.
913
914         * expression.cs (Expression): this class now has a Type property
915         which returns an expression Type.
916
917         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
918         `Type', as this has a different meaning now in the base
919
920 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
921
922         * interface.cs, class.cs: Removed from all the sources the
923         references to signature computation, as we can not do method
924         signature computation during the parsing time, as we are not
925         trying to solve at that point distinguishing:
926
927         class X {
928                 void a (Blah x) {}
929                 void a (NS.Blah x) {}
930         }
931
932         Which depending on the context might be valid or not, as we do not
933         know if Blah is the same thing as NS.Blah at that point.
934
935         * Redid everything so the code uses TypeRefs now instead of
936         Types.  TypeRefs are just temporary type placeholders, that need
937         to be resolved.  They initially have a pointer to a string and the
938         current scope in which they are used.  This is used later by the
939         compiler to resolve the reference to an actual Type. 
940
941         * DeclSpace is no longer a CIR.Type, and neither are
942         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
943         are all DeclSpaces, but no Types. 
944
945         * type.cs (TypeRefManager): This implements the TypeRef manager,
946         which keeps track of all the types that need to be resolved after
947         the parsing has finished. 
948
949 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
950
951         * ARGH.  We are going to have to store `foreach' as a class rather
952         than resolving it, as we need to verify error 1579 after name
953         resolution.   *OR* we could keep a flag that says `This request to
954         IEnumerator comes from a foreach statement' which we can then use
955         to generate the error.
956
957 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
958
959         * class.cs (TypeContainer.AddMethod): we now add methods to the
960         MethodGroup instead of the method hashtable.  
961
962         * expression.cs: Add MethodGroup abstraction, which gets us one
963         step closer to the specification in the way we handle method
964         declarations.  
965
966         * cs-parser.jay (primary_expression): qualified_identifier now
967         tried to match up an identifier to a local variable reference or
968         to a parameter reference.
969
970         current_local_parameters is now a parser global variable that
971         points to the current parameters for the block, used during name
972         lookup.
973
974         (property_declaration): Now creates an implicit `value' argument to
975         the set accessor.
976
977 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
978
979         * parameter.cs: Do not use `param' arguments as part of the
980         signature, per the spec.
981
982 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
983
984         * decl.cs: Base class for classes, structs and interfaces.  This
985         is the "Declaration Space" 
986
987         * cs-parser.jay: Use CheckDef for checking declaration errors
988         instead of having one on each function.
989
990         * class.cs: Factor out some code for handling error handling in
991         accordance to the "Declarations" section in the "Basic Concepts"
992         chapter in the ECMA C# spec.
993
994         * interface.cs: Make all interface member classes derive from
995         InterfaceMemberBase.
996
997 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
998
999         * Many things: all interfaces are parsed and generated in
1000         gen-treedump.  Support for member variables, constructors,
1001         destructors, properties, constants is there.
1002
1003         Beginning of the IL backend, but very little done, just there for
1004         testing purposes. 
1005
1006 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
1007
1008         * cs-parser.jay: Fix labeled statement.
1009
1010         * cs-tokenizer.cs (escape): Escape " and ' always.
1011         ref_line, ref_name: keep track of the line/filename as instructed
1012         by #line by the compiler.
1013         Parse #line.
1014
1015 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
1016
1017         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
1018         to match the values in System.CodeDOM.
1019
1020         Divid renamed to Divide.
1021
1022         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
1023         statements. 
1024         (Statements.set): remove.
1025
1026         * System.CodeDOM/CodeCatchClause.cs: always have a valid
1027         statements. 
1028
1029         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
1030         falseStatements always have valid values. 
1031
1032         * cs-parser.jay: Use System.CodeDOM now.
1033