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