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