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