2001-10-28 Ravi Pratap <ravi@ximian.com>
[mono.git] / mcs / mcs / ChangeLog
1 2001-10-28  Ravi Pratap  <ravi@ximian.com>
2
3         * typemanager.cs (IsBuiltinType): New method to help determine the same.
4
5         * expression.cs (New::DoResolve): Get rid of array creation code and instead
6         split functionality out into different classes.
7
8         (New::FormArrayType): Move into NewBuiltinArray.
9
10         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
11         quite useless.
12
13         (NewBuiltinArray): New class to handle creation of built-in arrays.
14
15         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
16         account creation of one-dimensional arrays.
17
18         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
19
20         (NewUserdefinedArray::DoResolve): Implement.
21
22         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
23
24         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
25         we maintain inside the TypeManager. This is necessary to perform lookups on the
26         module builder.
27
28         (LookupType): Update to perform GetType on the module builders too.     
29
30         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
31
32         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
33
34 2001-10-23  Ravi Pratap  <ravi@ximian.com>
35
36         * expression.cs (New::DoResolve): Implement guts of array creation.
37
38         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
39         
40 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
41
42         * expression.cs: Fix bug I introduced lsat night that broke
43         Delegates. 
44
45         (Expression.Resolve): Report a 246 error (can not resolve name)
46         if we find a SimpleName in the stream.
47         
48         (Expression.ResolveLValue): Ditto.
49         
50         (Expression.ResolveWithSimpleName): This function is a variant of
51         ResolveName, this one allows SimpleNames to be returned without a
52         warning.  The only consumer of SimpleNames is MemberAccess
53
54 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
55
56         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
57         might arrive here.  I have my doubts that this is correct.
58
59         * statement.cs (Lock): Implement lock statement.
60
61         * cs-parser.jay: Small fixes to support `lock' and `using'
62
63         * cs-tokenizer.cs: Remove extra space
64
65         * driver.cs: New flag --checked, allows to turn on integer math
66         checking. 
67
68         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
69         Threading.Monitor.Exit 
70         
71 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
72
73         * expression.cs (IndexerAccess::DoResolveLValue): Set the
74         Expression Class to be IndexerAccess.
75
76         Notice that Indexer::DoResolve sets the eclass to Value.
77
78 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
79
80         * class.cs (TypeContainer::Emit): Emit code for indexers.
81
82         * assign.cs (IAssignMethod): New interface implemented by Indexers
83         and Properties for handling assignment.
84
85         (Assign::Emit): Simplify and reuse code. 
86         
87         * expression.cs (IndexerAccess, PropertyExpr): Implement
88         IAssignMethod, clean up old code. 
89
90 2001-10-22  Ravi Pratap  <ravi@ximian.com>
91
92         * typemanager.cs (ImplementsInterface): New method to determine if a type
93         implements a given interface. Provides a nice cache too.
94
95         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
96         method.
97
98         (ConvertReferenceExplicit): Ditto.
99
100         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
101         various methods, with correct names etc.
102
103         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
104         Operator.UnaryNegation.
105
106         * cs-parser.jay (operator_declarator): Be a little clever in the case where
107         we have a unary plus or minus operator.
108
109         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
110         UnaryMinus.
111
112         * everywhere : update accordingly.
113
114         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
115         respectively.
116
117         * class.cs (Method::Define): For the case where we are implementing a method
118         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
119         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
120         
121 2001-10-21  Ravi Pratap  <ravi@ximian.com>
122
123         * interface.cs (FindMembers): Implement to work around S.R.E
124         lameness.
125
126         * typemanager.cs (IsInterfaceType): Implement.
127
128         (FindMembers): Update to handle interface types too.
129
130         * expression.cs (ImplicitReferenceConversion): Re-write bits which
131         use IsAssignableFrom as that is not correct - it doesn't work.
132
133         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
134         and accordingly override EmitStatement.
135
136         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
137         using the correct logic :-)
138
139 2001-10-19  Ravi Pratap  <ravi@ximian.com>
140
141         * ../errors/cs-11.cs : Add to demonstrate error -11 
142
143 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
144
145         * assign.cs (Assign::Resolve): Resolve right hand side first, and
146         then pass this as a hint to ResolveLValue.
147         
148         * expression.cs (FieldExpr): Add Location information
149
150         (FieldExpr::LValueResolve): Report assignment to readonly
151         variable. 
152         
153         (Expression::ExprClassFromMemberInfo): Pass location information.
154
155         (Expression::ResolveLValue): Add new method that resolves an
156         LValue. 
157
158         (Expression::DoResolveLValue): Default invocation calls
159         DoResolve. 
160
161         (Indexers): New class used to keep track of indexers in a given
162         Type. 
163
164         (IStackStore): Renamed from LValue, as it did not really describe
165         what this did.  Also ResolveLValue is gone from this interface and
166         now is part of Expression.
167
168         (ElementAccess): Depending on the element access type
169         
170         * typemanager.cs: Add `indexer_name_type' as a Core type
171         (System.Runtime.CompilerServices.IndexerNameAttribute)
172
173         * statement.cs (Goto): Take a location.
174         
175 2001-10-18  Ravi Pratap  <ravi@ximian.com>
176
177         * delegate.cs (Delegate::VerifyDelegate): New method to verify
178         if two delegates are compatible.
179
180         (NewDelegate::DoResolve): Update to take care of the case when
181         we instantiate a delegate from another delegate.
182
183         * typemanager.cs (FindMembers): Don't even try to look up members
184         of Delegate types for now.
185
186 2001-10-18  Ravi Pratap  <ravi@ximian.com>
187
188         * delegate.cs (NewDelegate): New class to take care of delegate
189         instantiation.
190
191         * expression.cs (New): Split the delegate related code out into 
192         the NewDelegate class.
193
194         * delegate.cs (DelegateInvocation): New class to handle delegate 
195         invocation.
196
197         * expression.cs (Invocation): Split out delegate related code into
198         the DelegateInvocation class.
199
200 2001-10-17  Ravi Pratap  <ravi@ximian.com>
201
202         * expression.cs (New::DoResolve): Implement delegate creation fully
203         and according to the spec.
204
205         (New::DoEmit): Update to handle delegates differently.
206
207         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
208         because of which we were printing out arguments in reverse order !
209
210         * delegate.cs (VerifyMethod): Implement to check if the given method
211         matches the delegate.
212
213         (FullDelegateDesc): Implement.
214
215         (VerifyApplicability): Implement.
216
217         * expression.cs (Invocation::DoResolve): Update to accordingly handle
218         delegate invocations too.
219
220         (Invocation::Emit): Ditto.
221
222         * ../errors/cs1593.cs : Added.
223
224         * ../errors/cs1594.cs : Added.
225
226         * delegate.cs (InstanceExpression, TargetMethod): New properties.
227
228 2001-10-16  Ravi Pratap  <ravi@ximian.com>
229
230         * typemanager.cs (intptr_type): Core type for System.IntPtr
231
232         (InitCoreTypes): Update for the same.
233
234         (iasyncresult_type, asynccallback_type): Ditto.
235
236         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
237         correct.
238
239         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
240         too.
241
242         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
243         the builders for the 4 members of a delegate type :-)
244
245         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
246         type.
247
248         * expression.cs (New::DoResolve): Implement guts for delegate creation.
249
250         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
251
252 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
253
254         * statement.cs (Break::Emit): Implement.   
255         (Continue::Emit): Implement.
256
257         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
258         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
259         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
260         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
261         end loop
262         
263         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
264         properties that track the label for the current loop (begin of the
265         loop and end of the loop).
266
267 2001-10-15  Ravi Pratap  <ravi@ximian.com>
268
269         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
270         use of emitting anything at all.
271
272         * class.cs, rootcontext.cs : Get rid of calls to the same.
273
274         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
275
276         (Populate): Define the constructor correctly and set the implementation
277         attributes.
278
279         * typemanager.cs (delegate_types): New hashtable to hold delegates that
280         have been defined.
281
282         (AddDelegateType): Implement.
283
284         (IsDelegateType): Implement helper method.
285
286         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
287
288         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
289         and accordingly handle it.
290
291         * delegate.cs (Populate): Take TypeContainer argument.
292         Implement bits to define the Invoke method. However, I still haven't figured out
293         how to take care of the native int bit :-(
294
295         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
296         Qualify the name of the delegate, not its return type !
297
298         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
299         conversion.
300
301         (StandardConversionExists): Checking for array types turns out to be recursive.
302
303         (ConvertReferenceExplicit): Implement array conversion.
304
305         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
306         
307 2001-10-12  Ravi Pratap  <ravi@ximian.com>
308
309         * cs-parser.jay (delegate_declaration): Store the fully qualified
310         name as it is a type declaration.
311
312         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
313         readonly.
314
315         (DefineDelegate): Renamed from Define. Does the same thing essentially,
316         as TypeContainer::DefineType.
317
318         (Populate): Method in which all the definition of the various methods (Invoke)
319         etc is done.
320
321         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
322         see.
323         
324         (CloseDelegate): Finally creates the delegate.
325
326         * class.cs (TypeContainer::DefineType): Update to define delegates.
327         (Populate, Emit and CloseType): Do the same thing here too.
328
329         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
330         delegates in all these operations.
331
332 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
333
334         * expression.cs: LocalTemporary: a new expression used to
335         reference a temporary that has been created.
336
337         * assign.cs: Handle PropertyAccess back here, so that we can
338         provide the proper semantic access to properties.
339
340         * expression.cs (Expression::ConvertReferenceExplicit): Implement
341         a few more explicit conversions. 
342
343         * modifiers.cs: `NEW' modifier maps to HideBySig.
344
345         * expression.cs (PropertyExpr): Make this into an
346         ExpressionStatement, and support the EmitStatement code path. 
347
348         Perform get/set error checking, clean up the interface.
349
350         * assign.cs: recognize PropertyExprs as targets, and if so, turn
351         them into toplevel access objects.
352
353 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
354
355         * expression.cs: PropertyExpr::PropertyExpr: use work around the
356         SRE.
357
358         * typemanager.cs: Keep track here of our PropertyBuilders again to
359         work around lameness in SRE.
360
361 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
362
363         * expression.cs (LValue::LValueResolve): New method in the
364         interface, used to perform a second resolution pass for LValues. 
365         
366         (This::DoResolve): Catch the use of this in static methods.
367
368         (This::LValueResolve): Implement.
369
370         (This::Store): Remove warning, assigning to `this' in structures
371         is 
372
373         (Invocation::Emit): Deal with invocation of
374         methods on value types.  We need to pass the address to structure
375         methods rather than the object itself.  (The equivalent code to
376         emit "this" for structures leaves the entire structure on the
377         stack instead of a pointer to it). 
378
379         (ParameterReference::DoResolve): Compute the real index for the
380         argument based on whether the method takes or not a `this' pointer
381         (ie, the method is static).
382
383         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
384         value types returned from functions when we need to invoke a
385         method on the sturcture.
386         
387
388 2001-10-11  Ravi Pratap  <ravi@ximian.com>
389
390         * class.cs (TypeContainer::DefineType): Method to actually do the business of
391         defining the type in the Modulebuilder or Typebuilder. This is to take
392         care of nested types which need to be defined on the TypeBuilder using
393         DefineNestedMethod.
394
395         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
396         methods in RootContext, only ported to be part of TypeContainer.
397
398         (TypeContainer::GetInterfaceOrClass): Ditto.
399
400         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
401
402         * interface.cs (Interface::DefineInterface): New method. Does exactly
403         what RootContext.CreateInterface did earlier, only it takes care of nested types 
404         too.
405
406         (Interface::GetInterfaces): Move from RootContext here and port.
407
408         (Interface::GetInterfaceByName): Same here.
409
410         * rootcontext.cs (ResolveTree): Re-write.
411
412         (PopulateTypes): Re-write.
413
414         * class.cs (TypeContainer::Populate): Populate nested types too.
415         (TypeContainer::Emit): Emit nested members too.
416
417         * typemanager.cs (AddUserType): Do not make use of the FullName property,
418         instead just use the name argument passed in as it is already fully
419         qualified.
420
421         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
422         to TypeContainer mapping to see if a type is user-defined.
423
424         * class.cs (TypeContainer::CloseType): Implement. 
425
426         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
427         the default constructor.
428         
429         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
430         twice.
431
432         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
433
434         * interface.cs (CloseType): Create the type here.
435         
436         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
437         the hierarchy.
438
439         Remove all the methods which are now in TypeContainer.
440
441 2001-10-10  Ravi Pratap  <ravi@ximian.com>
442
443         * delegate.cs (Define): Re-write bits to define the delegate
444         correctly.
445
446 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
447
448         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
449
450         * expression.cs (ImplicitReferenceConversion): handle null as well
451         as a source to convert to any reference type.
452
453         * statement.cs (Return): Perform any implicit conversions to
454         expected return type.  
455
456         Validate use of return statement.  
457
458         * codegen.cs (EmitContext): Pass the expected return type here.
459
460         * class.cs (Method, Constructor, Property): Pass expected return
461         type to EmitContext.
462
463 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
464
465         * expression.cs: Make DoResolve take an EmitContext instead of a
466         TypeContainer.
467
468         Replaced `l' and `location' for `loc', for consistency.
469         
470         (Error, Warning): Remove unneeded Tc argument.
471
472         * assign.cs, literal.cs, constant.cs: Update to new calling
473         convention. 
474         
475         * codegen.cs: EmitContext now contains a flag indicating whether
476         code is being generated in a static method or not.
477
478         * cs-parser.jay: DecomposeQI, new function that replaces the old
479         QualifiedIdentifier.  Now we always decompose the assembled
480         strings from qualified_identifier productions into a group of
481         memberaccesses.
482
483 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
484
485         * rootcontext.cs: Deal with field-less struct types correctly now
486         by passing the size option to Define Type.
487
488         * class.cs: Removed hack that created one static field. 
489
490 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
491
492         * statement.cs: Moved most of the code generation here. 
493
494 2001-10-09  Ravi Pratap  <ravi@ximian.com>
495
496         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
497         seem very right.
498
499         (ElementAccess): Remove useless bits for now - keep checks as the spec
500         says.
501
502 2001-10-08  Ravi Pratap  <ravi@ximian.com>
503
504         * expression.cs (ElementAccess::DoResolve): Remove my crap code
505         and start performing checks according to the spec.
506
507 2001-10-07  Ravi Pratap  <ravi@ximian.com>
508
509         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
510         rank_specifiers instead.
511
512         (rank_specifiers): Change the order in which the rank specifiers are stored
513
514         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
515
516         * expression.cs (ElementAccess): Implement the LValue interface too.
517         
518 2001-10-06  Ravi Pratap  <ravi@ximian.com>
519         
520         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
521         except that user defined conversions are not included.
522
523         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
524         perform the conversion of the return type, if necessary.
525
526         (New::DoResolve): Check whether we are creating an array or an object
527         and accordingly do the needful.
528
529         (New::Emit): Same here.
530
531         (New::DoResolve): Implement guts of array creation.
532
533         (New::FormLookupType): Helper function.
534
535 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
536
537         * codegen.cs: Removed most of the code generation here, and move the
538         corresponding code generation bits to the statement classes. 
539
540         Added support for try/catch/finalize and throw.
541         
542         * cs-parser.jay: Added support for try/catch/finalize.
543
544         * class.cs: Catch static methods having the flags override,
545         virtual or abstract.
546
547         * expression.cs (UserCast): This user cast was not really doing
548         what it was supposed to do.  Which is to be born in fully resolved
549         state.  Parts of the resolution were being performed at Emit time! 
550
551         Fixed this code.
552
553 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
554
555         * expression.cs: Implicity convert the result from UserCast.
556
557 2001-10-05  Ravi Pratap  <ravi@ximian.com>
558
559         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
560         prevented it from working correctly. 
561
562         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
563         merely ConvertImplicit.
564
565 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
566
567         * typemanager.cs: Make the LookupTypeContainer function static,
568         and not per-instance.  
569
570         * class.cs: Make static FindMembers (the one that takes a Type
571         argument). 
572
573         * codegen.cs: Add EmitForeach here.
574
575         * cs-parser.jay: Make foreach a toplevel object instead of the
576         inline expansion, as we need to perform semantic analysis on it. 
577
578 2001-10-05  Ravi Pratap  <ravi@ximian.com>
579
580         * expression.cs (Expression::ImplicitUserConversion): Rename to
581         UserDefinedConversion.
582
583         (Expression::UserDefinedConversion): Take an extra argument specifying 
584         whether we look for explicit user conversions too.
585
586         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
587
588         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
589
590         (ExplicitUserConversion): Make it a call to UserDefinedConversion
591         with the appropriate arguments.
592
593         * cs-parser.jay (cast_expression): Record location too.
594
595         * expression.cs (Cast): Record location info.
596
597         (Expression::ConvertExplicit): Take location argument.
598
599         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
600         to determine if we are doing explicit conversions.
601
602         (UserCast::Emit): Update accordingly.
603
604         (Expression::ConvertExplicit): Report an error if everything fails.
605
606         * ../errors/cs0030.cs : Add.
607
608 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
609
610         * modifiers.cs: If the ABSTRACT keyword is present, also set the
611         virtual and newslot bits. 
612
613         * class.cs (TypeContainer::RegisterRequiredImplementations):
614         Record methods we need.
615
616         (TypeContainer::MakeKey): Helper function to make keys for
617         MethodBases, since the Methodbase key is useless.
618
619         (TypeContainer::Populate): Call RegisterRequiredImplementations
620         before defining the methods.   
621
622         Create a mapping for method_builders_to_methods ahead of time
623         instead of inside a tight loop.
624
625         (::RequireMethods):  Accept an object as the data to set into the
626         hashtable so we can report interface vs abstract method mismatch.
627
628 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
629
630         * report.cs: Make all of it static.
631
632         * rootcontext.cs: Drop object_type and value_type computations, as
633         we have those in the TypeManager anyways.
634
635         Drop report instance variable too, now it is a global.
636
637         * driver.cs: Use try/catch on command line handling.
638
639         Add --probe option to debug the error reporting system with a test
640         suite. 
641
642         * report.cs: Add support for exiting program when a probe
643         condition is reached.
644
645 2001-10-03  Ravi Pratap  <ravi@ximian.com>
646
647         * expression.cs (Binary::DoNumericPromotions): Fix the case when
648         we do a forcible conversion regardless of type, to check if 
649         ForceConversion returns a null.
650
651         (Binary::error19): Use location to report error.
652
653         (Unary::error23): Use location here too.
654
655         * ../errors/cs0019.cs : Check in.
656
657         * ../errors/cs0023.cs : Check in.
658
659         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
660         case of a non-null MethodInfo object with a length of 0 !
661
662         (Binary::ResolveOperator): Flag error if overload resolution fails to find
663         an applicable member - according to the spec :-)
664         Also fix logic to find members in base types.
665
666         (Unary::ResolveOperator): Same here.
667
668         (Unary::report23): Change name to error23 and make first argument a TypeContainer
669         as I was getting thoroughly confused between this and error19 :-)
670         
671         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
672         (::FindMostEncompassedType): Implement.
673         (::FindMostEncompassingType): Implement.
674         (::StandardConversionExists): Implement.
675
676         (UserImplicitCast): Re-vamp. We now need info about most specific
677         source and target types so that we can do the necessary conversions.
678
679         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
680         mathematical union with no duplicates.
681
682 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
683
684         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
685         in order from base classes to child classes, so that we can in
686         child classes look up in our parent for method names and
687         attributes (required for handling abstract, virtual, new, override
688         constructs: we need to instrospect our base class, and if we dont
689         populate the classes in order, the introspection might be
690         incorrect.  For example, a method could query its parent before
691         the parent has any methods and would determine that the parent has
692         no abstract methods (while it could have had them)).
693
694         (RootContext::CreateType): Record the order in which we define the
695         classes.
696
697 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
698
699         * class.cs (TypeContainer::Populate): Also method definitions can
700         fail now, keep track of this.
701
702         (TypeContainer::FindMembers): Implement support for
703         DeclaredOnly/noDeclaredOnly flag.
704
705         (Constructor::Emit) Return the ConstructorBuilder.
706
707         (Method::Emit) Return the MethodBuilder. 
708         Check for abstract or virtual methods to be public.
709
710         * rootcontext.cs (RootContext::CreateType): Register all the
711         abstract methods required for the class to be complete and the
712         interface methods that must be implemented. 
713
714         * cs-parser.jay: Report error 501 (method requires body if it is
715         not marked abstract or extern).
716
717         * expression.cs (TypeOf::Emit): Implement.
718
719         * typemanager.cs: runtime_handle_type, new global type.
720
721         * class.cs (Property::Emit): Generate code for properties.
722
723 2001-10-02  Ravi Pratap  <ravi@ximian.com>
724
725         * expression.cs (Unary::ResolveOperator): Find operators on base type
726         too - we now conform exactly to the spec.
727
728         (Binary::ResolveOperator): Same here.
729
730         * class.cs (Operator::Define): Fix minor quirk in the tests.
731
732         * ../errors/cs0215.cs : Added.
733
734         * ../errors/cs0556.cs : Added.
735
736         * ../errors/cs0555.cs : Added.
737
738 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
739
740         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
741         single integer which is really efficient
742
743 2001-10-01  Ravi Pratap  <ravi@ximian.com>
744
745         *  expression.cs (Expression::ImplicitUserConversion): Use location
746         even in the case when we are examining True operators.
747  
748         * class.cs (Operator::Define): Perform extensive checks to conform
749         with the rules for operator overloading in the spec.
750
751         * expression.cs (Expression::ImplicitReferenceConversion): Implement
752         some of the other conversions mentioned in the spec.
753
754         * typemanager.cs (array_type): New static member for the System.Array built-in
755         type.
756
757         (cloneable_interface): For System.ICloneable interface.
758
759         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
760         we start resolving the tree and populating types.
761
762         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
763  
764 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
765
766         * expression.cs (Expression::ExprClassFromMemberInfo,
767         Expression::Literalize): Create literal expressions from
768         FieldInfos which are literals.
769
770         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
771         type casts, because they were wrong.  The test suite in tests
772         caught these ones.
773
774         (ImplicitNumericConversion): ushort to ulong requires a widening
775         cast. 
776
777         Int32 constant to long requires widening cast as well.
778
779         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
780         for integers because the type on the stack is not i4.
781
782 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
783
784         * expression.cs (report118): require location argument. 
785
786         * parameter.cs: Do not dereference potential null value.
787
788         * class.cs: Catch methods that lack the `new' keyword when
789         overriding a name.  Report warnings when `new' is used without
790         anything being there to override.
791
792         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
793
794         * class.cs: Only add constructor to hashtable if it is non-null
795         (as now constructors can fail on define).
796
797         (TypeManager, Class, Struct): Take location arguments.
798
799         Catch field instance initialization in structs as errors.
800
801         accepting_filter: a new filter for FindMembers that is static so
802         that we dont create an instance per invocation.
803
804         (Constructor::Define): Catch errors where a struct constructor is
805         parameterless 
806
807         * cs-parser.jay: Pass location information for various new
808         constructs. 
809         
810         * delegate.cs (Delegate): take a location argument.
811
812         * driver.cs: Do not call EmitCode if there were problesm in the
813         Definition of the types, as many Builders wont be there. 
814
815         * decl.cs (Decl::Decl): Require a location argument.
816
817         * cs-tokenizer.cs: Handle properly hex constants that can not fit
818         into integers, and find the most appropiate integer for it.
819
820         * literal.cs: Implement ULongLiteral.
821
822         * rootcontext.cs: Provide better information about the location of
823         failure when CreateType fails.
824         
825 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
826
827         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
828         as well.
829
830         * expression.cs (Binary::CheckShiftArguments): Add missing type
831         computation.
832         (Binary::ResolveOperator): Add type to the logical and and logical
833         or, Bitwise And/Or and Exclusive Or code paths, it was missing
834         before.
835
836         (Binary::DoNumericPromotions): In the case where either argument
837         is ulong (and most signed types combined with ulong cause an
838         error) perform implicit integer constant conversions as well.
839
840 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
841
842         * expression.cs (UserImplicitCast): Method should always be
843         non-null. 
844         (Invocation::BetterConversion): Simplified test for IntLiteral.
845
846         (Expression::ImplicitNumericConversion): Split this routine out.
847         Put the code that performs implicit constant integer conversions
848         here. 
849
850         (Expression::Resolve): Become a wrapper around DoResolve so we can
851         check eclass and type being set after resolve.
852
853         (Invocation::Badness): Remove this dead function
854
855         (Binary::ResolveOperator): Do not compute the expensive argumnets
856         unless we have a union for it.
857
858         (Probe::Emit): Is needs to do an isinst and then
859         compare against null.
860
861         (::CanConvert): Added Location argument.  If the Location argument
862         is null (Location.Null), then we do not report errors.  This is
863         used by the `probe' mechanism of the Explicit conversion.  We do
864         not want to generate an error for something that the user
865         explicitly requested to be casted.  But the pipeline for an
866         explicit cast first tests for potential implicit casts.
867
868         So for now, if the Location is null, it means `Probe only' to
869         avoid adding another argument.   Might have to revise this
870         strategy later.
871
872         (ClassCast): New class used to type cast objects into arbitrary
873         classes (used in Explicit Reference Conversions).
874
875         Implement `as' as well.
876
877         Reverted all the patches from Ravi below: they were broken:
878
879                 * The use of `level' as a mechanism to stop recursive
880                   invocations is wrong.  That was there just to catch the
881                   bug with a strack trace but not as a way of addressing
882                   the problem.
883
884                   To fix the problem we have to *understand* what is going
885                   on and the interactions and come up with a plan, not
886                   just get things going.
887
888                 * The use of the type conversion cache that I proposed
889                   last night had an open topic: How does this work across
890                   protection domains.  A user defined conversion might not
891                   be public in the location where we are applying the
892                   conversion, a different conversion might be selected
893                   (ie, private A->B (better) but public B->A (worse),
894                   inside A, A->B applies, but outside it, B->A will
895                   apply).
896
897                 * On top of that (ie, even if the above is solved),
898                   conversions in a cache need to be abstract.  Ie, `To
899                   convert from an Int to a Short use an OpcodeCast', not
900                   `To convert from an Int to a Short use the OpcodeCast on
901                   the variable 5' (which is what this patch was doing).
902         
903 2001-09-28  Ravi Pratap  <ravi@ximian.com>
904
905         * expression.cs (Invocation::ConversionExists): Re-write to use
906         the conversion cache
907         
908         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
909         cache all conversions done, not just user-defined ones.
910
911         (Invocation::BetterConversion): The real culprit. Use ConversionExists
912         to determine if a conversion exists instead of acutually trying to 
913         perform the conversion. It's faster too.
914
915         (Expression::ConvertExplicit): Modify to use ConversionExists to check
916         and only then attempt the implicit conversion.
917
918 2001-09-28  Ravi Pratap  <ravi@ximian.com>
919
920         * expression.cs (ConvertImplicit): Use a cache for conversions
921         already found. Check level of recursion and bail out if necessary.
922         
923 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
924
925         * typemanager.cs (string_concat_string_string, string_concat_object_object):
926         Export standard methods that we expect for string operations.
927         
928         * statement.cs (Block::UsageWarning): Track usage of variables and
929         report the errors for not used variables.
930
931         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
932         operator. 
933
934 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
935
936         * codegen.cs: remove unnneded code 
937
938         * expression.cs: Removed BuiltinTypeAccess class
939
940         Fix the order in which implicit conversions are
941         done.  
942
943         The previous fixed dropped support for boxed conversions (adding a
944         test to the test suite now)
945
946         (UserImplicitCast::CanConvert): Remove test for source being null,
947         that code is broken.  We should not feed a null to begin with, if
948         we do, then we should track the bug where the problem originates
949         and not try to cover it up here.
950
951         Return a resolved expression of type UserImplicitCast on success
952         rather than true/false.  Ravi: this is what I was talking about,
953         the pattern is to use a static method as a "constructor" for
954         objects. 
955
956         Also, do not create arguments until the very last minute,
957         otherwise we always create the arguments even for lookups that
958         will never be performed. 
959
960         (UserImplicitCast::Resolve): Eliminate, objects of type
961         UserImplicitCast are born in a fully resolved state. 
962         
963         * typemanager.cs (InitCoreTypes): Init also value_type
964         (System.ValueType). 
965
966         * expression.cs (Cast::Resolve): First resolve the child expression.
967
968         (LValue): Add new method AddressOf to be used by
969         the `&' operator.  
970
971         Change the argument of Store to take an EmitContext instead of an
972         ILGenerator, because things like FieldExpr need to be able to call
973         their children expression to generate the instance code. 
974
975         (Expression::Error, Expression::Warning): Sugar functions for
976         reporting errors.
977
978         (Expression::MemberLookup): Accept a TypeContainer instead of a
979         Report as the first argument.
980
981         (Expression::ResolvePrimary): Killed.  I still want to improve
982         this as currently the code is just not right.
983
984         (Expression::ResolveMemberAccess): Simplify, but it is still
985         wrong. 
986
987         (Unary::Resolve): Catch errors in AddressOf operators.
988
989         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
990         index to a byte for the short-version, or the compiler will choose
991         the wrong Emit call, which generates the wrong data.
992
993         (ParameterReference::Emit, ::Store): same.
994
995         (FieldExpr::AddressOf): Implement.
996         
997         * typemanager.cs: TypeManager: made public variable instead of
998         property.
999         
1000         * driver.cs: document --fatal.
1001
1002         * report.cs (ErrorMessage, WarningMessage): new names for the old
1003         Error and Warning classes.
1004
1005         * cs-parser.jay (member_access): Turn built-in access to types
1006         into a normal simplename
1007
1008 2001-09-27  Ravi Pratap  <ravi@ximian.com>
1009
1010         * expression.cs (Invocation::BetterConversion): Fix to cope
1011         with q being null, since this was introducing a bug.
1012
1013         * expression.cs (ConvertImplicit): Do built-in conversions first.
1014
1015 2001-09-27  Ravi Pratap  <ravi@ximian.com>
1016
1017         * expression.cs (UserImplicitCast::Resolve): Fix bug.
1018
1019 2001-09-27  Ravi Pratap  <ravi@ximian.com>
1020
1021         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
1022         I had introduced long ago (what's new ?).
1023
1024         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
1025         the work of all the checking. 
1026         (ConvertImplicit): Call CanConvert and only then create object if necessary.
1027         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
1028
1029         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
1030         that is the right way. 
1031
1032         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
1033         overloading resolution. Use everywhere instead of cutting and pasting code.
1034
1035         (Binary::ResolveOperator): Use MakeUnionSet.
1036
1037         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
1038         we have to convert to bool types. Not complete yet.
1039         
1040 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
1041
1042         * typemanager.cs (TypeManager::CSharpName): support ushort.
1043
1044         * expression.cs (Expression::TryImplicitIntConversion): Attempts
1045         to provide an expression that performsn an implicit constant int
1046         conversion (section 6.1.6).
1047         (Expression::ConvertImplicitRequired): Reworked to include
1048         implicit constant expression conversions.
1049
1050         (Expression::ConvertNumericExplicit): Finished.
1051
1052         (Invocation::Emit): If InstanceExpression is null, then it means
1053         that we perform a call on this.
1054         
1055 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
1056
1057         * expression.cs (Unary::Emit): Remove some dead code.
1058         (Probe): Implement Resolve and Emit for `is'.
1059         (Expression::ConvertImplicitRequired): Attempt to do constant
1060         expression conversions here.  Maybe should be moved to
1061         ConvertImplicit, but I am not sure.
1062         (Expression::ImplicitLongConstantConversionPossible,
1063         Expression::ImplicitIntConstantConversionPossible): New functions
1064         that tell whether is it possible to apply an implicit constant
1065         expression conversion.
1066
1067         (ConvertNumericExplicit): Started work on explicit numeric
1068         conversions.
1069
1070         * cs-parser.jay: Update operator constants.
1071
1072         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
1073         (Parameters::GetSignature): Hook up VerifyArgs here.
1074         (Parameters::VerifyArgs): Verifies that no two arguments have the
1075         same name. 
1076
1077         * class.cs (Operator): Update the operator names to reflect the
1078         ones that the spec expects (as we are just stringizing the
1079         operator names).
1080         
1081         * expression.cs (Unary::ResolveOperator): Fix bug: Use
1082         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
1083         previous usage did only work for our methods.
1084         (Expression::ConvertImplicit): Handle decimal implicit numeric
1085         conversions as well.
1086         (Expression::InternalTypeConstructor): Used to invoke constructors
1087         on internal types for default promotions.
1088
1089         (Unary::Emit): Implement special handling for the pre/post
1090         increment/decrement for overloaded operators, as they need to have
1091         the same semantics as the other operators.
1092
1093         (Binary::ResolveOperator): ditto.
1094         (Invocation::ConversionExists): ditto.
1095         (UserImplicitCast::Resolve): ditto.
1096         
1097 2001-09-26  Ravi Pratap  <ravi@ximian.com>
1098
1099         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
1100         operator, return after emitting body. Regression tests pass again !
1101
1102         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
1103         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
1104         (Invocation::OverloadResolve): Ditto.
1105         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
1106
1107         * everywhere : update calls to the above methods accordingly.
1108
1109 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
1110
1111         * assign.cs (Assign): Make it inherit from ExpressionStatement.
1112
1113         * expression.cs (ExpressionStatement): New base class used for
1114         expressions that can appear in statements, so that we can provide
1115         an alternate path to generate expression that do not leave a value
1116         on the stack.
1117
1118         (Expression::Emit, and all the derivatives): We no longer return
1119         whether a value is left on the stack or not.  Every expression
1120         after being emitted leaves a single value on the stack.
1121
1122         * codegen.cs (EmitContext::EmitStatementExpression): Use the
1123         facilties of ExpressionStatement if possible.
1124
1125         * cs-parser.jay: Update statement_expression.
1126
1127 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
1128
1129         * driver.cs: Change the wording of message
1130
1131 2001-09-25  Ravi Pratap  <ravi@ximian.com>
1132
1133         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
1134         the type of the expression to the return type of the method if
1135         we have an overloaded operator match ! The regression tests pass again !
1136         (Unary::ResolveOperator): Ditto.
1137
1138         * expression.cs (Invocation::ConversionExists): Correct the member lookup
1139         to find "op_Implicit", not "implicit" ;-)
1140         (UserImplicitCast): New class to take care of user-defined implicit conversions.
1141         (ConvertImplicit, ForceConversion): Take TypeContainer argument
1142
1143         * everywhere : Correct calls to the above accordingly.
1144
1145         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
1146         (ConvertImplicit): Do user-defined conversion if it exists.
1147
1148 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
1149
1150         * assign.cs: track location.
1151         (Resolve): Use implicit conversions on assignment.
1152
1153         * literal.cs: Oops.  Not good, Emit of short access values should
1154         pass (Bytes) or the wrong argument will be selected.
1155
1156         * expression.cs (Unary::Emit): Emit code for -expr.
1157         
1158         (Unary::ResolveOperator): Handle `Substract' for non-constants
1159         (substract from zero from the non-constants).
1160         Deal with Doubles as well. 
1161         
1162         (Expression::ConvertImplicitRequired): New routine that reports an
1163         error if no implicit conversion exists. 
1164
1165         (Invocation::OverloadResolve): Store the converted implicit
1166         expressions if we make them
1167         
1168 2001-09-24  Ravi Pratap  <ravi@ximian.com>
1169
1170         * class.cs (ConstructorInitializer): Take a Location argument.
1171         (ConstructorBaseInitializer): Same here.
1172         (ConstructorThisInitializer): Same here.
1173
1174         * cs-parser.jay : Update all calls accordingly.
1175
1176         * expression.cs (Unary, Binary, New): Take location argument.
1177         Update accordingly everywhere.
1178
1179         * cs-parser.jay : Update all calls to the above to take a location
1180         argument.
1181
1182         * class.cs : Ditto.
1183
1184 2001-09-24  Ravi Pratap  <ravi@ximian.com>
1185
1186         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
1187         (Invocation::BetterConversion): Same here
1188         (Invocation::ConversionExists): Ditto.
1189
1190         (Invocation::ConversionExists): Implement.
1191
1192 2001-09-22  Ravi Pratap  <ravi@ximian.com>
1193
1194         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
1195         Also take an additional TypeContainer argument.
1196
1197         * All over : Pass in TypeContainer as argument to OverloadResolve.
1198
1199         * typemanager.cs (CSharpName): Update to check for the string type and return
1200         that too.
1201
1202         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
1203         a given method.
1204         
1205 2001-09-21  Ravi Pratap  <ravi@ximian.com>
1206
1207         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
1208         (Invocation::BetterFunction): Implement.
1209         (Invocation::BetterConversion): Implement.
1210         (Invocation::ConversionExists): Skeleton, no implementation yet.
1211
1212         Okay, things work fine !
1213
1214 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
1215
1216         * typemanager.cs: declare and load enum_type, delegate_type and
1217         void_type. 
1218
1219         * expression.cs (Expression::Emit): Now emit returns a value that
1220         tells whether a value is left on the stack or not.  This strategy
1221         might be reveted tomorrow with a mechanism that would address
1222         multiple assignments.
1223         (Expression::report118): Utility routine to report mismatches on
1224         the ExprClass.
1225
1226         (Unary::Report23): Report impossible type/operator combination
1227         utility function.
1228
1229         (Unary::IsIncrementableNumber): Whether the type can be
1230         incremented or decremented with add.
1231         (Unary::ResolveOperator): Also allow enumerations to be bitwise
1232         complemented. 
1233         (Unary::ResolveOperator): Implement ++, !, ~, ++ and --.
1234
1235         (Invocation::Emit): Deal with new Emit convetion.
1236         
1237         * All Expression derivatives: Updated their Emit method to return
1238         whether they leave values on the stack or not.
1239         
1240         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
1241         stack for expressions that are statements. 
1242
1243 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
1244
1245         * expression.cs (LValue): New interface.  Must be implemented by
1246         LValue objects.
1247         (LocalVariableReference, ParameterReference, FieldExpr): Implement
1248         LValue interface.
1249         
1250         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
1251         interface for generating code, simplifies the code.
1252
1253 2001-09-20  Ravi Pratap  <ravi@ximian.com>
1254
1255         * expression.cs (everywhere): Comment out return statements in ::Resolve
1256         methods to avoid the warnings.
1257
1258 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
1259
1260         * driver.cs (parse): Report error 2001 if we can not open the
1261         source file.
1262
1263         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
1264         not resolve it.
1265
1266         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
1267         object. 
1268
1269         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
1270         otherwise nested blocks end up with the same index.
1271
1272         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
1273
1274         * expression.cs:  Instead of having FIXMEs in the Resolve
1275         functions, throw exceptions so it is obvious that we are facing a
1276         bug. 
1277
1278         * cs-parser.jay (invocation_expression): Pass Location information.
1279
1280         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
1281         Use a basename for those routines because .NET does not like paths
1282         on them. 
1283
1284         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
1285         already defined.
1286
1287 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
1288
1289         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
1290         are loading the correct data types (throws an exception if not).
1291         (TypeManager::InitCoreTypes): Use CoreLookupType
1292
1293         * expression.cs (Unary::ResolveOperator): return the child
1294         expression for expressions which are just +expr.
1295         (Unary::ResolveOperator): Return negative literals for -LITERAL
1296         expressions (otherwise they are Unary {Literal}).
1297         (Invocation::Badness): Take into account `Implicit constant
1298         expression conversions'.
1299
1300         * literal.cs (LongLiteral): Implement long literal class.
1301         (IntLiteral): export the `Value' of the intliteral. 
1302
1303 2001-09-19  Ravi Pratap  <ravi@ximian.com>
1304
1305         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
1306
1307         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
1308         instead of 'Operator'
1309
1310         * expression.cs (Binary::ResolveOperator): Update accordingly.
1311         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
1312         and 'Minus'
1313
1314         * cs-parser.jay (unary_expression): Update to use the new names.
1315
1316         * gen-treedump.cs (GetUnary): Same here.
1317
1318         * expression.cs (Unary::Resolve): Implement.
1319         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
1320         operators are found instead of making noise ;-)
1321         (Unary::ResolveOperator): New method to do precisely the same thing which
1322         Binary::ResolveOperator does for Binary expressions.
1323         (Unary.method, .Arguments): Add.
1324         (Unary::OperName): Implement.   
1325         (Unary::ForceConversion): Copy and Paste !
1326
1327         * class.cs (Operator::Define): Fix a small bug for the case when we have 
1328         a unary operator.
1329
1330         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
1331         for the inbuilt operators. Only overloading works for now ;-)
1332
1333 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
1334
1335         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
1336         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
1337
1338         * expression.cs (This::Emit): Implement. 
1339         (This::Resolve): Implement.
1340         (TypeOf:Resolve): Implement.
1341         (Expression::ResolveSimpleName): Add an implicit this to instance
1342         field references. 
1343         (MemberAccess::Resolve): Deal with Parameters and Fields. 
1344         Bind instance variable to Field expressions.
1345         (FieldExpr::Instance): New field used to track the expression that
1346         represents the object instance.
1347         (FieldExpr::Resolve): Track potential errors from MemberLookup not
1348         binding 
1349         (FieldExpr::Emit): Implement.
1350
1351         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
1352         the last instruction contains a return opcode to avoid generating
1353         the last `ret' instruction (this generates correct code, and it is
1354         nice to pass the peverify output).
1355
1356         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
1357         initializer for static and instance variables.
1358         (Constructor::Emit): Allow initializer to be null in the case of
1359         static constructors.  Only emit initializer for instance
1360         constructors. 
1361
1362         (TypeContainer::FindMembers): Return a null array if there are no
1363         matches.
1364
1365         Also fix the code for the MemberTypes.Method branch, as it was not
1366         scanning that for operators (or tried to access null variables before).
1367
1368         * assign.cs (Assign::Emit): Handle instance and static fields. 
1369
1370         * TODO: Updated.
1371
1372         * driver.cs: Stop compilation if there are parse errors.
1373
1374         * cs-parser.jay (constructor_declaration): Provide default base
1375         initializer for non-static constructors.
1376         (constructor_declarator): Do not provide a default base
1377         initializers if none was specified.
1378         Catch the fact that constructors should not have parameters.
1379
1380         * class.cs: Do not emit parent class initializers for static
1381         constructors, that should be flagged as an error.
1382
1383 2001-09-18  Ravi Pratap  <ravi@ximian.com>
1384
1385         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
1386         Move back code into TypeContainer::Populate.
1387
1388 2001-09-18  Ravi Pratap  <ravi@ximian.com>
1389
1390         * class.cs (TypeContainer::AddConstructor): Fix the check to
1391         compare against Name, not Basename. 
1392         (Operator::OpType): Change Plus and Minus to Add and Subtract.
1393
1394         * cs-parser.jay : Update accordingly.
1395
1396         * class.cs (TypeContainer::FindMembers): For the case where we are searching
1397         for methods, don't forget to look into the operators too.
1398         (RegisterMethodBuilder): Helper method to take care of this for
1399         methods, constructors and operators.
1400         (Operator::Define): Completely revamp.
1401         (Operator.OperatorMethod, MethodName): New fields.
1402         (TypeContainer::Populate): Move the registering of builders into
1403         RegisterMethodBuilder.
1404         (Operator::Emit): Re-write.
1405
1406         * expression.cs (Binary::Emit): Comment out code path to emit method
1407         invocation stuff for the case when we have a user defined operator. I am
1408         just not able to get it right !
1409         
1410 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
1411
1412         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
1413         argument. 
1414
1415         (Expression::MemberLookup): Provide a version that allows to
1416         specify the MemberTypes and BindingFlags. 
1417
1418         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
1419         so it was not fetching variable information from outer blocks.
1420
1421         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
1422         Beforefieldinit as it was buggy.
1423
1424         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
1425         that Ravi put here.  
1426
1427         * class.cs (Constructor::Emit): Only emit if block is not null.
1428         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
1429         deal with this by semantically definining it as if the user had
1430         done it.
1431
1432         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
1433         constructors as we now "emit" them at a higher level.
1434
1435         (TypeContainer::DefineDefaultConstructor): Used to define the
1436         default constructors if none was provided.
1437
1438         (ConstructorInitializer): Add methods Resolve and Emit. 
1439         
1440         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
1441
1442 2001-09-17  Ravi Pratap  <ravi@ximian.com>
1443
1444         * class.cs (TypeContainer::EmitDefaultConstructor): Register
1445         the default constructor builder with our hashtable for methodbuilders
1446         to methodcores.
1447
1448         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
1449         and argument_count is 0 in which case we have a match.
1450         (Binary::ResolveOperator): More null checking and miscellaneous coding
1451         style cleanup.
1452
1453 2001-09-17  Ravi Pratap  <ravi@ximian.com>
1454
1455         * rootcontext.cs (IsNameSpace): Compare against null.
1456
1457         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
1458
1459         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
1460         and Unary::Operator.
1461
1462         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
1463         accordingly.
1464
1465         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
1466         we have overloaded operators.
1467         (Binary::ResolveOperator): Implement the part which does the operator overload
1468         resolution.
1469
1470         * class.cs (Operator::Emit): Implement.
1471         (TypeContainer::Emit): Emit the operators we have too.
1472
1473         * expression.cs (Binary::Emit): Update to emit the appropriate code for
1474         the case when we have a user-defined operator.
1475         
1476 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
1477
1478         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
1479
1480 2001-09-16  Ravi Pratap  <ravi@ximian.com>
1481
1482         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
1483         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
1484         (Constructor::Emit): Implement.
1485         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
1486         if we have no work to do. 
1487         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
1488         Emit method.
1489
1490         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
1491         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
1492
1493         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
1494         of parent.parent.
1495
1496 2001-09-15  Ravi Pratap  <ravi@ximian.com>
1497
1498         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
1499         in the source.
1500         (Tree::RecordNamespace): Method to do what the name says ;-)
1501         (Tree::Namespaces): Property to get at the namespaces hashtable.
1502
1503         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
1504         keep track.
1505
1506         * rootcontext.cs (IsNamespace): Fixed it :-)
1507
1508 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
1509
1510         * class.cs (TypeContainer::FindMembers): Add support for
1511         constructors. 
1512         (MethodCore): New class that encapsulates both the shared aspects
1513         of a Constructor and a Method.  
1514         (Method, Constructor): Factored pieces into MethodCore.
1515
1516         * driver.cs: Added --fatal which makes errors throw exceptions.
1517         Load System assembly as well as part of the standard library.
1518
1519         * report.cs: Allow throwing exceptions on errors for debugging.
1520
1521         * modifiers.cs: Do not use `parent', instead use the real type
1522         container to evaluate permission settings.
1523
1524         * class.cs: Put Ravi's patch back in.  He is right, and we will
1525         have to cope with the
1526
1527 2001-09-14  Ravi Pratap  <ravi@ximian.com>
1528
1529         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
1530         FamORAssem, not FamANDAssem.
1531         
1532 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
1533
1534         * driver.cs: Added --parse option that only parses its input files
1535         and terminates.
1536
1537         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
1538         incorrect.  IsTopLevel is not used to tell whether an object is
1539         root_types or not (that can be achieved by testing this ==
1540         root_types).  But to see if this is a top-level *class* (not
1541         necessarly our "toplevel" container). 
1542
1543 2001-09-14  Ravi Pratap  <ravi@ximian.com>
1544
1545         * enum.cs (Enum::Define): Modify to call the Lookup method on the
1546         parent instead of a direct call to GetType.
1547
1548 2001-09-14  Ravi Pratap  <ravi@ximian.com>
1549
1550         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
1551         Modifiers.TypeAttr. This should just be a call to that method.
1552
1553         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
1554         object so that we can determine if we are top-level or not.
1555
1556         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
1557         TypeContainer too.
1558
1559         * enum.cs (Enum::Define): Ditto.
1560
1561         * modifiers.cs (FieldAttr): Re-write.
1562
1563         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
1564         (TypeContainer::HaveStaticConstructor): New property to provide access
1565         to precisely that info.
1566
1567         * modifiers.cs (MethodAttr): Re-write.
1568         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
1569
1570         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
1571         of top-level types as claimed.
1572         
1573 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
1574
1575         * expression.cs (MemberLookup): Fruitless attempt to lookup
1576         constructors.  Maybe I need to emit default constructors?  That
1577         might be it (currently .NET emits this for me automatically).
1578         (Invocation::OverloadResolve): Cope with Arguments == null.
1579         (Invocation::EmitArguments): new function, shared by the new
1580         constructor and us.
1581         (Invocation::Emit): Handle static and instance methods.  Emit
1582         proper call instruction for virtual or non-virtual invocations.
1583         (New::Emit): Implement.
1584         (New::Resolve): Implement.
1585         (MemberAccess:Resolve): Implement.
1586         (MethodGroupExpr::InstanceExpression): used conforming to the spec
1587         to track instances.
1588         (FieldExpr::Resolve): Set type.
1589
1590         * support.cs: Handle empty arguments.
1591                 
1592         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
1593         SimpleLookup): Auxiliary routines to help parse a qualifier
1594         identifier.  
1595
1596         Update qualifier_identifier rule.
1597
1598         * codegen.cs: Removed debugging messages.
1599
1600         * class.cs: Make this a global thing, this acts just as a "key" to
1601         objects that we might have around.
1602
1603         (Populate): Only initialize method_builders_to_methods once.
1604
1605         * expression.cs (PropertyExpr): Initialize type from the
1606         PropertyType. 
1607
1608         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
1609         Resolve pattern.  Attempt to implicitly convert value to boolean.
1610         Emit code.
1611
1612         * expression.cs: Set the type for the int32/int32 argument case.
1613         (Binary::ResolveOperator): Set the return type to boolean for
1614         comparission operators
1615
1616         * typemanager.cs: Remove debugging print code.
1617
1618         (Invocation::Resolve): resolve type.
1619
1620         * class.cs: Allocate a MemberInfo of the correct size, as the code
1621         elsewhere depends on the test to reflect the correct contents.
1622
1623         (Method::) Keep track of parameters, due to System.Reflection holes
1624
1625         (TypeContainer::Populate): Keep track of MethodBuilders to Method
1626         mapping here.
1627
1628         (TypeContainer::FindMembers): Use ArrayList and then copy an array
1629         of the exact size and return that.
1630
1631         (Class::LookupMethodByBuilder): New function that maps
1632         MethodBuilders to its methods.  Required to locate the information
1633         on methods because System.Reflection bit us again.
1634
1635         * support.cs: New file, contains an interface ParameterData and
1636         two implementations: ReflectionParameters and InternalParameters
1637         used to access Parameter information.  We will need to grow this
1638         as required.
1639
1640         * expression.cs (Invocation::GetParameterData): implement a cache
1641         and a wrapper around the ParameterData creation for methods. 
1642         (Invocation::OverloadResolve): Use new code.
1643
1644 2001-09-13  Ravi Pratap  <ravi@ximian.com>
1645
1646         * class.cs (TypeContainer::EmitField): Remove and move into 
1647         (Field::Define): here and modify accordingly.
1648         (Field.FieldBuilder): New member.
1649         (TypeContainer::Populate): Update accordingly.
1650         (TypeContainer::FindMembers): Implement.
1651
1652 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
1653
1654         * statement.cs: (VariableInfo::VariableType): New field to be
1655         initialized with the full type once it is resolved. 
1656
1657 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
1658
1659         * parameter.cs (GetParameterInfo): Use a type cache to compute
1660         things only once, and to reuse this information
1661
1662         * expression.cs (LocalVariableReference::Emit): Implement.
1663         (OpcodeCast::Emit): fix.
1664
1665         (ParameterReference::Resolve): Implement.
1666         (ParameterReference::Emit): Implement.
1667
1668         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
1669         that are expressions need to stay as Expressions.
1670
1671         * typemanager.cs (CSharpName): Returns the C# name of a type if
1672         possible. 
1673
1674         * expression.cs (Expression::ConvertImplicit): New function that
1675         implements implicit type conversions.
1676
1677         (Expression::ImplicitReferenceConversion): Implements implicit
1678         reference conversions.
1679
1680         (EmptyCast): New type for transparent casts.
1681
1682         (OpcodeCast): New type for casts of types that are performed with
1683         a sequence of bytecodes.
1684         
1685         (BoxedCast): New type used for casting value types into reference
1686         types.  Emits a box opcode.
1687
1688         (Binary::DoNumericPromotions): Implements numeric promotions of
1689         and computation of the Binary::Type.
1690
1691         (Binary::EmitBranchable): Optimization.
1692
1693         (Binary::Emit): Implement code emission for expressions.
1694         
1695         * typemanager.cs (TypeManager): Added two new core types: sbyte
1696         and byte.
1697
1698 2001-09-12  Ravi Pratap  <ravi@ximian.com>
1699
1700         * class.cs (TypeContainer::FindMembers): Method which does exactly
1701         what Type.FindMembers does, only we don't have to use reflection. No
1702         implementation yet.
1703
1704         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
1705         typecontainer objects as we need to get at them.
1706         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
1707
1708         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
1709         typecontainer object.
1710
1711         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
1712         of just a Report object.
1713
1714 2001-09-11  Ravi Pratap  <ravi@ximian.com>
1715
1716         * class.cs (Event::Define): Go back to using the prefixes "add_" and
1717         "remove_"
1718         (TypeContainer::Populate): Now define the delegates of the type too.
1719         (TypeContainer.Delegates): Property to access the list of delegates defined
1720         in the type.
1721
1722         * delegates.cs (Delegate::Define): Implement partially.
1723
1724         * modifiers.cs (TypeAttr): Handle more flags.
1725
1726 2001-09-11  Ravi Pratap  <ravi@ximian.com>
1727
1728         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
1729         and not <=
1730         (Operator::Define): Re-write logic to get types by using the LookupType method
1731         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
1732         (Indexer::Define): Ditto.
1733         (Event::Define): Ditto.
1734         (Property::Define): Ditto.
1735         
1736 2001-09-10  Ravi Pratap  <ravi@ximian.com>
1737
1738         * class.cs (TypeContainer::Populate): Now define operators too. 
1739         (TypeContainer.Operators): New property to access the list of operators
1740         in a type.
1741         (Operator.OperatorMethodBuilder): New member to hold the method builder
1742         for the operator we are defining.
1743         (Operator::Define): Implement.
1744
1745 2001-09-10  Ravi Pratap  <ravi@ximian.com>
1746
1747         * class.cs (Event::Define): Make the prefixes of the accessor methods
1748         addOn_ and removeOn_ 
1749
1750         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
1751         of the location being passed in too. Ideally, this should go later since all
1752         error reporting should be done through the Report object.
1753
1754         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
1755         (Populate): Iterate thru the indexers we have and define them too.
1756         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
1757         for the get and set accessors.
1758         (Indexer::Define): Implement.
1759         
1760 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
1761
1762         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
1763         my previous implementation, did not work.
1764
1765         * typemanager.cs: Add a couple of missing types (the longs).
1766
1767         * literal.cs: Use TypeManager.bool_type instead of getting it.
1768
1769         * expression.cs (EventExpr): New kind of expressions.
1770         (Expressio::ExprClassFromMemberInfo): finish
1771
1772 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
1773
1774         * assign.cs: Emit stores to static fields differently.
1775
1776 2001-09-08  Ravi Pratap  <ravi@ximian.com>
1777
1778         * Merge in changes and adjust code to tackle conflicts. Backed out my
1779         code in Assign::Resolve ;-) 
1780
1781 2001-09-08  Ravi Pratap  <ravi@ximian.com>
1782
1783         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
1784         instead Report.Error and also pass in the location.
1785         (CSharpParser::Lexer): New readonly property to return the reference
1786         to the Tokenizer object.
1787         (declare_local_variables): Use Report.Error with location instead of plain 
1788         old error.
1789         (CheckDef): Ditto.
1790
1791         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
1792         (Operator.CheckBinaryOperator): Ditto.
1793
1794         * cs-parser.jay (operator_declarator): Update accordingly.
1795
1796         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
1797         (CheckBinaryOperator): Same here.
1798
1799         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
1800         on the name without any prefixes of namespace names etc. This is because we
1801         already might have something already fully qualified like 
1802         'System.Console.WriteLine'
1803
1804         * assign.cs (Resolve): Begin implementation. Stuck ;-)
1805
1806 2001-09-07  Ravi Pratap  <ravi@ximian.com>
1807
1808         * cs-tokenizer.cs (location): Return a string which also contains
1809         the file name.
1810
1811         * expression.cs (ElementAccess): New class for expressions of the
1812         type 'element access.'
1813         (BaseAccess): New class for expressions of the type 'base access.'
1814         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
1815         respectively.
1816         
1817         * cs-parser.jay (element_access): Implement action.
1818         (base_access): Implement actions.
1819         (checked_expression, unchecked_expression): Implement.
1820
1821         * cs-parser.jay (local_variable_type): Correct and implement.
1822         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
1823
1824         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
1825
1826         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
1827         name and the specifiers.
1828
1829         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
1830         
1831         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
1832         making them all public ;-)
1833
1834         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
1835         class anyways.
1836         
1837 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
1838
1839         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
1840         PropertyExprs.
1841         (FieldExpr, PropertyExprs): New resolved expressions.
1842         (SimpleName::MemberStaticCheck): Perform static checks for access
1843         to non-static fields on static methods. Maybe this should be
1844         generalized for MemberAccesses. 
1845         (SimpleName::ResolveSimpleName): More work on simple name
1846         resolution. 
1847
1848         * cs-parser.jay (primary_expression/qualified_identifier): track
1849         the parameter index.
1850
1851         * codegen.cs (CodeGen::Save): Catch save exception, report error.
1852         (EmitContext::EmitBoolExpression): Chain to expression generation
1853         instead of temporary hack.
1854         (::EmitStatementExpression): Put generic expression code generation.
1855
1856         * assign.cs (Assign::Emit): Implement variable assignments to
1857         local variables, parameters and fields.
1858
1859 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
1860
1861         * statement.cs (Block::GetVariableInfo): New method, returns the
1862         VariableInfo for a variable name in a block.
1863         (Block::GetVariableType): Implement in terms of GetVariableInfo
1864
1865         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
1866         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
1867
1868 2001-09-06  Ravi Pratap  <ravi@ximian.com>
1869
1870         * cs-parser.jay (operator_declaration): Continue on my quest : update
1871         to take attributes argument.
1872         (event_declaration): Ditto.
1873         (enum_declaration): Ditto.
1874         (indexer_declaration): Ditto.
1875         
1876         * class.cs (Operator::Operator): Update constructor accordingly.
1877         (Event::Event): Ditto.
1878
1879         * delegate.cs (Delegate::Delegate): Same here.
1880
1881         * enum.cs (Enum::Enum): Same here.
1882         
1883 2001-09-05  Ravi Pratap  <ravi@ximian.com>
1884
1885         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
1886
1887         * ../tests/cs0658.cs : New file to demonstrate error 0658.
1888
1889         * attribute.cs (Attributes): New class to encapsulate all attributes which were
1890         being passed around as an arraylist.
1891         (Attributes::AddAttribute): Method to add attribute sections.
1892
1893         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
1894         (struct_declaration): Update accordingly.
1895         (constant_declaration): Update.
1896         (field_declaration): Update.
1897         (method_header): Update.
1898         (fixed_parameter): Update.
1899         (parameter_array): Ditto.
1900         (property_declaration): Ditto.
1901         (destructor_declaration): Ditto.
1902         
1903         * class.cs (Struct::Struct): Update constructors accordingly.
1904         (Class::Class): Ditto.
1905         (Field::Field): Ditto.
1906         (Method::Method): Ditto.
1907         (Property::Property): Ditto.
1908         (TypeContainer::OptAttribute): update property's return type.
1909         
1910         * interface.cs (Interface.opt_attributes): New member.
1911         (Interface::Interface): Update to take the extra Attributes argument.
1912
1913         * parameter.cs (Parameter::Parameter): Ditto.
1914
1915         * constant.cs (Constant::Constant): Ditto.
1916
1917         * interface.cs (InterfaceMemberBase): New OptAttributes field.
1918         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
1919         the attributes as a parameter.
1920         (InterfaceProperty): Update constructor call.
1921         (InterfaceEvent): Ditto.
1922         (InterfaceMethod): Ditto.
1923         (InterfaceIndexer): Ditto.
1924
1925         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
1926         pass the attributes too.
1927         (interface_event_declaration): Ditto.
1928         (interface_property_declaration): Ditto.
1929         (interface_method_declaration): Ditto.
1930         (interface_declaration): Ditto.
1931
1932 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
1933
1934         * class.cs (Method::Define): Track the "static Main" definition to
1935         create an entry point. 
1936
1937         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
1938         EntryPoint if we find it. 
1939
1940         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
1941         (EmitContext::ig): Make this variable public.
1942
1943         * driver.cs: Make the default output file be the first file name
1944         with the .exe extension.  
1945
1946         Detect empty compilations
1947
1948         Handle various kinds of output targets.  Handle --target and
1949         rename -t to --dumper.
1950
1951         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
1952         methods inherited from Expression return now an Expression.  This
1953         will is used during the tree rewriting as we resolve them during
1954         semantic analysis.
1955
1956         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
1957         the spec.  Missing entirely is the information about
1958         accessability of elements of it.
1959
1960         (Expression::ExprClassFromMemberInfo): New constructor for
1961         Expressions that creates a fully initialized Expression based on
1962         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
1963         a Type.
1964
1965         (Invocation::Resolve): Begin implementing resolution of invocations.
1966         
1967         * literal.cs (StringLiteral):  Implement Emit.
1968
1969 2001-09-05  Ravi Pratap  <ravi@ximian.com>
1970
1971         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
1972         member.
1973         
1974 2001-09-04  Ravi Pratap  <ravi@ximian.com>
1975
1976         * cs-parser.jay (attribute_arguments): Implement actions.
1977         (attribute): Fix bug in production. Implement action.
1978         (attribute_list): Implement.
1979         (attribute_target): Implement.
1980         (attribute_target_specifier, opt_target_specifier): Implement
1981         (CheckAttributeTarget): New method to check if the attribute target
1982         is valid.
1983         (attribute_section): Implement.
1984         (opt_attributes): Implement.
1985
1986         * attribute.cs : New file to handle attributes.
1987         (Attribute): Class to hold attribute info.
1988
1989         * cs-parser.jay (opt_attribute_target_specifier): Remove production
1990         (attribute_section): Modify production to use 2 different rules to 
1991         achieve the same thing. 1 s/r conflict down !
1992         Clean out commented, useless, non-reducing dimension_separator rules.
1993         
1994         * class.cs (TypeContainer.attributes): New member to hold list
1995         of attributes for a type.
1996         (Struct::Struct): Modify to take one more argument, the attribute list.
1997         (Class::Class): Ditto.
1998         (Field::Field): Ditto.
1999         (Method::Method): Ditto.
2000         (Property::Property): Ditto.
2001         
2002         * cs-parser.jay (struct_declaration): Update constructor call to
2003         pass in the attributes too.
2004         (class_declaration): Ditto.
2005         (constant_declaration): Ditto.
2006         (field_declaration): Ditto.
2007         (method_header): Ditto.
2008         (fixed_parameter): Ditto.
2009         (parameter_array): Ditto.
2010         (property_declaration): Ditto.
2011
2012         * constant.cs (Constant::Constant): Update constructor similarly.
2013         Use System.Collections.
2014
2015         * parameter.cs (Parameter::Parameter): Update as above.
2016
2017 2001-09-02  Ravi Pratap  <ravi@ximian.com>
2018
2019         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
2020         (TypeContainer.delegates): New member to hold list of delegates.
2021
2022         * cs-parser.jay (delegate_declaration): Implement the action correctly 
2023         this time as I seem to be on crack ;-)
2024
2025 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
2026
2027         * rootcontext.cs (RootContext::IsNamespace): new function, used to
2028         tell whether an identifier represents a namespace.
2029
2030         * expression.cs (NamespaceExpr): A namespace expression, used only
2031         temporarly during expression resolution.
2032         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
2033         utility functions to resolve names on expressions.
2034
2035 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
2036
2037         * codegen.cs: Add hook for StatementExpressions. 
2038
2039         * class.cs: Fix inverted test for static flag in methods.
2040
2041 2001-09-02  Ravi Pratap  <ravi@ximian.com>
2042
2043         * class.cs (Operator::CheckUnaryOperator): Correct error number used
2044         to make it coincide with MS' number.
2045         (Operator::CheckBinaryOperator): Ditto.
2046
2047         * ../errors/errors.txt : Remove error numbers added earlier.
2048
2049         * ../errors/cs1019.cs : Test case for error # 1019
2050
2051         * ../errros/cs1020.cs : Test case for error # 1020
2052
2053         * cs-parser.jay : Clean out commented cruft.
2054         (dimension_separators, dimension_separator): Comment out. Ostensibly not
2055         used anywhere - non-reducing rule.
2056         (namespace_declarations): Non-reducing rule - comment out.
2057
2058         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
2059         with TypeContainer::AddEnum.
2060
2061         * delegate.cs : New file for delegate handling classes.
2062         (Delegate): Class for declaring delegates.
2063
2064         * makefile : Update.
2065
2066         * cs-parser.jay (delegate_declaration): Implement.
2067
2068 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
2069
2070         * class.cs (Event::Define): Implement.
2071         (Event.EventBuilder): New member.
2072
2073         * class.cs (TypeContainer::Populate): Update to define all enums and events
2074         we have.
2075         (Events): New property for the events arraylist we hold. Shouldn't we move to using
2076         readonly fields for all these cases ?
2077
2078 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
2079
2080         * class.cs (Property): Revamp to use the convention of making fields readonly.
2081         Accordingly modify code elsewhere.
2082
2083         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
2084         the Define method of the Property class.
2085
2086         * class.cs : Clean up applied patch and update references to variables etc. Fix 
2087         trivial bug.
2088         (TypeContainer::Populate): Update to define all the properties we have. Also
2089         define all enumerations.
2090
2091         * enum.cs (Define): Implement.
2092         
2093 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
2094
2095         * cs-parser.jay (overloadable_operator): The semantic value is an
2096         enum of the Operator class.
2097         (operator_declarator): Implement actions.
2098         (operator_declaration): Implement.
2099
2100         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
2101         validity of definitions.
2102         (Operator::CheckBinaryOperator): Static method to check for binary operators
2103         (TypeContainer::AddOperator): New method to add an operator to a type.
2104
2105         * cs-parser.jay (indexer_declaration): Added line to actually call the
2106         AddIndexer method so it gets added ;-)
2107
2108         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
2109         already taken care of by the MS compiler ?  
2110
2111 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
2112
2113         * class.cs (Operator): New class for operator declarations.
2114         (Operator::OpType): Enum for the various operators.
2115
2116 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
2117
2118         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
2119         ostensibly handle this in semantic analysis.
2120
2121         * cs-parser.jay (general_catch_clause): Comment out
2122         (specific_catch_clauses, specific_catch_clause): Ditto.
2123         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
2124         (catch_args, opt_catch_args): New productions.
2125         (catch_clause): Rewrite to use the new productions above
2126         (catch_clauses): Modify accordingly.
2127         (opt_catch_clauses): New production to use in try_statement
2128         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
2129         and re-write the code in the actions to extract the specific and
2130         general catch clauses by being a little smart ;-)
2131
2132         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
2133         Hooray, try and catch statements parse fine !
2134         
2135 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
2136
2137         * statement.cs (Block::GetVariableType): Fix logic to extract the type
2138         string from the hashtable of variables.
2139
2140         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
2141         I end up making that mistake ;-)
2142         (catch_clauses): Fixed gross error which made Key and Value of the 
2143         DictionaryEntry the same : $1 !!
2144
2145 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
2146
2147         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
2148
2149         * cs-parser.jay (event_declaration): Correct to remove the semicolon
2150         when the add and remove accessors are specified. 
2151
2152 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
2153
2154         * cs-parser.jay (IndexerDeclaration): New helper class to hold
2155         information about indexer_declarator.
2156         (indexer_declarator): Implement actions.
2157         (parsing_indexer): New local boolean used to keep track of whether
2158         we are parsing indexers or properties. This is necessary because 
2159         implicit_parameters come into picture even for the get accessor in the 
2160         case of an indexer.
2161         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
2162
2163         * class.cs (Indexer): New class for indexer declarations.
2164         (TypeContainer::AddIndexer): New method to add an indexer to a type.
2165         (TypeContainer::indexers): New member to hold list of indexers for the
2166         type.
2167
2168 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
2169
2170         * cs-parser.jay (add_accessor_declaration): Implement action.
2171         (remove_accessor_declaration): Implement action.
2172         (event_accessors_declaration): Implement
2173         (variable_declarators): swap statements for first rule - trivial.
2174
2175         * class.cs (Event): New class to hold information about event
2176         declarations.
2177         (TypeContainer::AddEvent): New method to add an event to a type
2178         (TypeContainer::events): New member to hold list of events.
2179
2180         * cs-parser.jay (event_declaration): Implement actions.
2181
2182 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
2183
2184         * cs-parser.jay (dim_separators): Implement. Make it a string
2185         concatenating all the commas together, just as they appear.
2186         (opt_dim_separators): Modify accordingly
2187         (rank_specifiers): Update accordingly. Basically do the same
2188         thing - instead, collect the brackets here.
2189         (opt_rank_sepcifiers): Modify accordingly.
2190         (array_type): Modify to actually return the complete type string
2191         instead of ignoring the rank_specifiers.
2192         (expression_list): Implement to collect the expressions
2193         (variable_initializer): Implement. We make it a list of expressions
2194         essentially so that we can handle the array_initializer case neatly too.
2195         (variable_initializer_list): Implement.
2196         (array_initializer): Make it a list of variable_initializers
2197         (opt_array_initializer): Modify accordingly.
2198
2199         * expression.cs (New::NType): Add enumeration to help us
2200         keep track of whether we have an object/delegate creation
2201         or an array creation.
2202         (New:NewType, New::Rank, New::Indices, New::Initializers): New
2203         members to hold data about array creation.
2204         (New:New): Modify to update NewType
2205         (New:New): New Overloaded contructor for the array creation
2206         case.
2207
2208         * cs-parser.jay (array_creation_expression): Implement to call
2209         the overloaded New constructor.
2210         
2211 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
2212
2213         * class.cs (TypeContainer::Constructors): Return member
2214         constructors instead of returning null.
2215
2216 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
2217
2218         * typemanager.cs (InitCoreTypes): Initialize the various core
2219         types after we have populated the type manager with the user
2220         defined types (this distinction will be important later while
2221         compiling corlib.dll)
2222
2223         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
2224         on Expression Classification.  Now all expressions have a method
2225         `Resolve' and a method `Emit'.
2226
2227         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
2228         generation from working.     Also add some temporary debugging
2229         code. 
2230         
2231 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
2232
2233         * codegen.cs: Lots of code generation pieces.  This is only the
2234         beginning, will continue tomorrow with more touches of polish.  We
2235         handle the fundamentals of if, while, do, for, return.  Others are
2236         trickier and I need to start working on invocations soon.
2237         
2238         * gen-treedump.cs: Bug fix, use s.Increment here instead of
2239         s.InitStatement. 
2240
2241         * codegen.cs (EmitContext): New struct, used during code
2242         emission to keep a context.   Most of the code generation will be
2243         here. 
2244
2245         * cs-parser.jay: Add embedded blocks to the list of statements of
2246         this block.  So code generation proceeds in a top down fashion.
2247
2248 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
2249
2250         * statement.cs: Add support for multiple child blocks.
2251
2252 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
2253
2254         * codegen.cs (EmitCode): New function, will emit the code for a
2255         Block of code given a TypeContainer and its ILGenerator. 
2256
2257         * statement.cs (Block): Standard public readonly optimization.
2258         (Block::Block constructors): Link children. 
2259         (Block::Child): Child Linker.
2260         (Block::EmitVariables): Emits IL variable declarations.
2261
2262         * class.cs: Drop support for MethodGroups here, delay until
2263         Semantic Analysis.
2264         (Method::): Applied the same simplification that I did before, and
2265         move from Properties to public readonly fields.
2266         (Method::ParameterTypes): Returns the parameter types for the
2267         function, and implements a cache that will be useful later when I
2268         do error checking and the semantic analysis on the methods is
2269         performed.
2270         (Constructor::GetCallingConvention): Renamed from CallingConvetion
2271         and made a method, optional argument tells whether this is a class
2272         or a structure to apply the `has-this' bit.
2273         (Method::GetCallingConvention): Implement, returns the calling
2274         convention. 
2275         (Method::Define): Defines the type, a second pass is performed
2276         later to populate the methods.
2277
2278         (Constructor::ParameterTypes): implement a cache similar to the
2279         one on Method::ParameterTypes, useful later when we do semantic
2280         analysis. 
2281
2282         (TypeContainer::EmitMethod):  New method.  Emits methods.
2283
2284         * expression.cs: Removed MethodGroup class from here.
2285         
2286         * parameter.cs (Parameters::GetCallingConvention): new method.
2287
2288 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
2289
2290         * class.cs (TypeContainer::Populate): Drop RootContext from the
2291         argument. 
2292
2293         (Constructor::CallingConvention): Returns the calling convention.
2294         (Constructor::ParameterTypes): Returns the constructor parameter
2295         types. 
2296         
2297         (TypeContainer::AddConstructor): Keep track of default constructor
2298         and the default static constructor.
2299
2300         (Constructor::) Another class that starts using `public readonly'
2301         instead of properties. 
2302
2303         (Constructor::IsDefault): Whether this is a default constructor. 
2304
2305         (Field::) use readonly public fields instead of properties also.
2306
2307         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
2308         track of static constructors;  If none is used, turn on
2309         BeforeFieldInit in the TypeAttributes. 
2310
2311         * cs-parser.jay (opt_argument_list): now the return can be null
2312         for the cases where there are no arguments. 
2313
2314         (constructor_declarator): If there is no implicit `base' or
2315         `this', then invoke the default parent constructor. 
2316         
2317         * modifiers.cs (MethodAttr): New static function maps a set of
2318         modifiers flags into a MethodAttributes enum
2319         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
2320         MethodAttr, TypeAttr to represent the various mappings where the
2321         modifiers are used.
2322         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
2323
2324 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
2325
2326         * parameter.cs (GetParameterInfo): Fix bug where there would be no
2327         method arguments.
2328
2329         * interface.cs (PopulateIndexer): Implemented the code generator
2330         for interface indexers.
2331
2332 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
2333
2334         * interface.cs (InterfaceMemberBase): Now we track the new status
2335         here.  
2336
2337         (PopulateProperty): Implement property population.  Woohoo!  Got
2338         Methods and Properties going today. 
2339
2340         Removed all the properties for interfaces, and replaced them with
2341         `public readonly' fields. 
2342
2343 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
2344
2345         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
2346         initialize their hashtables/arraylists only when they are needed
2347         instead of doing this always.
2348
2349         * parameter.cs: Handle refs and out parameters.
2350
2351         * cs-parser.jay: Use an ArrayList to construct the arguments
2352         instead of the ParameterCollection, and then cast that to a
2353         Parameter[] array.
2354
2355         * parameter.cs: Drop the use of ParameterCollection and use
2356         instead arrays of Parameters.
2357
2358         (GetParameterInfo): Use the Type, not the Name when resolving
2359         types. 
2360
2361 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
2362
2363         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
2364         and instead use public readonly fields.
2365
2366         * class.cs: Put back walking code for type containers.
2367
2368 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
2369
2370         * class.cs (MakeConstant): Code to define constants.
2371
2372         * rootcontext.cs (LookupType): New function.  Used to locate types 
2373
2374         
2375 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
2376
2377         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
2378         this System.Reflection code is.  Kudos to Microsoft
2379         
2380         * typemanager.cs: Implement a type cache and avoid loading all
2381         types at boot time.  Wrap in LookupType the internals.  This made
2382         the compiler so much faster.  Wow.  I rule!
2383         
2384         * driver.cs: Make sure we always load mscorlib first (for
2385         debugging purposes, nothing really important).
2386
2387         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
2388         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
2389
2390         * rootcontext.cs: Lookup types on their namespace;  Lookup types
2391         on namespaces that have been imported using the `using' keyword.
2392
2393         * class.cs (TypeContainer::TypeAttr): Virtualize.
2394         (Class::TypeAttr): Return attributes suitable for this bad boy.
2395         (Struct::TypeAttr): ditto.
2396         Handle nested classes.
2397         (TypeContainer::) Remove all the type visiting code, it is now
2398         replaced with the rootcontext.cs code
2399
2400         * rootcontext.cs (GetClassBases): Added support for structs. 
2401
2402 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
2403
2404         * interface.cs, statement.cs, class.cs, parameter.cs,
2405         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
2406         Drop use of TypeRefs, and use strings instead.
2407
2408 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
2409
2410         * rootcontext.cs: 
2411
2412         * class.cs (Struct::Struct): set the SEALED flags after
2413         checking the modifiers.
2414         (TypeContainer::TypeAttr): new property, returns the
2415         TypeAttributes for a class.  
2416
2417         * cs-parser.jay (type_list): Oops, list production was creating a
2418         new list of base types.
2419
2420         * rootcontext.cs (StdLib): New property.
2421         (GetInterfaceTypeByName): returns an interface by type name, and
2422         encapsulates error handling here.
2423         (GetInterfaces): simplified.
2424         (ResolveTree): Encapsulated all the tree resolution here.
2425         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
2426         types. 
2427         
2428         * driver.cs: Add support for --nostdlib, to avoid loading the
2429         default assemblies.
2430         (Main): Do not put tree resolution here. 
2431
2432         * rootcontext.cs: Beginning of the class resolution.
2433
2434 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
2435
2436         * rootcontext.cs: Provide better error reporting. 
2437
2438         * cs-parser.jay (interface_base): set our $$ to be interfaces.
2439
2440         * rootcontext.cs (CreateInterface): Handle the case where there
2441         are no parent interfaces.
2442         
2443         (CloseTypes): Routine to flush types at the end.
2444         (CreateInterface): Track types.
2445         (GetInterfaces): Returns an array of Types from the list of
2446         defined interfaces.
2447
2448         * typemanager.c (AddUserType): Mechanism to track user types (puts
2449         the type on the global type hash, and allows us to close it at the
2450         end). 
2451         
2452 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
2453
2454         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
2455         RecordInterface instead.
2456
2457         * cs-parser.jay: Updated to reflect changes above.
2458
2459         * decl.cs (Definition): Keep track of the TypeBuilder type that
2460         represents this type here.  Not sure we will use it in the long
2461         run, but wont hurt for now.
2462
2463         * driver.cs: Smaller changes to accomodate the new code.
2464
2465         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
2466         when done. 
2467
2468         * rootcontext.cs (CreateInterface):  New method, used to create
2469         the System.TypeBuilder type for interfaces.
2470         (ResolveInterfaces): new entry point to resolve the interface
2471         hierarchy. 
2472         (CodeGen): Property, used to keep track of the code generator.
2473
2474 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
2475
2476         * cs-parser.jay: Add a second production for delegate_declaration
2477         with `VOID'.
2478
2479         (enum_body): Put an opt_comma here instead of putting it on
2480         enum_body or enum_member_declarations so we can handle trailing
2481         commas on enumeration members.  Gets rid of a shift/reduce.
2482         
2483         (type_list): Need a COMMA in the middle.
2484
2485         (indexer_declaration): Tell tokenizer to recognize get/set
2486
2487         * Remove old targets.
2488
2489         * Re-add the parser target.
2490
2491 2001-07-13  Simon Cozens <simon@simon-cozens.org>
2492
2493         * cs-parser.jay: Add precendence rules for a number of operators
2494         ot reduce the number of shift/reduce conflicts in the grammar.
2495         
2496 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
2497
2498         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
2499         and put it here.
2500
2501         Get rid of old crufty code.
2502
2503         * rootcontext.cs: Use this to keep track of the parsed
2504         representation and the defined types available to the program. 
2505
2506         * gen-treedump.cs: adjust for new convention.
2507
2508         * type.cs: Split out the type manager, and the assembly builder
2509         from here. 
2510
2511         * typemanager.cs: the type manager will live here now.
2512
2513         * cil-codegen.cs: And the code generator here. 
2514
2515 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
2516
2517         * makefile: Fixed up for easy making.
2518
2519 2001-07-13  Simon Cozens <simon@simon-cozens.org>
2520
2521         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
2522         the 
2523
2524         (unary_expression): Expand pre_increment_expression and
2525         post_decrement_expression to reduce a shift/reduce.
2526
2527 2001-07-11  Simon Cozens
2528
2529         * cs-tokenizer.cs: Hex numbers should begin with a 0.
2530
2531         Improve allow_keyword_as_indent name.
2532
2533 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
2534
2535         * Adjustments for Beta2. 
2536
2537 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
2538
2539         * decl.cs: Added `Define' abstract method.
2540         (InTransit): new property, used to catch recursive definitions. 
2541
2542         * interface.cs: Implement `Define'. 
2543
2544         * modifiers.cs: Map Modifiers.constants to
2545         System.Reflection.TypeAttribute flags.
2546
2547         * class.cs: Keep track of types and user-defined types.
2548         (BuilderInit): New method for creating an assembly
2549         (ResolveType): New function to launch the resolution process, only
2550         used by interfaces for now.
2551
2552         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
2553         that are inserted into the name space. 
2554
2555 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
2556
2557         * ARGH.  I have screwed up my tree so many times due to the use of
2558         rsync rather than using CVS.  Going to fix this at once. 
2559
2560         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
2561         load types.
2562
2563 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
2564
2565         * Experiment successful: Use System.Type rather that our own
2566         version of Type.  
2567
2568 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
2569
2570         * cs-parser.jay: Removed nsAliases from here.
2571
2572         Use new namespaces, handle `using XXX;' 
2573
2574         * namespace.cs: Reimplemented namespace handling, use a recursive
2575         definition of the class.  Now we can keep track of using clauses
2576         and catch invalid using clauses.
2577
2578 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
2579
2580         * gen-treedump.cs: Adapted for all the renaming.
2581
2582         * expression.cs (Expression): this class now has a Type property
2583         which returns an expression Type.
2584
2585         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
2586         `Type', as this has a different meaning now in the base
2587
2588 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
2589
2590         * interface.cs, class.cs: Removed from all the sources the
2591         references to signature computation, as we can not do method
2592         signature computation during the parsing time, as we are not
2593         trying to solve at that point distinguishing:
2594
2595         class X {
2596                 void a (Blah x) {}
2597                 void a (NS.Blah x) {}
2598         }
2599
2600         Which depending on the context might be valid or not, as we do not
2601         know if Blah is the same thing as NS.Blah at that point.
2602
2603         * Redid everything so the code uses TypeRefs now instead of
2604         Types.  TypeRefs are just temporary type placeholders, that need
2605         to be resolved.  They initially have a pointer to a string and the
2606         current scope in which they are used.  This is used later by the
2607         compiler to resolve the reference to an actual Type. 
2608
2609         * DeclSpace is no longer a CIR.Type, and neither are
2610         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
2611         are all DeclSpaces, but no Types. 
2612
2613         * type.cs (TypeRefManager): This implements the TypeRef manager,
2614         which keeps track of all the types that need to be resolved after
2615         the parsing has finished. 
2616
2617 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
2618
2619         * ARGH.  We are going to have to store `foreach' as a class rather
2620         than resolving it, as we need to verify error 1579 after name
2621         resolution.   *OR* we could keep a flag that says `This request to
2622         IEnumerator comes from a foreach statement' which we can then use
2623         to generate the error.
2624
2625 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
2626
2627         * class.cs (TypeContainer.AddMethod): we now add methods to the
2628         MethodGroup instead of the method hashtable.  
2629
2630         * expression.cs: Add MethodGroup abstraction, which gets us one
2631         step closer to the specification in the way we handle method
2632         declarations.  
2633
2634         * cs-parser.jay (primary_expression): qualified_identifier now
2635         tried to match up an identifier to a local variable reference or
2636         to a parameter reference.
2637
2638         current_local_parameters is now a parser global variable that
2639         points to the current parameters for the block, used during name
2640         lookup.
2641
2642         (property_declaration): Now creates an implicit `value' argument to
2643         the set accessor.
2644
2645 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
2646
2647         * parameter.cs: Do not use `param' arguments as part of the
2648         signature, per the spec.
2649
2650 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
2651
2652         * decl.cs: Base class for classes, structs and interfaces.  This
2653         is the "Declaration Space" 
2654
2655         * cs-parser.jay: Use CheckDef for checking declaration errors
2656         instead of having one on each function.
2657
2658         * class.cs: Factor out some code for handling error handling in
2659         accordance to the "Declarations" section in the "Basic Concepts"
2660         chapter in the ECMA C# spec.
2661
2662         * interface.cs: Make all interface member classes derive from
2663         InterfaceMemberBase.
2664
2665 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
2666
2667         * Many things: all interfaces are parsed and generated in
2668         gen-treedump.  Support for member variables, constructors,
2669         destructors, properties, constants is there.
2670
2671         Beginning of the IL backend, but very little done, just there for
2672         testing purposes. 
2673
2674 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
2675
2676         * cs-parser.jay: Fix labeled statement.
2677
2678         * cs-tokenizer.cs (escape): Escape " and ' always.
2679         ref_line, ref_name: keep track of the line/filename as instructed
2680         by #line by the compiler.
2681         Parse #line.
2682
2683 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
2684
2685         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
2686         to match the values in System.CodeDOM.
2687
2688         Divid renamed to Divide.
2689
2690         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
2691         statements. 
2692         (Statements.set): remove.
2693
2694         * System.CodeDOM/CodeCatchClause.cs: always have a valid
2695         statements. 
2696
2697         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
2698         falseStatements always have valid values. 
2699
2700         * cs-parser.jay: Use System.CodeDOM now.
2701