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