In mcs:
[mono.git] / mcs / gmcs / ChangeLog
1 2007-05-02  Raja R Harinath  <rharinath@novell.com>
2
3         Fix regression in cs0631-3.cs
4         * cs-parser.jay (operator_declarator): Add opt_attributes to error
5         fallback.  Make error fallback catch more cases.
6
7 2007-05-01  Miguel de Icaza  <miguel@novell.com>
8
9         * cs-parser.jay: Allow parameters in operator declarations to have
10         attributes. 
11
12 2007-04-27  Miguel de Icaza  <miguel@novell.com>
13
14         * generic.cs (TypeManager.LambdaInfer): now this routine will
15         make only one inference from the list of lambda expression that
16         have not participated in inferring a type.
17
18         (TypeManager.InferTypeArguments): The logic that drives the type
19         inference in lambda expressions is now driven here. 
20
21 2007-04-23  Miguel de Icaza  <miguel@novell.com>
22
23         * generic.cs: Large update to LambdaInfer, this is merely an
24         update to start the lambda type inference.   It is by no means
25         complete.  It is currently merely able to build a sample program
26         (with no iteration for the type parameters).
27
28 2007-04-12  Duncan Mak  <duncan@a-chinaman.com>
29
30         * cs-parser.jay (interface_method_declaration_body): Fixed typo.
31
32 2007-04-08  Marek Safar  <marek.safar@gmail.com>
33
34         * cs-parser.jay, linq.cs: First select implementation (hacky).
35
36         * generic.cs (InferTypeArguments): Simplified.
37
38 2007-03-31  Marek Safar  <marek.safar@gmail.com>
39
40         * generic.cs (InferTypeArguments): Restored validation check.
41         (InferTypeArguments): Move all logic to Compatible method for re-usability.
42
43 2007-03-25  Marek Safar  <marek.safar@gmail.com>
44
45         * generic.cs (InferTypeArguments): Infer arguments before they are used
46         for compatibility check.
47
48 2007-03-15  Marek Safar  <marek.safar@gmail.com>
49
50         * generic.cs (InflatedConstraints): Fixed the check order.
51         (TypeArguments.Resolve): Small optimization for generic parameters.
52         (InferTypeArguments): Add infering support for anonymous methods.
53
54 2007-03-15  Martin Baulig  <martin@ximian.com>
55
56         Fix #79984.
57
58         * generic.cs
59         (TypeParameter.HasConstructorConstraint): Removed.
60         (ConstraintChecker.HasDefaultConstructor): Removed the
61         `TypeBuilder' argument here; correctly check for the ctor
62         constraint on type parameters.
63
64 2007-03-15  Martin Baulig  <martin@ximian.com>
65
66         Fix #79302.
67
68         * generic.cs
69         (TypeParameter): Create a `MemberCache' here as well.  Note that
70         we need to create this on-demand when it's actually used.
71
72 2007-03-10  Marek Safar  <marek.safar@gmail.com>
73
74         * generic.cs (TypeArguments.Resolve): Avoid redundant checks.
75
76 2007-03-09  Raja R Harinath  <rharinath@novell.com>
77
78         * cs-parser.jay (WHERE): Move before QUERY_FIRST_TOKEN.  'where'
79         is a valid keyword outside a linq expression too.
80
81 2007-03-03  Marek Safar  <marek.safar@gmail.com>
82
83         * cs-parser.jay: Implemented basic linq grammar.
84
85         * linq.cs: New file for hosting query specific classes.
86
87 2007-02-26  Marek Safar  <marek.safar@gmail.com>
88
89         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
90
91 2007-02-20  Marek Safar  <marek.safar@gmail.com>
92
93         A fix for bug #80650
94         * cs-parser.jay: Anonymous container starts at constructor declaration
95         and not at block beginning because it has to be usable in constructor
96         initializer.
97
98 2007-02-18  Marek Safar  <marek.safar@gmail.com>
99
100         A fix for bug #80493 by Atsushi Enomoto
101         * cs-parser.jay: Ignore invalid attribute target.
102
103 2007-02-15  Miguel de Icaza  <miguel@novell.com>
104
105         * Remove the call to SetExpression for lambda expressions, we do
106         not actually need it.
107
108         Remove expression tracking code as its not needed.
109
110 2007-02-11  Miguel de Icaza  <miguel@novell.com>
111
112         * cs-parser.jay (lambda_expression_body): when the body is an
113         expression add a statement of the form:
114
115                 contextual-return expression.
116
117         Where `contextual-return' is similar to `return', the difference
118         being that if the delegate that the lambda will be converted to
119         has a void return type, it will check that the result is a
120         ExpressionStatement and the result is a plain ret (no return
121         values on the stack).  If the return type of the delegate is of a
122         given type, this turns into a return with a value and does the
123         regular checking to check that the computed value can be
124         implicitly converted to the delegate return.
125
126 2007-01-30  Miguel de Icaza  <miguel@novell.com>
127
128         * cs-parser.jay (anonymous_method_expression): move the
129         before/after productions to the start_anonymous and end_anonymous
130         methods so the code can be reused for lambda functions.
131
132         (lambda_expression_body): wrap expressions implicitly into a
133         block.
134
135         (block): factor out the setup/teardown of parsing a block so we
136         can reuse that in lambda_expression_body
137
138         (lambda_expression): use new anonymous method helper methods.
139
140 2007-01-29  Miguel de Icaza  <miguel@novell.com>
141
142         * cs-parser.jay: oob_stack make it static (am guessing that is why
143         we no longer initialize it anymore) and reuse it across
144         instances.
145
146 2007-01-28  Miguel de Icaza  <miguel@novell.com>
147
148         * cs-parser.jay (open_parens): Introduce new non-terminal that
149         abstracts OPEN_PARENS and OPEN_PARENS_LAMBDA as the later can now
150         be returned in places where types are followed by identifiers
151         (this is expected in declaration, fixed, using, foreach and catch
152         clauses). 
153
154         Use open_parens in those places, keep OPEN_PARENS in the
155         expressions.  
156
157         cs-parser.jay: New grammar bits for parsing lambda expressions. 
158
159 2007-01-28  Raja R Harinath  <rharinath@novell.com>
160
161         Fix #80534, gtest-309.cs
162         * generic.cs (UnifyType): Rename from InferType.  Make unification
163         of generic insts simpler and don't insist on inferring all generic
164         parameters in a single generic inst unification.
165         (UnifyTypes): New.
166         (InferGenericInstance): Remove.
167         Analysis and initial patch by David Mitchell <dmitchell@logos.com>.
168
169 2007-01-20  Marek Safar  <marek.safar@gmail.com>
170
171         * cs-parser.jay: Better parameter error handling.
172
173 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
174             Raja R Harinath  <rharinath@novell.com>
175
176         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
177         Note the order in which accessors are declared in the source.
178
179 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
180
181         * generic.cs (TypeParameter.FindMembers): Use the generic
182         constraints, not the constraints to check for methods (first fix
183         of 80518).
184
185 2006-12-30  Marek Safar  <marek.safar@gmail.com>
186
187         * cs-parser.jay: Better syntax errors handling.
188
189 2006-11-21  Marek Safar  <marek.safar@gmail.com>
190
191         * cs-parser.jay: Tiny change to work with mcs tokenizer.
192
193         * cs-tokenizer.cs: Remove after unification with mcs.
194
195 2006-10-28  Marek Safar  <marek.safar@gmail.com>
196
197         A fix for bug #78998
198         * generic.cs (ConstructedType.AsAccessible): Check accessibility of type
199         arguments as well.
200
201 2006-10-26  Marek Safar  <marek.safar@gmail.com>
202
203         A fix for bug #76591
204         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous methods.
205
206 2006-10-25  Brian Crowell  <brian@fluggo.com>
207
208         Fix #79703
209         * generic.cs (CheckConstraints): Allow generic parameters with
210         inheritance constraints to satisfy reference type constraints.
211
212 2006-10-09  Martin Baulig  <martin@ximian.com>
213
214         * generic.cs
215         (NullCoalescingOperator.DoResolve): Fix #78964; added gtest-294.cs.
216
217 2006-09-25  Martin Baulig  <martin@ximian.com>
218
219         * class.cs: Remove after unification with mcs source.
220
221 2006-09-24  Raja R Harinath  <harinath@gmail.com>
222
223         * convert.cs: Remove after unification with mcs source.
224
225 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
226
227         * class.cs (MemberBase.VerifyClsCompliance): When method has type
228         parameters verify them as well.
229
230         * generic.cs (Constraints.VerifyClsCompliance): Verify CLS-Compliance of
231         the type parameter constraints.
232         (Generics.VerifyClsCompliance): Ditto.
233
234 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
235
236         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
237         for anonymous block with out argument.
238
239 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
240
241         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
242         not used private events only.
243
244 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
245
246         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
247
248         * cs-parser.jay: Parse correctly cast of default (T).
249
250         * generic.cs (DefaultValueExpression.DoResolve): Check for void type.
251         Store original type via EmptyConstantCast.
252
253 2006-09-22  Martin Baulig  <martin@ximian.com>
254
255         * delegate.cs: Removed; this file is now shared with mcs.
256
257         * attribute.cs: Removed; this file is now shared with mcs.
258
259 2006-09-22  Martin Baulig  <martin@ximian.com>
260
261         * ecore.cs: Removed; this file is now shared with mcs.
262
263 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
264
265         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
266
267         * ecore.cs (NullCast): Derives from NullConstant.
268
269         * generic.cs (DefaultValueExpression): Fixed to cope with the constant
270         results.
271
272 2006-09-21  Martin Baulig  <martin@ximian.com>
273
274         * decl.cs: Removed; this file is now shared with mcs.
275
276 2006-09-21  Raja R Harinath  <rharinath@novell.com>
277
278         * rootcontext.cs: Remove after unification with mcs source.
279
280         * report.cs: Remove after unification with mcs source.
281         * generic.cs (AddTypeParameter, LookupTypeParameter): Move to
282         mcs/typemanager.cs.
283         (InitGenerics, CleanUpGenerics): Remove.
284
285         * support.cs: Remove after unification with mcs source.
286
287 2006-09-20  Raja R Harinath  <rharinath@novell.com>
288
289         * codegen.cs: Remove after unification with mcs source.
290
291 2006-09-19  Martin Baulig  <martin@ximian.com>
292
293         * expression.cs: Removed; this file is now shared with mcs.
294
295 2006-09-19  Martin Baulig  <martin@ximian.com>
296
297         * generic.cs
298         (TypeManager.IsEqual): Moved into ../mcs/typemanager.cs.
299         (TypeManager.DropGenericTypeArguments): Likewise.
300         (TypeManager.DropGenericMethodArguments): Likewise.
301         (TypeManager.GetTypeArguments): Likewise.
302         (TypeManager.HasGenericArguments): Likewise.
303
304 2006-09-19  Martin Baulig  <martin@ximian.com>
305
306         * ecore.cs (PropertyExpr.InstanceResolve): Fix the CS1540 check.
307
308 2006-09-19  Martin Baulig  <martin@ximian.com>
309
310         * typemanager.cs: Removed; this file is now shared with mcs.
311
312 2006-09-16  Raja R Harinath  <rharinath@novell.com>
313
314         * Makefile (LOCAL_MCS_FLAGS): Use instead of PROFILE_MCS_FLAGS.
315         * AssemblyInfo.cs, driver.cs: Remove after unification with mcs source.
316
317 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
318
319         A fix for #79401
320         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
321         only if parent type is class.
322         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
323         update.
324
325 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
326
327         * cs-parser.jay,
328         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
329         keywords are used.
330         * typemanager.cs(CSharpName): Converts NullType to null.
331
332 2006-09-15  Martin Baulig  <martin@ximian.com>
333
334         * pending.cs: Removed; this file is now shared with mcs.
335
336 2006-09-15  Martin Baulig  <martin@ximian.com>
337
338         * statement.cs: Removed; this file is now shared with mcs.
339
340 2006-09-15  Martin Baulig  <martin@ximian.com>
341
342         * rootcontext.cs (RootContext.BrokenCircularDeps): Removed.
343
344         * driver.cs: Removed the `--broken-cycles' argument.
345
346 2006-09-15  Martin Baulig  <martin@ximian.com>
347
348         * namespace.cs: Removed; this file is now shared with mcs.
349
350 2006-09-15  Martin Baulig  <martin@ximian.com>
351
352         * decl.cs (MemberName): Minor code cleanups.
353
354 2006-09-15  Martin Baulig  <martin@ximian.com>
355
356         * parameter.cs: Removed; this file is now shared with mcs.
357
358 2006-09-15  Martin Baulig  <martin@ximian.com>
359
360         * enum.cs: Removed; this file is now shared with mcs.
361
362 2006-09-15  Martin Baulig  <martin@ximian.com>
363
364         * Makefile: Define `GMCS_SOURCE'.
365
366         * flowanalysis.cs: Removed; this file is now shared with mcs.
367
368 2006-09-15  Martin Baulig  <martin@ximian.com>
369
370         Removed modifiers.cs, literal.cs, location.cs, roottypes.cs,
371         assign.cs, const.cs, cfold.cs, constant.cs, symbolwriter.cs and
372         doc.cs - they are now shared with mcs.
373
374         * gmcs.exe.sources: Include these files from ../mcs/.
375
376 2006-09-15  Martin Baulig  <martin@ximian.com>
377
378         * old-code.cs, gen-il.cs, gen-treedump.cs: Removed old stuff.
379         * g1.cs, sample-hello.cs, sample-stack.il: Likewise.
380
381 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
382
383         * assign.cs, ecore.cs, expression.cs: Share error message text.
384         * class.cs (FieldMember.Define): Check for variable of static type.
385         * decl.cs (check_type_parameter): Report correct type name.
386         * driver.cs (LoadAssembly): Uses error output for errors.
387         * generic.cs (Constraints.Resolve): Add check for constraint accessibility
388         (TypeArguments.Resolve): Static class cannot be used as an argument.
389         * statement.cs (ResolveMeta): Constants cannot be generic types.
390
391 2006-09-12  Martin Baulig  <martin@ximian.com>
392
393         * generic.cs (TypeManager.IsIList): Moved into convert.cs.
394
395         * convert.cs (Convert.Array_To_IList): Moved here and correctly
396         implement it; fixes #79345.
397
398 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
399
400         * decl.cs (DeclSpace.SetParameterInfo): Check for nonexistent type
401         parameter.
402         * expression.cs (TypeOf.GetAttributableValue): Check for open generic
403         types.
404         * generic.cs: Improved error messages.
405         * typemanager.cs (RemoveGenericArity): Made public.
406
407 2006-09-08  Martin Baulig  <martin@ximian.com>
408
409         * typemanager.cs (TypeManager.interlocked_type): New public field.
410         (TypeManager.int_interlocked_compare-exchange): New public field.
411         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
412         enumerator types here and call InitGenericCoreTypes().
413         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
414         after calling InitEnumUnderlyingTypes().
415
416         * rootcontext.cs
417         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
418         `classes_second_stage'. 
419
420 2006-09-07  Marek Safar  <marek.safar@seznam.cz>
421  
422         * class.cs, generic.cs (GenericMethod.Define): Check for type parameter
423         collisions.
424         * statement.cs (Block.Variables): Made public.
425
426 2006-09-07  Martin Baulig  <martin@ximian.com>
427
428         * driver.cs
429         (MainDriver): Revert r62663 from Marek; see #70506 for details.
430
431 2006-09-01  Martin Baulig  <martin@ximian.com>
432
433         * generic.cs
434         (TypeManager.IsIList): Also handle base classes and interfaces. 
435
436 2006-09-01  Raja R Harinath  <rharinath@novell.com>
437
438         Fix #79238
439         * expression.cs (Invocation.MoreSpecific): Check for reference
440         types earlier.
441
442 2006-08-29  Miguel de Icaza  <miguel@novell.com>
443
444         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
445
446 2006-08-17  Miguel de Icaza  <miguel@novell.com>
447
448         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
449         #52019 and #79064, the use of the \uXXXX sequence in source code
450         to represent unicode characters.
451
452 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
453  
454         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
455         support.
456         * class.cs, ecore.cs, statement.cs: Merged to one error message.
457
458 2006-08-14  Raja R Harinath  <rharinath@novell.com>
459
460         Fix #79067
461         * cs-tokenizer.cs (parse_less_than): Allow '*' to appear in a type
462         parameter too.  This only avoids a parse error -- the semantic
463         error is caught elsewhere.
464
465 2006-08-13  Miguel de Icaza  <miguel@novell.com>
466
467         * assign.cs: Catch attempts to assign to a method groups in += and
468         report as 1656
469
470 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
471
472         A fix for #79056
473         * cs-parser.jay: Don't destroy current array type by typeof of array's.
474
475 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
476
477         * cs-parser.jay: Check whether a constraint clause has already been
478         specified for type parameter.
479         * generic.cs (Constraints): Exposed location.
480
481 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
482
483         * class.cs (Method.Define): Issue a warning when generic method looks like
484         an entry point.
485         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
486         as well.
487         * report.cs: New warning number.
488
489 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
490  
491         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
492         looking for ctor.
493         * decl.cs (MemberCache.FindMembers): When container is interface we need to
494         search all base interfaces as a member can be ambiguous.
495         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
496         Constructor member type filter. 
497         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
498         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
499         reporting for returned memberinfos.
500         * report.cs: Updated.
501         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
502         version to work on all runtimes.
503         (TypeManager.RealMemberLookup): Removed members filtering.
504
505 2006-08-08  Raja R Harinath  <rharinath@novell.com>
506
507         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
508         (PropertyExpr.EmitAssign): Likewise.
509         * expression.cs (Indirection.EmitAssign): Likewise.
510         (LocalVariableReference.EmitAssign): Likewise.
511         (ParameterReference.EmitAssign): Likewise.
512         (Invocation.EmitArguments): Likewise.
513         (ArrayAccess.EmitAssign): Likewise.
514         (IndexerAccess.EmitAssign): Likewise.
515         (This.EmitAssign): Likewise.
516         (ConditionalLogicalOperator.Emit): Likewise.
517
518         Fix #79026
519         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
520         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
521         leave it in after returning it.
522         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
523
524 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
525
526         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
527         message.
528
529 2006-08-05  Marek Safar  <marek.safar@seznam.cz>
530
531         * class.cs (TypeContainer.AddPartial): Add check for partial declarations
532         with different type names.
533         (TypeContainer.UpdateTypeParameterConstraints): Updated an error message.
534
535 2006-08-03  Raja R Harinath  <rharinath@novell.com>
536
537         Fix cs0146-3.cs and cs0146-4.cs.
538         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
539         enclosing types don't depend on the current type.
540
541 2006-08-02  Raja R Harinath  <rharinath@novell.com>
542
543         Fix #77963
544         * class.cs (TypeContainer.DoDefineMembers): Use
545         FindBaseMemberWithSameName on Parent, since we're interested in
546         whether we hide inherited members or not.
547         (FindBaseMemberWithSameName): Make slightly more robust.
548
549         Fix #77396
550         * codegen.cs (IResolveContext.GenericDeclContainer): New.
551         (EmitContext): Implement new interface requirement.
552         * namespace.cs (UsingEntry, LocalAliasEntry): Likewise.
553         * decl.cs (MemberCore): Likewise.
554         (DeclSpace.GenericDeclContainer): Rename from DeclContainer.
555         * ecore.cs (SimpleName.ResolveAsTypeTerminal): Use
556         ec.GenericDeclContainer to check for generic parameters.
557         (SimpleName.DoSimpleNameResolve): Likewise.
558         * generic.cs (TypeParameter.DeclContainer): Remove override.
559
560         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
561         declspaces for doppelgangers too.
562         (UsingEntry): Implement IResolveContext.
563         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
564         'this' as the resolve context.
565         (LocalAliasEntry): Likewise.
566
567         Implement parts of #77403
568         * roottypes.cs (RootDeclSpace): New.  Used to represent the
569         toplevel declaration space.  Each namespace declaration introduces
570         a "partial" root declaretion space.
571         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
572         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
573         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
574         from 'current_namespace.SlaveDeclSpace'.
575         (namespace_declaration): Likewise.
576         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
577         check.  It can't happen now.
578         * decl.cs (DeclSpace.LookupType): Likewise.
579         * driver.cs (MainDriver): Sanity check.
580
581 2006-08-01  Raja R Harinath  <rharinath@novell.com>
582
583         * decl.cs (DeclSpace.FindNestedType): Remove.
584         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
585         LookupTypeContainer to get the container of the nested type.
586         * class.cs (TypeContainer.FindNestedType): Make non-override.
587
588 2006-07-31  Raja R Harinath  <rharinath@novell.com>
589
590         * decl.cs (DeclSpace.PartialContainer): Move field from ...
591         * class.cs (TypeContainer.PartialContainer): ... here.
592         (TypeContainer.AddBasesForPart): New helper.
593         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
594         instead.
595         * cs-parser.jay (current_class): Convert to DeclSpace.
596         (struct_declaration, interface_declaration, class_declaration):
597         Use AddBasesForPart instead of .Bases directly.
598         * const.cs, iterators.cs: Update to changes.
599
600 2006-07-28  Raja R Harinath  <rharinath@novell.com>
601
602         * class.cs (TypeContainer.AddMemberType): Rename from
603         AddToTypeContainer.
604         (TypeContainer.AddMember): Rename from AddToMemberContainer.
605         (AddTypeContainer): New.  Combine AddClassOrStruct and
606         AddInterface.
607         (AddPartial): Update.  Add 'is_partial' argument.
608         * roottypes.cs: Update to changes.
609         * cs-parser.jay (push_current_class): New helper for handling
610         current_container and current_class.
611         (struct_declaration, interface_declaration, class_declaration):
612         Use it.
613
614 2006-07-26  Raja R Harinath  <rharinath@novell.com>
615
616         * roottypes.cs: Rename from tree.cs.
617
618         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
619         * tree.cs (Tree, ITreeDump): Remove types.
620         * rootcontext.cs (tree, Tree): Remove fields.
621         (root, ToplevelTypes): New.
622         * *.cs: Update to rename.
623
624         * tree.cs (Tree.RecordDecl): Remove.
625         (RootTypes.AddToTypeContainer): Record the toplevel type in its
626         namespace here.
627         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
628
629 2006-07-23  Raja R Harinath  <harinath@gmail.com>
630
631         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
632         DoFlowAnalysis and OmitStructFlowAnalysis here.
633         (ec.With): Rename from WithUnsafe and generalize.
634         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
635         (ec.WithFlowAnalyis): New.
636         * ecore.cs, expression.cs, statement.cs: Update.
637
638 2006-07-22  Raja R Harinath  <harinath@gmail.com>
639
640         * statement.cs (Block.ResolveMeta): Simplify slightly.
641
642         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
643         multiple boolean fields.  Convert InUnsafe, constant_check_state,
644         check_state to flags.
645         (CheckState, ConstantCheckState): Update.
646         (InUnsafe): New read-only property.
647         (FlagsHandle): Rename from CheckStateHandle and convert to handle
648         arbitrary flags.
649         (WithUnsafe): New helper similar to WithCheckState.
650         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
651         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
652
653 2006-07-21  Raja R Harinath  <rharinath@novell.com>
654
655         Make comparisons use the same IL irrespective of whether they're
656         in a 'checked' or 'unchecked' context: one of the issues in #78899
657         * codegen.cs (EmitContext.CheckState): Make read-only property.
658         (EmitContext.ConstantCheckState): Likewise.
659         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
660         helper that implement a save/restore stack for CheckState
661         values.  This is the only way to change check-state.
662         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
663         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
664         (CheckedExpr.EmitBranchable): New forwarding method.
665         (UnCheckedExpr): Likewise.
666         * statement.cs (Block.ResolveMeta): Use WithCheckState.
667         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
668         (Checked.Resolve, checked.DoEmit): Likewise.
669
670 2006-07-21  Martin Baulig  <martin@ximian.com>
671
672         * generic.cs (TypeManager.InferType): When inferring an array
673         type, also allow IList<T> and ICollection<T>.  Fixes #78900.
674
675 2006-07-21  Martin Baulig  <martin@ximian.com>
676
677         * generic.cs (TypeManager.IsIEnumerable): Renamed into IsIList()
678         and allow IList`1 and all its base interfaces.
679
680         * convert.cs (Convert.ImplicitReferenceConversion): Allow
681         converting from an array-type of T to IList<T>.
682
683 2006-07-21  Martin Baulig  <martin@ximian.com>
684
685         * ecore.cs (SimpleName.DoSimpleNameResolve): Added CS0307 check.
686
687 2006-07-20  Miguel de Icaza  <miguel@novell.com>
688
689         * anonymous.cs: Cache the resolved anonymous delegate, and return
690         this so that the ResolveTopBlock is only triggered once, not
691         twice.
692
693         Currently we trigger ResolvetopBlock twice due to a first pass of
694         argument check compatibility, and a second pass that does the
695         actual resolution.   
696
697 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
698
699         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
700         modifiers.
701         * rootcontext.cs (Reset): Add helper_classes.
702
703 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
704
705         A fix for #78860
706         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
707         correctly.
708
709 2006-07-13  Miguel de Icaza  <miguel@novell.com>
710
711         * statement.cs (Lock): Handle expressions of type
712         TypeManager.null_type specially.  Fixes #78770
713
714 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
715
716         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
717         to an event.
718
719 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
720
721         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
722         for accessors as well.
723         * ecore.cs (EventExpr): Add AccessorTable.
724
725 2006-07-03  Martin Baulig  <martin@ximian.com>
726
727         * ecore.cs (UnboxCast.Emit): Also use `Unbox_Any' for generic
728         instances of value types.
729
730         * convert.cs (Convert.ExplicitConversion): Correctly handle
731         object->nullable conversions.   
732
733 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
734
735         A fix for #78738
736         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
737         for CS0122 where appropriate.
738         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
739         level attributes.
740         (Filter): Assembly can be null in the case of top level attributes.
741
742 2006-06-28  Raja R Harinath  <rharinath@novell.com>
743
744         Fix #78716
745         * generic.cs (TypeManager.InferParamsTypeArguments): If there are
746         no arguments, return 'false': nothing can be inferred.
747
748 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
749
750         A fix for #78690
751
752         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
753         is done at global level.
754
755 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
756
757         A fix for #77002, Implemented TypeForwarder support.
758
759         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
760         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Add TypeForwarder
761         attribute handling.
762         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
763         * typemanager.cs (): Add type_forwarder_attr_type.
764
765 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
766
767         * report.cs: Add CS0469 warning.
768
769 2006-06-22  Martin Baulig  <martin@ximian.com>
770
771         * class.cs
772         (TypeContainer.GetNormalBases): Also use ResolveAsBaseTerminal()
773         for interfaces; fixes #78686, which is a modification of #78380
774         with interfaces instead of classes.
775
776 2006-06-21  Martin Baulig  <martin@ximian.com>
777
778         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
779         the `try'-block, so we also report CS0016 etc. there.
780
781 2006-06-21  Martin Baulig  <martin@ximian.com>
782
783         * ecore.cs (FieldExpr.EmitAssign, FieldExpr.AddressOf): Correctly
784         handle SetAssigned() and SetMemberIsUsed() for generic types;
785         fixes #77545.
786
787 2006-06-21  Martin Baulig  <martin@ximian.com>
788
789         * delegate.cs
790         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
791
792 2006-06-21  Martin Baulig  <martin@ximian.com>
793
794         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
795         also report CS1686 for parameters.
796
797 2006-06-21  Martin Baulig  <martin@ximian.com>
798
799         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
800         instead of an error if the value is not implicitly convertible to
801         the switch types; fixes #77964.
802
803 2006-06-21  Raja R Harinath  <rharinath@novell.com>
804
805         Fix #78673
806         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
807         FieldBuilder is null.
808
809         Fix #78662
810         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
811         'left' and 'right' before error-checking.
812
813 2006-06-19  Martin Baulig  <martin@ximian.com>
814
815         * convert.cs
816         (Convert.ImplicitConversionStandard): Cleanup and correctly
817         implement nullable conversions.
818         (Convert.ImplicitStandardConversionExists): Likewise.
819         (Convert.ExplicitConversion): Likewise.
820
821 2006-06-19  Martin Baulig  <martin@ximian.com>
822
823         * generic.cs
824         (Nullable.Wrap.Create, Nullable.Unwrap.Create): New public static
825         methods; make the ctors protected.
826
827 2006-06-19  Martin Baulig  <martin@ximian.com>
828
829         Fixed #78380; added gtest-273.cs.
830
831         * ecore.cs
832         (Expression.ResolveAsBaseTerminal): Move the constraint checking
833         into ResolveAsTypeTerminal().
834
835         * generic.cs
836         (ConstraintChecker.HasDefaultConstructor): Use the non-cache based
837         TypeManager.FindMembers() to check for the default ctor.
838
839 2006-06-18  Marek Safar  <marek.safar@seznam.cz>
840
841         * generic.cs: Fixed NullableInfo accessibility.
842
843 2006-06-16  Martin Baulig  <martin@ximian.com>
844
845         * generic.cs
846         (Constraints.InflatedConstraints.inflate): Correctly inflate
847         generic types; fixes #78400.
848
849 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
850
851         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
852         Fixed bug #78601.
853         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
854         (FieldExpr.DoResolve): likewise.
855         (PropertyExpr.InstanceResolve): likewise.
856         (EventExpr.InstanceResolve): likewise. 
857
858 2006-06-15  Martin Baulig  <martin@ximian.com>
859
860         * statement.cs
861         (SwitchLabel.ResolveAndReduce): Added `bool allow_nullable'
862         argument; always allow a `null' label if true.
863         (Switch.SwitchGoverningType): Take an `Expression expr' argument.
864         (Switch.TableSwitchEmit, Switch.SimpleSwitchEmit): Check whether
865         we have a `null' label and mark the new `null_target' label;
866         default to the `default' label.
867         (Switch.Resolve): Add support for nullable types.  Fixes #78630.
868
869 2006-06-15  Martin Baulig  <martin@ximian.com>
870
871         * class.cs (Operator.Define): Allow an implicit/explicit operator
872         to convert to/from a nullable value of the enclosing type.
873
874         * generic.cs (TypeManager.IsNullableTypeOf): New public method.
875         (Nullable.Unwrap, Nullable.Wrap): Make these classes public.
876
877         * convert.cs
878         (Convert.ImplicitStandardConversionExists): Add support for lifted
879         implicit/explicit conversions.
880         (Convert.ImplicitConversionStandard): Likewise.
881
882 2006-06-13  Martin Baulig  <martin@ximian.com>
883
884         * ecore.cs (SimpleName.DoSimpleNameResolve): Check whether we have
885         type arguments and create a ConstructedType if necessary.  Fixes #78400.
886
887 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
888
889         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
890         attribute applicable tests for attribute argument.
891
892 2006-06-02  Raja R Harinath  <rharinath@novell.com>
893
894         Fix #78079
895         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
896         (Binary.OverloadResolve_PredefinedIntegral): New.
897         (Binary.OverloadResolve_PredefinedFloating): New.
898         (Binary.OverloadResolve_PredefinedString): New.
899         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
900         Follow the standard more closely, and treat numeric promotions in
901         terms of overload resolution.
902         (Binary.CheckShiftArguments): Simplify.
903
904 2006-06-01  Raja R Harinath  <rharinath@novell.com>
905
906         * flowanalysis.cs (MyBitVector): Simplify representation.
907         (MyBitVector.Clone): Avoid allocating BitArray.
908         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
909         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
910         (*): Update.  Change all references to MyBitVector.And and
911         MyBitVector.Or to &= and |=.
912
913 2006-05-31  Raja R Harinath  <rharinath@novell.com>
914
915         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
916         Use bne.un instead of ceq+brfalse.
917
918         Fix cs0208-[23].cs
919         * typemanager.cs (IsUnmanagedType): Disallow generic types and
920         generic parameters.
921
922 2006-05-29  Raja R Harinath  <rharinath@novell.com>
923
924         Fix cs0231-[34].cs.
925         * cs-parser.jay (formal_parameter_list): Extend the pattern below
926         to param arguments too.
927
928 2006-05-26  Miguel de Icaza  <miguel@novell.com>
929
930         * cs-parser.jay: Catch another parsing form for arglist being
931         followed by other arguments.  Fixes #78313.
932
933 2006-05-25  Raja R Harinath  <rharinath@novell.com>
934
935         Fix #78324
936         * expression.cs (Binary.DoResolve): Use Nullable.LiftedBinaryOperator
937         also when one of the operands is a null literal.
938         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality): Rewrite
939         to improve clarity, and generate slightly better code.
940
941 2006-05-24  Raja R Harinath  <rharinath@novell.com>
942
943         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
944         checking of out parameters to ...
945         (FlowBranchingToplevel.Merge): ... here.
946         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
947         set, propagate the origin upward, and only complain if there was
948         no other error.
949         (FlowBranchingException.AddContinueOrigin): Likewise.
950         (FlowBranchingException.AddReturnOrigin): Likewise.
951         (FlowBranchingException.AddGotoOrigin): Likewise.       
952
953 2006-05-23  Raja R Harinath  <rharinath@novell.com>
954
955         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
956         unreachable, skip it.
957         (FlowBranchingException.Merge): Always propagate jumps, even if
958         the finally block renders subsequent code unreachable.
959
960 2006-05-18  Raja R Harinath  <rharinath@novell.com>
961
962         Fix #77601
963         * statement.cs (Goto.Resolve): Move responsibility for resolving
964         'goto' to FlowBranching.AddGotoOrigin.
965         (Goto.SetResolvedTarget): New.  Callback to set the
966         LabeledStatement that's the target of the goto.
967         (Goto.DoEmit): Use Leave instead of Br when crossing an
968         unwind-protect boundary.
969         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
970         LookupLabel and adjust to new semantics.
971         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
972         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
973         Goto.SetResolvedTarget to update target.
974         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
975         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
976         AddBreakOrigin & co.  Delay propagation until ...
977         (FlowBranchingException.Merge): ... this.
978
979         * statement.cs (Block.Resolve): Always depend on flow-branching to
980         determine unreachability.  Kill workaround that originally emitted
981         only one statement after an "unreachable" label (see infloop in
982         test-515.cs).
983
984         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
985         This is still "wrong", but anything better would probably need a
986         multi-pass algorithm.
987         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
988         usage vector.  Force current usage vector to be reachable, to
989         optimistically signify backward jumps.
990         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
991         detected.
992         (FlowBranchingLabeled.Merge): New.  If no backward jump was
993         detected, return the original salted-away usage vector instead,
994         updated with appropriate changes.  Print unreachable warning if
995         necessary.
996         * statement.cs (Block.Resolve): Don't print unreachable warning on
997         a labeled statement.
998
999 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
1000
1001         * driver.cs: Pass filename without path to AssemblyBuilder's
1002         AddResourceFile. Fixes bug #78407.
1003
1004 2006-05-17  Raja R Harinath  <rharinath@novell.com>
1005
1006         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
1007         * flowanalysis.cs (FlowBranchingLabeled): ... here.
1008         (FlowBranching.MergeChild): Overwrite
1009         reachability information from Labeled branchings too.
1010
1011 2006-05-16  Raja R Harinath  <rharinath@novell.com>
1012
1013         * statement.cs (Goto.Resolve): Merge jump origins here ...
1014         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
1015
1016         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
1017         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
1018         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
1019         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
1020         here, ...
1021         * statement.cs (Goto.Resolve): ... not here.
1022         (Goto.Emit): Remove CS1632 check.
1023
1024 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
1025
1026         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
1027         error message.
1028
1029 2006-05-11  Raja R Harinath  <rharinath@novell.com>
1030
1031         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
1032         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
1033         (FlowBranchingException.Label): Likewise.
1034
1035         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
1036         given value.
1037         (MyBitVector.Or): Use it to avoid losing information (Count).
1038         (FlowBranching.MergeOrigins): Likewise.
1039
1040         * flowanalysis.cs (UsageVector.IsDirty): Remove.
1041         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
1042         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
1043         (UsageVector.ToString): Simplify.
1044         (UsageVector.MergeSiblings): Move here from ...
1045         (FlowBranching.Merge): ... here.
1046         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
1047         not a MyBitVector.
1048
1049 2006-05-10  Raja R Harinath  <rharinath@novell.com>
1050
1051         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
1052         null bitvector is treated as all-true.
1053
1054         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
1055         (MyBitVector): Rationalize invariants.  'vector != null' implies
1056         that we have our own copy of the bitvector.  Otherwise,
1057         'InheritsFrom == null' implies all inherited bits are true.
1058
1059 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
1060
1061         * statement.cs (LocalInfo): Add IsConstant.
1062         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
1063         local variable for constants.
1064
1065 2006-05-09  Raja R Harinath  <rharinath@novell.com>
1066
1067         * flowanalysis.cs (MyBitVector.Empty): New.
1068         (MyBitVector): Don't allow InheritedFrom to be null.
1069         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
1070         (UsageVector, FlowBranching): Update to changes.
1071
1072         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
1073         recursion.  The 'Parent == null' condition isn't sufficient for
1074         anonymous methods.
1075         (FlowBranching.AddBreakOrigin): Likewise.
1076         (FlowBranching.AddContinueOrigin): Likewise.
1077         (FlowBranching.AddReturnOrigin): Likewise.
1078         (FlowBranching.StealFinallyClauses): Likewise.
1079         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
1080         (FlowBranching.CheckOutParameters): Likewise.
1081         (FlowBranchingToplevel): Terminate all the above recursions here.
1082         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
1083         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
1084
1085         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
1086         toplevel block.
1087         (FlowBranchingToplevel): New.  Empty for now.
1088         (FlowBranching.MergeTopBlock): Update.
1089         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
1090         branching for the anonymous delegate.
1091         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
1092
1093         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
1094         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
1095         information at the start of the merge.  Reorganize.
1096
1097 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
1098
1099         * class.cs (MethodData.Define): Method cannot implement interface accessor.
1100
1101 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
1102
1103         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
1104         to newly introduced ctor.
1105
1106         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
1107         message to one place.
1108         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
1109         global namespace.
1110
1111 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
1112
1113         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
1114
1115         * ecore.cs (Expression.ResolveAsConstant): Updated.
1116
1117         * statement.cs (ResolveMeta): Updated.
1118
1119 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
1120
1121         * cs-parser.jay: __arglist cannot be used in initializer.
1122
1123 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
1124
1125         A fix for #77879
1126         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
1127         private types.
1128
1129 2006-05-05  Raja R Harinath  <rharinath@novell.com>
1130
1131         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
1132         (LabeledStatement): Add 'name' parameter.
1133         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
1134         (Block.AddLabel): Update to changes.
1135         * cs-parser.jay (labeled_statement): Likewise.
1136
1137         * flowanalysis.cs (BranchingType.Labeled): New.
1138         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
1139         (FlowBranchingLabeled): New.  Does nothing for now, but will
1140         eventually handle 'goto' flows.
1141         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
1142         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
1143         that's terminated ...
1144         (Block.Resolve): ... here.
1145
1146         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
1147         (UsageVector.MergeFinallyOrigins): Likewise.
1148         (FlowBranching.InTryOrCatch): Likewise.
1149         (FlowBranching.AddFinallyVector): Likewise.
1150         (FlowBranchingException): Update to changes.
1151
1152         Fix #78290
1153         * statement.cs (Return.Resolve): Move error checking to ...
1154         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
1155         (FlowBranchingException): Handle return origins like break and
1156         continue origins.
1157         (FlowBranching.UsageVector.CheckOutParameters): Remove.
1158
1159 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
1160
1161         A fix for #76122
1162         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
1163         filter.
1164
1165 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
1166
1167         A fix for #77543
1168         * class.cs (MethodData.Define): Do public accessor check only when method
1169         implements an interface.
1170
1171 2006-05-04  Raja R Harinath  <rharinath@novell.com>
1172
1173         Remove special handling of 'break'
1174         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
1175         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
1176         (UsageVector.Break): Remove.
1177         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
1178         reachability.
1179         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
1180
1181         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
1182         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
1183
1184 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
1185
1186         A fix for #75726
1187         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
1188         be the interface member.
1189
1190 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
1191
1192         A fix for #60069
1193         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
1194         for emitting small (int) values.
1195
1196 2006-05-03  Raja R Harinath  <rharinath@novell.com>
1197
1198         Fix #59427
1199         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
1200         control-flow passes through the 'finally' after merging-in all the
1201         control-flows from 'try' and the 'catch' clauses.
1202
1203         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
1204         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
1205         always true at the only non-recursive entry point.
1206         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
1207         FlowBranchingBreakable.
1208         (FlowBranchingLoop): Remove.
1209         * statement.cs (Return.DoResolve): Update to changes.
1210
1211         Fix #76471, #76665
1212         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
1213         (FlowBranching.CreateBranching): Handle it: create a
1214         FlowBranchingContinuable.
1215         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
1216         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
1217         except that it handles the 'continue' command.
1218         (FlowBranching.UsageVector.MergeOrigins): Rename from
1219         MergeBreakOrigins.
1220         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
1221         except that it overrides AddContinueOrigin.
1222         (FlowBranchingException): Override AddContinueOrigin, similar to
1223         AddBreakOrigin.
1224         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
1225         Create a new branching around the embedded statement.
1226         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
1227         control flow after the embedded statement.
1228         (Continue.Resolve): Move all error checking to AddContinueOrigin.
1229
1230         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
1231         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
1232         FlowBranchingBreakable.
1233         (FlowBranchingSwitch): Remove.
1234
1235         Fix test-503.cs
1236         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
1237         error reporting to ...
1238         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
1239         Rename from 'AddBreakVector'.  Add new location argument.  Return
1240         a bool indicating whether the 'break' crosses an unwind-protect.
1241         (FlowBranchingException.AddBreakOrigin): Add.
1242         (FlowBranchingException.Merge): Propagate 'break's to surrounding
1243         flowbranching after updating with the effects of the 'finally'
1244         clause.
1245         (FlowBranchingBreakable): New common base class for
1246         FlowBranchingLoop and FlowBranchingSwitch.
1247
1248         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
1249         embedded statement.
1250         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
1251
1252 2006-05-02  Raja R Harinath  <rharinath@novell.com>
1253
1254         * statement.cs (Do.Resolve): If the loop is infinite, set the
1255         barrier.
1256         (While.Resolve, For.Resolve): Set a barrier after the embedded
1257         statement.  There's no direct control flow that goes from the end
1258         of the embedded statement to the end of the loop.
1259         * flowanalysis.cs (FlowBranching.Infinite): Remove.
1260         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
1261         above ensure that the reachability is correctly computed.
1262
1263         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
1264         (UsageVector.MergeBreakOrigins): If the current path is
1265         unreachable, treat it as if all parameters/locals are initialized.
1266         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
1267         infinite loops before merging-in break origins.
1268
1269         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
1270         (Reachability.Reachable): Split part into ...
1271         (Reachability.Unreachable): ... this.  Simplify.
1272         (Reachability.IsUnreachable): Use 'Unreachable' instead.
1273
1274         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
1275         (Reachability.SetThrowsSometimes): Likewise.
1276         (FlowBranchingBlock.MergeTopBlock): Don't compare against
1277         TriState.Always, use corresponding property.
1278         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
1279         (Block.Resolve): Likewise.  Remove some redundant checks.
1280
1281 2006-05-02  Raja R Harinath  <harinath@gmail.com>
1282
1283         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
1284         (Reachability.Meet): Don't bother checking AlwaysThrows --
1285         barrier is always set.
1286         (FlowBranchingBlock.Merge): Likewise.
1287
1288 2006-05-01  Rafael Teixeira <rafaelteixeirabr@hotmail.com>
1289
1290         * attribute.cs: fixed_buffer_cache is declared only if NET_2_0 is
1291         defined, so it's references should also compile only for NET_2_0
1292         (as occurs in mcs version)
1293
1294 2006-05-01  Raja R Harinath  <harinath@gmail.com>
1295
1296         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
1297         checks for unreachable.
1298
1299 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
1300
1301         A fix for #77980
1302         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
1303
1304         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
1305         whether field is really assigned.
1306
1307 2006-04-30  Raja R Harinath  <harinath@gmail.com>
1308
1309         * flowanalysis.cs (Reachability): Make 4-argument constructor
1310         private.
1311         (Reachability.Meet): Rename from 'And'.  Remove static variant.
1312         (Reachability.Always): Rename from the highly misleading
1313         'Reachability.Never'.
1314         (FlowBranching.Merge): Update to changes.  Mark an impossible
1315         situation with a 'throw'.
1316         (*): Update to changes.
1317
1318 2006-04-29  Raja R Harinath  <harinath@gmail.com>
1319
1320         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
1321         Remove 'Undefined'.
1322         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
1323         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
1324         (*): Update to changes.
1325         * statement.cs: Update to changes.
1326
1327 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
1328
1329         A fix for #78049
1330         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
1331
1332 2006-04-28  Raja R Harinath  <harinath@gmail.com>
1333
1334         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
1335         dummy UsageVector.
1336
1337         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
1338         argument to two arguments: an usage-vector and a bool.  Move call
1339         to FlowBranching.Merge () ...
1340         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
1341
1342         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
1343         handling of loop and switch reachability to ...
1344         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
1345
1346 2006-04-27  Raja R Harinath  <harinath@gmail.com>
1347
1348         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
1349         handling to FlowBranchingLoop.InLoop.
1350         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
1351
1352 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
1353
1354         A fix for #78115
1355         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
1356         anonymous method is allowed from AnonymousContainer here.
1357
1358         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
1359
1360 2006-04-24  Raja R Harinath  <rharinath@novell.com>
1361
1362         Fix #78156
1363         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
1364
1365 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
1366
1367         A fix for #49011.
1368         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
1369         (DoubleConstant.Reduce): Ditto.
1370
1371 2006-04-23  Raja R Harinath  <rharinath@novell.com>
1372
1373         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
1374         Remove 'lvalue_right_side' argument.  Move parts to ...
1375         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
1376         (LocalVariable.DoResolveLValue): ... these.
1377
1378 2006-04-21  Raja R Harinath  <rharinath@novell.com>
1379
1380         Fix cs1655.cs
1381         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
1382         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
1383         (LocalVariableReference.DoResolveBase): Use it to implement new
1384         CS1655 check.
1385         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
1386         (Argument.Resolve): Simplify.  Move CS1510 check ...
1387         * ecore.cs (Expression.ResolveLValue): ... here.
1388         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
1389         (PropertyExpr.DoResolveLValue): Likewise.
1390         (FieldExpr.Report_AssignToReadonly): Likewise.
1391         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
1392         LValueMemberAccess or LValueMemberOutAccess on instance depending
1393         on it.
1394         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
1395         DoResolve as appropriate.
1396
1397 2006-04-20  Raja R Harinath  <rharinath@novell.com>
1398
1399         Fix #75800
1400         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
1401         implicit conversions on 'out' and 'ref' arguments.
1402
1403         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
1404         improve clarity.  Remove dead code.
1405
1406         Fix #66031
1407         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
1408         (Catch.Resolve): Resolve VarBlock if it exists.
1409
1410 2006-04-19  Miguel de Icaza  <miguel@novell.com>
1411
1412         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
1413         twice, this was some residual code, the enumerator was emitted
1414         properly in the two branche of if later.
1415
1416         Fixes #78031
1417         
1418         Thanks to Martin for finding the source of the problem
1419         
1420 2006-04-19  Raja R Harinath  <rharinath@novell.com>
1421
1422         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
1423         cast is never an lvalue.
1424         (Cast.DoResolve, Cast.ResolveRest): Combine.
1425         (Argument.Emit): Simplify slightly.  Move 'Expr is
1426         IMemoryLocation' check ...
1427         (Argument.Resolve): ... here.
1428         (Argument.Error_LValueRequired): Remove.  Inline into only user.
1429
1430         Simplifications.  Fix cs0191-2.cs
1431         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
1432         CS1649 and CS1651 to ...
1433         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
1434         the actual selection of the error code and message to a lookup
1435         table.  Add a dummy return value to simplify callsites.
1436         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
1437         readonly fields of other instances of the same type.  Move CS0197
1438         warning from ...
1439         * expression.cs (Argument.Resolve): ... here.  Simplify code.
1440         Ensure that ec.InRefOutArgumentResolving is only set during LValue
1441         resolution of an out or ref argument.  The code simplification
1442         above uses this invariant.
1443
1444 2006-04-18  Raja R Harinath  <rharinath@novell.com>
1445
1446         Possibly fix #77752.  Fix cs1690-[4-7].cs.
1447         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
1448         CheckMarshallByRefAccess.  Drop parameter.
1449         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
1450         warning.
1451         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
1452         InstanceExpression.
1453         * report.cs (AllWarnings): Add CS1690.
1454         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
1455         for ref access too.
1456         (LocalVariableReference.DoResolveBase): Update.
1457
1458 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1459
1460         * class.cs (MethodOrOperator): Moved common parts from method class.
1461         detect obsolete attributes.
1462         (Method.Define): Simplified as it reuses code from base.
1463         (Constructor.ValidAttributeTargets): Fixed issue found during
1464         refactoring.
1465         (Destructor.ValidAttributeTargets): Fixed issue found during
1466         refactoring.
1467         (Operator): Finished refactoring set off by #78020. Operator class is now
1468         ordinary method class.
1469
1470         * anonymous.cs: Updated.
1471
1472 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1473
1474         * class.cs (Constructor.Emit): Don't emit the attributes twice.
1475
1476 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1477
1478         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
1479         detect obsolete attributes.
1480         (Method.CreateEmitContext): Moved to MethodOrOperator.
1481
1482 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1483
1484         A fix for #78048.
1485         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
1486         customized exception to make crash detection easier.
1487         (MethodOrOperator): Started to work on new base class for methods and
1488         operators.
1489         (Method): Derives from MethodOrOperator.
1490         (Constructor.Emit): Emits its own attributes.
1491         (AbstractPropertyEventMethod.Emit): Ditto.
1492         (Operator): Derives from MethodOrOperator, will refactor fully in extra
1493         patch.
1494         (Operator.Emit): It's temporary more tricky than should be.
1495         
1496         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
1497
1498         * report.cs (InternalErrorException): Add ctor with inner exception.
1499
1500 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
1501
1502         A fix for #76744.
1503         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
1504         only not visible.
1505
1506 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
1507
1508         A fix for #77916.
1509         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
1510         array.
1511
1512 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
1513
1514         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
1515         attribute is present and Guid not.
1516         (Interface.ApplyAttributeBuilder): Ditto.
1517
1518         * attribute.cs: Add error message.
1519
1520 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
1521
1522         A fix for #78020.
1523
1524         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
1525         sources (it's composite) so hold them in extra array as they are used in
1526         Emit phase only. It worked in the previous versions by mistake.
1527         (Attribute.Emit): Emit attribute for more owners when exist.
1528
1529         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
1530         it has now different behaviour.
1531
1532 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
1533
1534         * constant.cs (Constant.IsDefaultInitializer): New method.
1535
1536         * class.cs: Updated.
1537
1538         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
1539         re-initialize default values. It saves KBs almost for every assembly.
1540         Thanks Zoltan for the idea.
1541         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
1542         (ArrayCreation.DoResolve): Resolve only once.
1543         (ArrayCreation.Emit): Emit static initializer only when it is faster.
1544         (ArrayCreation.GetAttributableValue): Cope with optimized values.
1545
1546 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
1547
1548         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
1549         From #77961.
1550
1551 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
1552
1553         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
1554         in an embedded statement too.
1555
1556 2006-04-01  Raja R Harinath  <rharinath@novell.com>
1557
1558         Fix #77929
1559         * typemanager.cs (IsNestedChildOf): Drop generic arguments before
1560         testing.
1561
1562         Fix #77958
1563         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
1564
1565         Fix #77962
1566         * report.cs (SymbolRelatedToPreviousError): Drop generic type
1567         arguments before checking whether a type is reflected or not.
1568
1569         Fix #77954
1570         * expression.cs (Invocation.IsApplicable): Ensure a generic method
1571         definition doesn't take part in overload resolution.
1572         (Invocation.IsParamsMethodApplicable): Likewise.
1573         (Invocation.OverloadResolve): When replacing a reflected override
1574         method with its base definition, ensure that type arguments are
1575         applied.
1576
1577 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
1578
1579         A fix for #77966.
1580
1581         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
1582         was not specified.
1583
1584         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
1585
1586 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
1587
1588         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
1589         phase.
1590
1591         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
1592         LocalTemporary change.
1593
1594         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
1595         TypeContainer.
1596         (ClassOrStruct.DefineFieldInitializers): Implemented static field
1597         initializers optimization.
1598         (ClassOrStruct.TypeAttr): Moved from modifiers.
1599         (Constructor.CheckBase): Don't crash when static ctor has parameters.
1600         (FieldBase.ResolveInitializer): Resolves initializer.
1601         (FieldBase.HasDefaultInitializer): New property.
1602
1603         * cs-parser.jay: Removed message.
1604
1605         * expression.cs (CompilerGeneratedThis): New specialization.
1606
1607         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
1608
1609 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
1610
1611         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
1612
1613 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
1614
1615         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
1616         be now EnumConstants only.
1617
1618 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
1619
1620         * attribute.cs, driver.cs: Reset more caches.
1621
1622 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1623
1624         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
1625
1626 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1627
1628         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
1629         for easier reuse. Updated all overrides.
1630         (IntegralConstant): New base class for all integral constants.
1631         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
1632         of the constant range, report custom error.
1633         (UIntConstant.Reduce): Fixed uint conversion.
1634
1635         * ecore.cs, literal.cs: Reduce updates.
1636
1637 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1638
1639         A fix for #75813.
1640
1641         * class.cs (Constructor.Define): Removed extra if for default ctors.
1642         A patch from Atsushi Enomoto.
1643
1644 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1645
1646         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
1647         GetAttributableValue.
1648
1649         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
1650         when required.
1651
1652         * convert.cs (ImplicitConversionRequired): Error message moved to
1653         DoubleLiteral.
1654
1655         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
1656         automatic implicit conversion of an output value.
1657         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
1658
1659         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
1660         conversion.
1661         (TypeOf.GetAttributableValue): Add extra handling for object type.
1662
1663         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
1664         special error message.
1665
1666 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
1667
1668         * class.cs (Constructor.Emit): Don't crash when struct ctor is
1669         InternalCall.
1670         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
1671         compatible with MS runtime.
1672
1673 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
1674
1675         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
1676         attribute arguments here.
1677
1678         * class.cs (Indexer.Define): The check was moved to attribute class.
1679
1680 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
1681
1682         * expression.cs (StringConcat.Append): Reverted back to no warning state.
1683
1684 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
1685
1686         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
1687
1688         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
1689         the blocks too.
1690
1691 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
1692
1693         * doc-bootstrap.cs : fix build.
1694
1695 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
1696
1697         * expression.cs (StringConcat.Append): Issue a warning when empty string
1698         is going to append.
1699
1700 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
1701
1702         * assign.cs (CompoundAssign.ResolveSource): Removed.
1703
1704         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
1705         clean up.
1706
1707         * class.cs (TypeContainer.FindMethods): Removed.
1708         (TypeContainer.CheckMemberUsage): Made static.
1709
1710         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
1711
1712         * constant.cs (CheckRange): Removed unused type argument.
1713         (CheckUnsigned): Removed unused type argument.
1714
1715         * cs-parser.jay: Updated after MemberAccess clean up.
1716         Uses Length for empty string test.
1717
1718         * cs-tokenizer.cs: Uses Length for empty string test.
1719         (IsCastToken): Made static.
1720         (is_hex): Made static.
1721         (real_type_suffix): Made static.
1722
1723         * decl.cs (SetupCache): Made static.
1724         (OnGenerateDocComment): Removed unused ds argument.
1725
1726         * delegate.cs (VerifyDelegate): Removed unused argument.
1727
1728         * doc.cs: Uses Length for empty string test.
1729
1730         * driver.cs: Uses Length for empty string test.
1731
1732         * enum.cs (IsValidEnumType): Made static
1733
1734         * expression.cs (EnumLiftUp): Removed unused argument.
1735         (ResolveMethodGroup): Ditto.
1736         (BetterConversion): Ditto.
1737         (GetVarargsTypes): Ditto.
1738         (UpdateIndices): Ditto.
1739         (ValidateInitializers): Ditto.
1740         (MemberAccess.ctor): Ditto.
1741         (GetIndexersForType): Ditto.
1742
1743         * flowanalysis.cs: (MergeFinally): Removed unused argument.
1744
1745         * iterators.cs: Updated after MemberAccess clean up.
1746
1747         * location.cs: Uses Length for empty string test.
1748
1749         * namespace.cs: Uses Length for empty string test.
1750
1751          * report.cs (CheckWarningCode): Made static.
1752
1753         * statement.cs (LabeledStatement): Removed unused argument.
1754
1755         * typemanager.cs (FilterNone): Removed.
1756
1757 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1758
1759         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
1760         obsolete.
1761
1762         * class.cs: Updated.
1763
1764 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1765
1766         * cs-parser.jay.cs: __arglist is not allowed for delegates.
1767
1768 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1769
1770         A fix for #77816.
1771
1772         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
1773         host container.
1774         (AnonymousMethod.ImplicitStandardConversionExists): New method.
1775         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
1776         Add more error reporting; Fixed issue with params.
1777
1778         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
1779
1780         * cs-parser.jay: AnonymousMethod requires host container.
1781
1782         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
1783
1784 2006-03-18  Raja R Harinath  <harinath@gmail.com>
1785
1786         * class.cs: Change 'TypeContainer ds' constructor argument to
1787         'DeclSpace parent'.  Some classes were missed below due to
1788         different naming convention.
1789
1790         * class.cs (MemberCore.Parent): Delete.  This makes the
1791         ParentContainer changes below enforceable by the compiler.
1792
1793         Treat pointers to enclosing declaration space as 'DeclSpace', not
1794         'TypeContainer'.
1795         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
1796         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
1797
1798         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
1799         of TypeContainer.
1800         (Block.AddThisVariable): Likewise.
1801         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
1802         (AbstractPropertyEventMethod.Emit): Likewise.
1803         (AbstractPropertyEventMethod.EmitMethod): Likewise.
1804         (GetMethod.Define, SetMethod.Define): Likewise.
1805         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
1806         (DelegateMethod.EmitMethod): Likewise.
1807
1808         Fix regression test-partial-13.cs.
1809         Rationalize use of PartialContainer.  Ensure that the partial
1810         class semantics can be tied to type-correctness, i.e., any
1811         violation will cause a compile error.
1812         * class.cs, const.cs: Access all fields that belong to class
1813         TypeContainer via ParentContainer.  Arguments of EmitContexts and
1814         Resolve()-like functions still use 'Parent'.
1815
1816         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
1817         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
1818         (PropertyMethod.CheckModifiers): Remove unused argument.
1819         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
1820         DeclSpace.
1821
1822 2006-03-28  Raja R Harinath  <rharinath@novell.com>
1823
1824         * decl.cs (DeclSpace.LookupGeneric): Update to changes.
1825
1826 2006-03-17  Raja R Harinath  <harinath@gmail.com>
1827
1828         Make semantics of PartialContainer simpler.
1829         * decl.cs (DeclSpace.IsPartial): Remove.
1830         * class.cs (TypeContainer.IsPartial): Likewise.
1831         (TypeContainer..ctor): Set PartialContainer to point to self.
1832         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
1833         (TypeContainer.FindNestedType): Likewise.
1834         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
1835
1836 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
1837
1838         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
1839
1840 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
1841
1842         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
1843         classes.
1844
1845 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
1846
1847         * class.cs (Operator.Define): An error for base conversion was not
1848         reported correctly.
1849
1850 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
1851
1852         A fix for #77593, #77574.
1853
1854         * class.cs (MethodCore.CheckBase): Another if for operator.
1855
1856 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1857
1858         A fix for #77822.
1859
1860         * expression.cs (VerifyArgumentsCompat): Reverted to double error
1861         reporting, it's more tricky than I thought.
1862
1863 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
1864
1865         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
1866         were not resolved
1867
1868         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
1869         (DelegateCreation.ImplicitStandardConversionExists): New method for just
1870         conversion test.
1871         
1872         * ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
1873         not needed.
1874
1875 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
1876
1877         A fix for #77353.
1878
1879         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
1880         (Event.Define): ditto
1881         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
1882
1883         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
1884         Removed redundant code and set NewSlot for Invoke method too.
1885
1886         * parameter.cs (Parameters.ctor): Add custom, type ctor.
1887         (Parameters.MergeGenerated): New method. Use this method when you merge
1888         compiler generated argument with user arguments.
1889
1890 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
1891
1892         * attribute.cs (ResolveAsTypeTerminal): Removed.
1893
1894         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
1895         specialization for predefined types; 30% speed up.
1896         Finally placed obsolete check to right place.
1897         (Expression.ResolveType): Removed.
1898
1899         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
1900         Updated after ResolveType was removed.
1901
1902         * expression.cs (Cast.ctor): Check void cast.
1903         (Binary.ResolveAsTypeTerminal): Is never type.
1904         (Conditional.ResolveAsTypeTerminal): Is never type.
1905
1906         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
1907
1908 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1909
1910         * rootcontext.cs (ResolveCore): Removed System.INullableValue.
1911
1912 2006-03-23  Martin Baulig  <martin@ximian.com>
1913
1914         * expression.cs (Is.DoResolve, As.DoResolve): Perform a dynamic
1915         type check if either of the types is an open generic type.
1916
1917 2006-03-23  Martin Baulig  <martin@ximian.com>
1918
1919         * convert.cs
1920         (Convert.ExplicitTypeParameterConversion): New method; implement
1921         explicit type parameter conversions.
1922
1923 2006-03-23  Martin Baulig  <martin@ximian.com>
1924
1925         * convert.cs (Convert.ImplicitTypeParameterConversion): Do not
1926         blindly allow all conversions if we do not have any constraints.
1927
1928 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
1929
1930         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
1931         these two separated members to simplify the code.
1932         (Attribute.Resolve): Refactored to use new fields and methods.
1933         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
1934         implemented obsolete attribute checking.
1935         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
1936         implemented obsolete checking again. It look line never ending quest ;-)
1937         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
1938
1939         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
1940
1941         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
1942
1943         *class.cs (Property.Define): Add RegisterProperty call.
1944
1945         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
1946         argument groups (only 2).
1947
1948         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
1949         encoding expression to arguments.
1950         (Expression.ExprClassToResolveFlags): Just turned to property.
1951
1952         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
1953         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
1954         optimized as well as implemented support for zero-length attributes.
1955
1956         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
1957         Add caching of PropertyInfo's.
1958
1959 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
1960
1961         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
1962         error multiple times.
1963
1964 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
1965
1966         New partial class implementation.
1967         A fix for #77027, #77029, #77403
1968
1969         * attribute.cs (Attributable): Made attributes protected.
1970
1971         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
1972         the replacements of ClassPart and PartialContainer.
1973         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
1974         (TypeContainer.AddInterface): Ditto.
1975         (TypeContainer.AddPartial): The main method for partial classes. It checks
1976         for errors and merges ModFlags and attributes. At the end class is added to
1977         partial_parts list.
1978         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
1979         required here.
1980         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
1981         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
1982         from the rest of partial classes.
1983         (TypeContainer.GetClassBases): Simplified.
1984         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
1985         DefineType.
1986         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
1987         (TypeContainer.HasExplicitLayout): Uses Flags now.
1988         (PartialContainer): Removed.
1989         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
1990         (StaticClass): Was merged with Class.
1991         (Class.GetClassBases): class and static class bases are verified here.
1992         (Class.TypeAttr): Added static attributes when class is static.
1993         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
1994         (MemberBase): In some cases we need to call parent container for partial
1995         class. It should be eliminated but it's not easy now.
1996
1997         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
1998
1999         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
2000         partial classed to accumulate class comments.
2001         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
2002
2003         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
2004
2005         * driver.cs (MainDriver): Tree.GetDecl was removed.
2006
2007         * modifiers.cs (Modifiers): Add partial modifier.
2008
2009         * tree.cs (Tree.decl): Removed.
2010         (RootTypes): Started to use this class more often for root types
2011         specializations.
2012
2013 2006-03-23  Raja R Harinath  <rharinath@novell.com>
2014
2015         * generic.cs (TypeParameter.UpdateConstraints): Update
2016         'constraints' if null.
2017
2018 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
2019
2020         A fix for #77615
2021
2022         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
2023         external interface does not have an attribute.
2024
2025 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
2026
2027         Another prerequisites for new partial classs implementation.
2028         
2029         * attribute.cs (Attribute.Equal): Implemented.
2030         (Attribute.Emit): Changed as attributes can be applied more than twice.
2031         (Attributes.Emit): Check for duplicate attributes here.
2032
2033         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
2034         as a parameter, clean-up.
2035
2036 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
2037
2038         A fix for #77485
2039
2040         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
2041         contains obsolete attribute check which can in some cases look for base
2042         type of current class which is not initialized yet.
2043         (TypeContainer.BaseType): Replacement of ptype.
2044
2045         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
2046
2047 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
2048
2049         First of prerequisites for new partial classs implemention.
2050         
2051         * attribute.cs (Attributable): Extended by ResolveContext;
2052         Attributes finally have correct context for resolving in all cases.
2053         (AttachTo): Attribute owner is assigned here.
2054
2055         * codegen.cs (IResolveContext): Introduce new interface to hold
2056         all information needed in resolving phase.
2057         (EmitContext): Implements IResolveContext; more clean-up needed here.
2058         
2059         * decl.cs (MemberCore): Implemented IResolveContext.
2060
2061         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
2062         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
2063         parameter.cs, statement.cs, tree.cs, typemanager.cs:
2064         Refactored to use new IResolveContext instead of EmitContext; cleanup
2065
2066 2006-03-22  Raja R Harinath  <rharinath@novell.com>
2067
2068         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
2069         mcs to keep code differences small.
2070         * attribute.cs (Attribute.GetParameterDefaultValue): New.
2071         * typemanager.cs (parameter_default_value_attribute_type): New.
2072         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
2073         CS1908 check.
2074
2075 2006-03-22  Martin Baulig  <martin@ximian.com>
2076
2077         * generic.cs
2078         (Nullable.NullableLiteral): Derive from `NullLiteral'.
2079
2080         * convert.cs
2081         (Convert.TypeParameter_to_Null): Create a `Nullable.NullableLiteral'
2082         instead of the normal `NullLiteral'.
2083
2084 2006-03-21  Martin Baulig  <martin@ximian.com>
2085
2086         Fix #77583.
2087         * generic.cs (TypeManager.InferType): If `pt' is a generic
2088         parameter, don't check whether `pt == at'.
2089
2090 2006-03-20  Raja R Harinath  <rharinath@novell.com>
2091
2092         Fix #77852
2093         * generic.cs (Constraints.Resolve): Change argument to IResolveContext.
2094         (TypeParameter.Resolve): Update to change.
2095         (ConstraintChecker.CheckConstraints): Resolve type-argument
2096         constraints before use.
2097
2098 2006-03-16  Martin Baulig  <martin@ximian.com>
2099
2100         * generic.cs
2101         (ConstraintChecker.HasDefaultConstructor): If we're a TypeBuilder
2102         and don't have any instance constructors, also lookup in the base class.
2103         (TypeManager.IsNullableValueType): New public method.
2104
2105         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Clear the
2106         `BindingFlags.DeclaredOnly' flag and set `used_cache'.
2107         (TypeManager.TryGetBaseDefinition): Use DropGenericMethodArguments().
2108
2109         * expression.cs (Unary.DoResolve): Use TypeManager.IsNullableValueType()
2110         instead of just TypeManager.IsNullableType() to determine whether
2111         a lifted operator exists.
2112         (UnaryMutator.DoResolve): Likewise.
2113         (Conditional.DoResolve): Likewise.
2114         (Binary.DoResolve): A lifted operator only exists if both operands
2115         are valuetypes and at least one of them is a nullable type.
2116
2117 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
2118
2119         * iterator.cs : yield break is allowed in try statement which has
2120           catch clauses. Fixed bug #77767.
2121
2122 2006-03-12  Martin Baulig  <martin@ximian.com>
2123
2124         * typemanager.cs (TypeManager.ArrayContainsMethod): Use a new
2125         private IsSignatureEqual() to compare types; see the comment in
2126         that method; fixes #77674.
2127
2128 2006-03-10  Raja R Harinath  <rharinath@novell.com>
2129
2130         * ecore.cs (Expression.ResolveAsTypeStep): Remove 1-argument wrapper.
2131         (Expression.ResolveAsTypeTerminal): Likewise.
2132         * class.cs, decl.cs, delegate.cs, ecore.cs: Update to changes.
2133         * expression.cs, generic.cs, iterators.cs: Likewise.
2134         * parameter.cs, statement.cs, typemanager.cs: Likewise.
2135
2136 2006-03-09  Martin Baulig  <martin@ximian.com>
2137
2138         * generic.cs (ConstraintChecker.HasDefaultConstructor): Call
2139         TypeManager.DropGenericTypeArguments() on the `atype'; fixes #77548.
2140
2141 2006-03-09  Martin Baulig  <martin@ximian.com>
2142
2143         * ecore.cs (FieldExpr.AddressOf): Don't emit the instance if the
2144         `prepared' flag is set.
2145
2146         * generic.cs (LiftedBinaryOperator): Don't allow `||' or `&&' anymore.
2147         (LiftedBinaryOperator, LiftedUnaryMutator): Fix a few nullable
2148         issues; see gtest-254.cs.
2149
2150 2006-03-07  Martin Baulig  <martin@ximian.com>
2151
2152         * generic.cs (TypeManager.InferType): Allow infering
2153         `IEnumerable<T>' with an array of T; see gtest-251.cs.
2154
2155 2006-03-06  Martin Baulig  <martin@ximian.com>
2156
2157         * generic.cs
2158         (TypeManager.InferType): Fix gtest-250.cs.
2159
2160         * typemanager.cs
2161         (TypeManager.IsSubclassOf): Also check the base class.
2162
2163         * expression.cs
2164         (Invocation.IsAncestralType): Use TypeManager.IsSubclassOf();
2165         fixes gtest-249.cs.
2166
2167 2006-03-01  Raja R Harinath  <rharinath@novell.com>
2168
2169         Fix #77679.
2170         * expression.cs (ParameterReference.DoResolveBase): Change return
2171         type to bool.
2172         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
2173         Update.
2174
2175         Fix #77628.
2176         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
2177
2178         Fix #77642.
2179         * typemanager.cs (GetFullNameSignature): Don't nullref on
2180         protected accessors.
2181
2182 2006-02-16  Martin Baulig  <martin@ximian.com>
2183
2184         * generic.cs
2185         (TypeManager.GetGenericFieldDefinition): New public method; use it
2186         instead of the `FieldInfo.Mono_GetGenericFieldDefinition()' icall.
2187
2188 2006-02-14  Martin Baulig  <martin@ximian.com>
2189
2190         * *.cs: Use `Type.IsGenericType' instead of `Type.IsGenericInstance'.
2191
2192 2006-02-14  Martin Baulig  <martin@ximian.com>
2193
2194         * generic.cs
2195         (TypeManager.DropGenericMethodArguments): New public method; don't
2196         use GetGenericMethodDefinition() on something which is not a
2197         generic method.
2198
2199 2006-02-14  Martin Baulig  <martin@ximian.com>
2200
2201         * generic.cs
2202         (ConstraintChecker.CheckConstraints): If a type parameter has the
2203         `struct' constraint, the type must be a non-nullable valuetype.
2204
2205 2006-02-10  Martin Baulig  <martin@ximian.com>
2206
2207         * typemanager.cs
2208         (TypeManager.IsOverride): Make this work for instantiated methods
2209         in a generic class; fixes #77509.
2210         (TypeManager.ExpandInterfaces): Use TypeManager.GetInterfaces()
2211         rather than calling it directly; fixes #77488.  
2212
2213 2006-02-08  Martin Baulig  <martin@ximian.com>
2214
2215         * generic.cs (ConstraintChecker.CheckConstraints): Move the error
2216         reporting into CheckConstraint() so we can use the correctly
2217         instantiated type.
2218
2219 2006-02-08  Martin Baulig  <martin@ximian.com>
2220
2221         * expression.cs (BaseAccess): Add support for generic methods.
2222
2223         * ecore.cs (MethodGroupExpr.ResolveGeneric): Propagate `IsBase' to
2224         the new MethodGroupExpr.
2225
2226 2006-02-07  Martin Baulig  <martin@ximian.com>
2227
2228         * generic.cs (ConstraintChecker.CheckConstraints): Interfaces are
2229         also reference types; fixes #77483.
2230
2231 2006-02-07  Martin Baulig  <martin@ximian.com>
2232
2233         * generic.cs
2234         (TypeManager.IsGenericMethod): We now return whether something is
2235         an instantiated generic method (and not a generic method def).
2236         (TypeManager.IsGenericMethodDefinition): New public method.
2237
2238         * typemanager.cs
2239         (TypeManager.CSharpSignature): Only include type arguments for
2240         "real" generic methods, not for any instantiated method.
2241         (TypeManager.GetMethodName): Likewise, but also allow generic
2242         method definitions here.
2243
2244 2006-02-06  Miguel de Icaza  <miguel@novell.com>
2245
2246         * codegen.cs (EmitScopeInitFromBlock): check here the
2247         capture_context, there is no need to make two calls to the
2248         EmitContext. 
2249
2250         * anonymous.cs: Add some debugging messages that might help me
2251         track other instances of this problem in the future (the
2252         regression of test 467).
2253
2254         * cs-parser.jay: track the variable block, as we need to initalize
2255         any captured variables declared in this block for the "catch"
2256         portion of the "Try" statement.
2257
2258         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
2259         scope initialization for captured variables. 
2260
2261         Also, move the emit for the variables after the block location has
2262         been marked.
2263
2264 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
2265
2266        * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
2267         
2268 2006-02-06  Martin Baulig  <martin@ximian.com>
2269
2270         * class.cs (TypeContainer.DefineType): If we're a struct, pass
2271         `TypeManager.value_type' as parent type to
2272         ModuleBuilder.DefineType().  Fixes #77358.      
2273
2274 2006-02-02  Miguel de Icaza  <miguel@novell.com>
2275
2276         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
2277         commit yesterday, the initialization for the roots is necessary.
2278         What is not necessary is the scope activation.
2279
2280 2006-02-02  Raja R Harinath  <rharinath@novell.com>
2281
2282         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
2283         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
2284         CS0206 checks.
2285         (Argument.Resolve): Remove CS0206 checks.
2286
2287 2006-02-01  Miguel de Icaza  <miguel@novell.com>
2288
2289         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
2290         scopes for all the roots, the scopes will now be emitted when the
2291         Blocks are entered. [This change was wrong, fixed on 2006-02-02]
2292
2293         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
2294         code.  This reduces a lot of existing cruft.
2295         
2296         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
2297         that the ScopeInfo is generated as we enter the scope, not at the
2298         time of use, which is what we used to do before.
2299
2300         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
2301         every time a Block is about to be emitted if we have a
2302         CaptureContext. 
2303
2304 2006-02-01  Raja R Harinath  <rharinath@novell.com>
2305
2306         * codegen.cs (AssemblyClass.Emit): Emit RuntimeCompatibility
2307         attribute for mscorlib too.
2308
2309         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
2310         (Reset): Update.
2311         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
2312
2313         * typemanager.cs (cons_param_array_attribute): Make private.
2314         (Reset): Set it to null.
2315         (InitCoreHelpers): Don't initialize it.
2316         (ConsParamArrayAttribute): New.  Initialize it as needed.
2317         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
2318
2319 2006-01-31  Miguel de Icaza  <miguel@novell.com>
2320
2321         * expression.cs: There might be errors reported during the
2322         selection of applicable methods.  If there are errors, do not
2323         continue execution as it will lead the compiler to crash.
2324
2325 2006-01-30  Miguel de Icaza  <miguel@novell.com>
2326
2327         * expression.cs: Member access is not allowed on anonymous
2328         methods.  Fixes #77402.
2329
2330 2006-01-30  Raja R Harinath  <rharinath@novell.com>
2331
2332         Fix #77401
2333         * cs-parser.jay (VariableDeclaration): Don't set
2334         current_array_type to null.
2335         (field_declaration, event_declaration, declaration_statement):
2336         Set it to null here.
2337
2338 2006-01-29  Raja R Harinath  <harinath@gmail.com>
2339
2340         Fix part of #77397
2341         * generic.cs (TypeManager.IsEqual): Handle pass-by-ref types.
2342
2343 2006-01-28  Raja R Harinath  <harinath@gmail.com>
2344
2345         * typemanager.cs (GenericParameterPosition): New.
2346         * doc.cs: Use it.
2347
2348 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
2349
2350         * doc.cs : To process "include" elements, first we should create
2351           another list than XmlNodeList, because it could result in node
2352           removal, which could result in that the XmlNodeList gives up
2353           yielding next node.
2354
2355 2006-01-25  Miguel de Icaza  <miguel@novell.com>
2356
2357         * expression.cs: Introduce an error report that we were not
2358         catching before.   Gonzalo ran into it.
2359
2360 2006-01-23  Miguel de Icaza  <miguel@novell.com>
2361
2362         A fix for bug: #76957
2363         
2364         * iterators.cs (MoveNextMethod.CreateMethodHost): call
2365         ComputeMethodHost before creating the method, this is a new
2366         requirement. 
2367
2368         * anonymous.cs (AnonymousContainer): Now we track all the scopes
2369         that this method references (RegisterScope).  The actual scope
2370         where the method is hosted is computed with the ComputeMethodHost
2371         before we create the method.
2372
2373         Moved the Deepest routine here.
2374
2375         (AnonymousContainer.ComputeMethodHost): New routine used to
2376         compute the proper ScopeInfo that will host the anonymous method.
2377
2378         (ScopeInfo): Deal with multiple roots.  The problem was that we
2379         did not have a unique root where all ScopeInfos could be hanged
2380         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
2381         of roots.  
2382
2383         Remove AdjustMethodScope which is now computed at the end.  Remove
2384         LinkScope which did a partial link, instead link all ScopeInfos
2385         before code generation from the new "LinkScopes" routine. 
2386
2387         Simplify all the Add* routines as they no longer need to maintain
2388         the tree, they just need to record that they are using variables
2389         from a ScopeInfo.
2390
2391         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
2392         routines to produce the forest of ScopeInfo trees.
2393
2394         * class.cs (TypeContainer.AppendMethod): This is just like
2395         AddMethod, but ensures that an interface implementation method
2396         (IEnumerable.XXX) is not inserted at the beginning of the queue of
2397         methods, but at the end.
2398
2399         We use this functionality to ensure that the generated MoveNext
2400         method in the iterator class is resolved/emitted before the
2401         enumerator methods created.   
2402
2403         This is required because the MoveNext method computes the right
2404         ScopeInfo for the method.  And the other methods will eventually
2405         need to resolve and fetch information computed from the anonymous
2406         method. 
2407
2408         
2409 2006-01-23  Raja R Harinath  <rharinath@novell.com>
2410
2411         Improve implementation of section 14.4.2.2 (Better function member).
2412         * expression.cs (Invocation.MoreSpecific): Compare all type
2413         arguments before deciding if one type is more specific than
2414         another.  Handle array types too.  Return the more specific type.
2415         (Invocation.BetterFunction): Add more tie-breaking rules from
2416         section 14.4.2.2.  Perform "more specific" check after
2417         other tie-breaking rules.  Compare all parameter types before
2418         choosing the "more specific" method.
2419
2420 2006-01-21  Raja R Harinath  <harinath@gmail.com>
2421             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
2422
2423         Fix rest of #76995.
2424         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
2425         the 'aliases' hash.
2426         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
2427         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
2428
2429 2006-01-18  Martin Baulig  <martin@ximian.com>
2430
2431         * class.cs (TypeContainer.AddToMemberContainer): Use
2432         `symbol.MemberName.MethodName' instead of just `symbol.Name';
2433         fixes #77124.
2434
2435 2006-01-18  Martin Baulig  <martin@ximian.com>
2436
2437         Fix #76417: a generic class may now have methods which may unify
2438         for some type parameter substitutions.
2439
2440         * class.cs (Method.IsDuplicateImplementation): Don't report CS0408
2441         for methods which may unify anymore.
2442
2443         * expression.cs (Invocation.MoreSpecific): New private static
2444         method; checks whether one method is more specific than another
2445         according to 14.4.2.2 of the spec.
2446         (Invocation.BetterFunction): Implement the tie-breaking rules from
2447         14.4.2.2 of the spec: if two methods unify for some type parameter
2448         substitution, we need to pick the more specific one.
2449
2450 2006-01-18  Raja R Harinath  <rharinath@novell.com>
2451
2452         Fix #76656, cs0231-2.cs.
2453         * cs-parser.jay (formal_parameter_list): Make error case catch
2454         more issues.
2455         (parenthesized_expression_0): Add CS1026 check.
2456         (invocation_expression): Remove unused { $$ = lexer.Location }.
2457
2458 2006-01-17  Raja R Harinath  <rharinath@novell.com>
2459
2460         Fix #76824.
2461         * cs-parser.jay (statement_expression): Don't list out the
2462         individual statement-expressions.  Convert syntax error into
2463         CS0201 check.
2464
2465 2006-01-16  Raja R Harinath  <rharinath@novell.com>
2466
2467         Fix #76874.
2468         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
2469         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
2470         CheckIntermediateModification.
2471         (FieldExpr.DoResolve): Add new two-argument version that
2472         allows us to resolve the InstanceExpression as an lvalue.
2473         The one-argument variant is now just a wrapper.
2474         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
2475         Resolve the lhs as an lvalue if the it has a value type.
2476         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
2477         from Assign.DoResolve.
2478         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
2479         resolved as an lvalue.
2480         (PropertyExpr.DoResolve): Update.
2481         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
2482         has a value type.  Move CS1612 check here from
2483         CheckIntermediateModification.
2484         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
2485         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
2486         'right_side' of a ResolveLValue on an 'out' argument.
2487         (EmptyExpression.LValueMemberAccess): New.  Used as the
2488         'right_side' of a propagated ResolveLValue on a value type.
2489         (LocalVariableReference.DoResolveBase): Recognize
2490         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
2491         Add CS1654 check.
2492         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
2493         EmptyExpression.Null.
2494
2495 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
2496
2497         * typemanager.cs : added IsGenericParameter(). In gmcs it returns
2498           Type.IsGenericParameter(). Fixed bug #77183.
2499         * doc.cs : it is now identical to doc.cs in mcs.
2500
2501 2006-01-16  Martin Baulig  <martin@ximian.com>
2502
2503         * generic.cs (ConstraintChecker.CheckConstraint): Fix #77167.
2504
2505 2006-01-16  Martin Baulig  <martin@ximian.com>
2506
2507         * typemanager.cs (TypeManager.CSharpSignature): Make this work for
2508         ctors; fixes #77250.
2509
2510 2006-01-12  Miguel de Icaza  <miguel@novell.com>
2511
2512         This fixes the problem where we used ldfld instead of ldflda to
2513         load the "THIS" pointer on captured parameters, when THIS is a
2514         value type.  See bug #77205.
2515         
2516         * iterators.cs (CapturedThisReference.Emit): Pass false to
2517         EmitThis (we do not need the address).
2518
2519         * codegen.cs (EmitThis): it needs to know whether we need the
2520         address of `this' or not.  This is used by value types.  
2521
2522         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
2523         every other call passes false.
2524
2525 2006-01-12  Raja R Harinath  <rharinath@novell.com>
2526
2527         Fix #77221.
2528         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
2529         GetOverride.
2530         * expression.cs (Invocation.OverloadResolve): Update.
2531         (Invocation.DoResolve): Avoid double resolution of invocation.
2532
2533 2006-01-11  Raja R Harinath  <rharinath@novell.com>
2534
2535         Fix #77180.
2536         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
2537         unary negation of floating point types as 0-expr; negation cannot
2538         overflow in floating point types.
2539
2540         Fix #77204.
2541         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
2542         on operands of 'void' type.
2543
2544         Fix #77200.
2545         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
2546         and ExclusiveOr for boolean constants too.
2547
2548 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
2549
2550         * expression.cs: Fix Console.WriteLine ((this = x).foo);
2551
2552 2006-01-12  Miguel de Icaza  <miguel@novell.com>
2553
2554         * cs-tokenizer.cs (Position): New class used to save and restore
2555         the position state in the tokenizer.  Before this patch the save
2556         and restore was not complete enough so the line and columns would
2557         start to drift and the debugger and stack traces will get the
2558         wrong data.
2559
2560 2006-01-10  Martin Baulig  <martin@ximian.com>
2561
2562         * generic.cs
2563         (TypeParameter.InflateConstraints): New public method.
2564
2565         * iterators.cs (Iterator.DefineNestedTypes): Also inflate the
2566         constraints; fixes #77042.
2567
2568 2006-01-10  Martin Baulig  <martin@ximian.com>
2569
2570         * anonymous.cs (ScopeInfo.EmitScopeType): Use the `CurrentType'
2571         instead of the `TypeBuilder' for this "<>THIS" variable; fixes
2572         #77061. 
2573
2574 2006-01-09  Raja R Harinath  <rharinath@novell.com>
2575
2576         Fix #75636.
2577         * expression.cs (Invocation.OverloadResolve): Replace reflected
2578         override methods with their base virtual methods, rather than
2579         skipping over them.
2580         * typemanager.cs (TypeManager.GetOverride): New.
2581
2582 2005-12-21  Miguel de Icaza  <miguel@novell.com>
2583
2584         * driver.cs: Report the case of no source files and no -out:
2585         argument provided.
2586
2587 2005-12-20  Raja R Harinath  <rharinath@novell.com>
2588
2589         Fix #77035.
2590         * expression.cs (ComposedCast.GetSignatureForError): Define.
2591
2592 2006-01-05  Jb Evain  <jbevain@gmail.com>
2593
2594         * class.cs (Property.Define, Indexer.Define): do not tag the
2595         properties as SpecialName | RTSpecialName.
2596
2597 2006-01-04  Miguel de Icaza  <miguel@novell.com>
2598
2599         * class.cs (MethodCore.IsDuplicateImplementation): This method was
2600         doing a low-level comparission of parameter types.  It was lacking
2601         a check for __argslist. 
2602
2603 2005-12-30  Miguel de Icaza  <miguel@novell.com>
2604
2605         * expression.cs (ParameterReference.DoResolveBase): Allow
2606         reference parameters if they are local to this block. 
2607
2608         This allows the ref and out parameters of a delegate to be used in
2609         an anonymous method, for example:
2610
2611         delegate void set (out int x);
2612
2613         set s = delegate (out int x){
2614                 x = 0;
2615         };
2616
2617         This is used by functionality introduced late in the C# language.
2618         
2619         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
2620         method that take ref and out parameters. 
2621
2622         Fixes #77119 which was a late change in the spec.
2623
2624 2005-12-23  Miguel de Icaza  <miguel@novell.com>
2625
2626         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
2627         parent if its the same scope.  Fixes #77060.
2628
2629 2005-12-22  Marek Safar  <marek.safar@seznam.cz>
2630
2631         * expression.cs (ComposedCast.DoResolveAsTypeStep): Fixed wrong merge.
2632
2633 2005-12-21  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2634
2635         * codegen.cs (AssemblyClass.CheckInternalsVisibleAttribute): Generate
2636         errors 1726 for strong named assemblies with InternalsVisibleToAttribute 
2637         that doesn't contain the full public key. This is a update of the
2638         friend assemblies in .Net 2.0 release.
2639         
2640 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
2641
2642         Fix #76995
2643
2644         * namespace.cs (NamespaceEntry): Add extern_aliases as a
2645         ListDictionary, to contain the ExternAliasEntry entries (in
2646         addition to the NamespaceEntry.aliases hashtable). This field is
2647         shared between the original entry and its doppelganger (bodyless 
2648         copy of it).
2649         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
2650         extern_aliases field.
2651         (NamespaceEntry.Lookup): Move the IsImplicit check after the
2652         lookup in extern_aliases.
2653
2654 2005-12-16  Raja R Harinath  <rharinath@novell.com>
2655
2656         Fix #77006.
2657         * class.cs (TypeContainer.Mark_HasEquals): New.
2658         (TypeContainer.Mark_HasGetHashCode): New.
2659         (ClassPart): Override them.
2660         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
2661
2662         * generic.cs (GenericMethod.DefineMembers): Update to changes.
2663         (TypeParameter.TypeParameter): Change type of 'parent' argument to
2664         DeclSpace.
2665
2666         Fix #77008.
2667         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
2668         'parent' argument to the base constructor.
2669
2670         Remove all mention of TypeContainer from decl.cs.
2671         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
2672         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
2673         (DeclSpace.DeclSpace): Likewise.
2674         (DeclSpace.DefineMembers): Remove unused argument.
2675         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
2676         debugging check -- we don't care if the debug code throws an
2677         InvalidCastException instead of an InternalErrorException.
2678         * class.cs (TypeContainer.DefineMembers): Update to changes.
2679         (TypeContainer.DoDefineMembers): Likewise.
2680         (TypeContainer.GetMethods): Likewise.
2681         (PropertyMember.Define): Likewise.
2682         (MemberBase.Parent): New property that forwards to
2683         MemberCore.Parent, but ensures that we get a TypeContainer.
2684         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
2685         (RootContext.PopulateTypes): Likewise.  Remove special case code
2686         for !RootContext.StdLib: DefineMembers is idempotent.
2687
2688 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
2689
2690         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
2691
2692 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
2693
2694         * doc.cs : The search for referenced namespace was insufficient to
2695           get global one as it used to do. Fixed bug #76965.
2696
2697 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
2698
2699         * doc.cs : check name in cref in the last phase that whether it is
2700           namespace or not.
2701
2702 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2703
2704         * cs-tokenizer.cs : reverted the latest change: it somehow broke
2705           Mono.C5.
2706
2707 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2708
2709         * doc.cs : so it turned out that we cannot skip override check for 
2710           interface members. Fixed bug #76954.
2711
2712 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2713
2714         * cs-tokenizer.cs : fixed bug #75984:
2715           - #warning and #error should not be handled when the source line
2716             is disabled.
2717           - #line is not checked strictly when the source line is disabled.
2718           - #define and #undef is on the other hand checked strictly at any
2719             state.
2720
2721 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
2722
2723         * cs-tokenizer.cs : missing Location (actually, filename) in one of
2724           CS1027 report.
2725
2726 2005-12-15  Raja R Harinath  <rharinath@novell.com>
2727
2728         * generic.cs (TypeManager.IsGeneric): Remove unused method.
2729
2730         * typemanager.cs (TypeManager.GetFullName): Rewrite to handle
2731         nested types.
2732
2733 2005-12-14  Martin Baulig  <martin@ximian.com>
2734
2735         * typemanager.cs (TypeManager.GetFullName): Make this public;
2736         `Type.Fullname' now never returns null.
2737
2738         * class.cs (Method.Define): Use TypeManager.GetFullName() for
2739         explicit interface implementations; we're now using the same
2740         naming convention than csc does.
2741
2742 2005-12-14  Miguel de Icaza  <miguel@novell.com>
2743
2744         * convert.cs (ExplicitConversionCore): Check the return value from
2745         ExplicitConversionCore which can return null on failure.  Fixes #76914
2746
2747 2005-12-09  Raja R Harinath  <rharinath@novell.com>
2748
2749         * anonymous.cs (AnonymousMethod.Compatible): Use IsGenericType
2750         instead of IsGenericInstance.
2751         * generic.cs (TypeManager.IsEqual): Likewise.  Delete redundant
2752         code that's now covered by the more general test.
2753         * typemanager.cs (TypeManager.IsPrivateAccessible): Likewise.
2754
2755         * generic.cs (DropGenericTypeArguments): New.  Captures the common
2756         pattern: if (t.IsGenericInstance) t = t.GetGenericTypeDefinition ();
2757         * attribute.cs, class.cs, decl.cs, ecore.cs: Use it.
2758         * generic.cs, report.cs, typemanager.cs: Likewise.
2759
2760 2005-12-08  Martin Baulig  <martin@ximian.com>
2761
2762         * generic.cs (TypeArguments.Resolve): Added CS1547 check.
2763
2764         * typemanager.cs (TypeManager.CSharpSignature): Include type
2765         arguments in the signature of a generic method.
2766
2767 2005-12-07  Martin Baulig  <martin@ximian.com>
2768
2769         Add support for custom attributes on type parameters.
2770
2771         * cs-parser.jay (type_arguments): Added `opt_attributes'.
2772
2773         * generic.cs (TypeParameterName): New public class; we use this
2774         instead of a `string' to store the name of a type parameter, so we
2775         can also have `Attributes'.
2776         (TypeArguments.GetDeclarations): Return a `TypeParameterName[]'
2777         array instead of a `string[]' array.
2778         (TypeParameter.ctor): We now also take an `Attributes' argument.
2779         (TypeParameter.EmitAttributes): New public method; emit our
2780         `OptAttributes' here.
2781         (GenericMethod.EmitAttributes): New public method; emit the custom
2782         attributes on all our type parameters.
2783
2784         * class.cs (TypeContainer.EmitType): Call EmitAttributes() on all
2785         our type parameters.
2786         (MethodData.Define): If we're a generic method, call
2787         EmitAttributes() on it.
2788
2789 2005-12-07  Martin Baulig  <martin@ximian.com>
2790
2791         * generic.cs
2792         (ConstraintChecker): New public abstract class; move the
2793         constraint checking here from `ConstructedType' and also do
2794         constraint checking for generic methods here.
2795
2796         * expression.cs (Invocation.OverloadResolve): Use
2797         ConstraintChecker.CheckConstraints() if we resolved to a generic
2798         method.  Fix #76806.
2799
2800 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2801
2802         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
2803
2804         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
2805         event initializers.
2806         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
2807         (FieldBase.Initializer): Initializer is now optional.
2808         (EventField.Define): Only event field can have initializer.
2809
2810         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
2811
2812         * const.cs (Const): Reuse initializer.
2813
2814         * cs-parser.jay: Updated after FieldBase changes.
2815         Added current_array_type to simplify array initializers.
2816
2817         * ecore.cs (NullCast.IsDefaultValue): Implemented.
2818
2819         * expression.cs, iterators.cs: Updated.
2820
2821         * namespace.cs (NamespaceEntry): Made UsingFound private.
2822
2823 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2824
2825         * parameterCollection.cs: Obsolete, removed.
2826         * parser.cs: Obsolete, removed.
2827
2828 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2829
2830         Fix #76849.
2831         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
2832
2833         * enum.cs (Enum.Define): Set obsolete context here.
2834
2835 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
2836
2837         * doc.cs :
2838           - FindDocumentedMember() now expects 1) paramList as null
2839             when "we don't have to check the number of parameters" and
2840             2) Type.EmptyTypes when "there is no arguments".
2841           - Introduced FoundMember struct to hold the exact type which was
2842             used to find the documented member (the above change broke
2843             test-xml-044; it might be better just to use DeclaringType than
2844             what MS does, like this change does, but it depends on usage.)
2845
2846 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
2847
2848         * doc.cs : documented member might be from DeclaringType for nested
2849           types. Fixed bug #76782.
2850
2851 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
2852
2853         * anonymous.cs: Have the param code handle leaving copies on the
2854         stack etc. Allows anonymous params to take part in the assignment
2855         code (++, +=, etc). Fixes bug #76550
2856
2857         * expression.cs: Handle the prepare_for_load/leave_copy by passing
2858         it down to the anon code.
2859
2860         * iterators.cs: Use dummy var here
2861
2862         * codegen.cs: Handle new vars
2863
2864 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
2865
2866         Fix #76849.
2867         * class.cs (MethodData.Define): Set proper Obsolete context.
2868
2869         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
2870         obsolete context.
2871         (FieldExpr.DoResolve): Ditto.
2872
2873 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
2874
2875         Fix #76849.
2876         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
2877         parent is not obsolete.
2878
2879 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
2880
2881         * doc.cs : (FindDocumentedMember) find parameterless members first
2882           and get CS0419 in the early stage. Fixed first case of bug #76727.
2883
2884 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
2885
2886         Fix #76859.
2887         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
2888         no error was reported.
2889
2890         *expression.cs (Binary.DoResolve): left can be null.
2891
2892 2005-12-06  Raja R Harinath  <rharinath@novell.com>
2893
2894         * class.cs (MethodCore.CheckGenericOverride): Delete unused
2895         abstract method and all overrides.
2896         * support.cs (ParameterData.GenericConstraints): Delete.
2897         (ReflectionParameters.type_params): Delete.
2898         (ReflectionParameters.ReflectionParameters): Make private.
2899         (ReflectionParameters.GetConstaints): New factory method.
2900         * generic.cs (TypeParameterDefineType): Use it.
2901         (TypeManager.GetTypeParameterConstraints): Likewise.
2902
2903 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
2904
2905         Fix #76783.
2906         * class.cs (MethodData.Emit): Parameters should be labeled first.
2907
2908 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
2909
2910         Fix #76761.
2911         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
2912
2913 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
2914
2915         * attribute.cs (AreParametersCompliant): Moved to Parameter.
2916
2917         * class.cs (MethodCore): Parameter clean up.
2918         (IMethodData): Added ParameterInfo.
2919         (MethodData): Parameter clean up.
2920         (Indexer.Define): Parameter clean up.
2921
2922         * anonymous.cs,
2923         * codegen.cs,
2924         * cs-parser.jay,
2925         * decl.cs,
2926         * doc.cs,
2927         * ecore.cs,
2928         * flowanalysis.cs,
2929         * iterators.cs,
2930         * pending.cs,
2931         * statement.cs,
2932         * typemanager.cs: Parameter clean up.
2933
2934         * delegate.cs (Define): Get rid of duplicated code.
2935
2936         * expression.cs (ParameterReference): Removed useless parameters
2937         and simplified.
2938         (Invocation): Ditto.
2939
2940         * parameter.cs (ParamsParameter): New class, params specialization.
2941         (ArglistParameter): Attemp to separate arglist.
2942         (Parameter): Refactored to be reusable and faster.
2943         (Parameter.Modifier): Made understandable.
2944         (Parameters): Changed to be used as a class for `this' assembly
2945         parameters. Refactored to use new specialized classes.
2946
2947         * support.cs (ParameterData): Added Types property.
2948         (InternalParameters): Deleted.
2949
2950 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2951
2952         * doc.cs : the previous patch does not actually fix the bug.
2953           PropertyInfo override check is now implemented and really fixed it.
2954         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
2955
2956 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2957
2958         * doc.cs : apply "override filter" also to properties.
2959           Fixed bug #76730.
2960
2961 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2962
2963         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
2964           no need to check overrides. For classes, omit those results from 
2965           interfaces since they must exist in the class. Fixed bug #76726.
2966
2967 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2968
2969         * typemanager.cs : (GetFullNameSignature) differentiate indexers
2970           with different parameters. Fixed the second problem in #76685.
2971
2972 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2973
2974         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
2975           get expected 'protected' access in CheckValidFamilyAccess()).
2976           Fixed bug #76692.
2977
2978 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2979
2980         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
2981           Fixed bug #76705.  CS1569 was incorrectly commented out.
2982
2983 2005-11-23  Martin Baulig  <martin@ximian.com>
2984
2985         * generic.cs (Constraints.Define): Removed.
2986         (TypeParameter.DefineConstraints): Removed.
2987         (TypeParameter.DefineType): Call SetGenericParameterAttributes()
2988         on the GenericTypeParameterBuilder here.
2989
2990 2005-11-23  Martin Baulig  <martin@ximian.com>
2991
2992         * typemanager.cs (TypeManager.GetProperty): Make this public.
2993
2994         * generic.cs (Nullable.NullableInfo.ctor): Use
2995         TypeManager.GetProperty() rather than using reflection directly.
2996
2997 2005-11-17  Martin Baulig  <martin@ximian.com>
2998
2999         * expression.cs (Indexers.GetIndexersForType): Added support for
3000         generic parameters; fixes #76587.
3001
3002 2005-11-17  Martin Baulig  <martin@ximian.com>
3003
3004         * anonymous.cs
3005         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
3006         inherit the scope from our parent.  Fixes #76653.
3007
3008 2005-11-15  Martin Baulig  <martin@ximian.com>
3009
3010         * anonymous.cs (ScopeInfo.ScopeType): New public field; use this
3011         instead of `ScopeTypeBuilder' to refer to the "current" type.
3012         (AnonymousMethod.CreateScopeType): Correctly create the helper
3013         class if we're inside a generic type definition.
3014
3015 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
3016
3017         * doc.cs : use Invocation.IsOverride() to do real override check.
3018         * expression.cs : made Invocation.IsOverride() internal.
3019
3020 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
3021
3022         * doc.cs : use TypeManager.FindMembers() instead of (possible)
3023           TypeBuilder.FindMembers() and filter overriden base members out.
3024           Fixed bug #76990.
3025
3026 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
3027
3028         * doc.cs : ref/out parameters are represented as '@' (instead of
3029           '&' in type FullName). Fixed bug #76630 (additionally crefs).
3030
3031 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
3032
3033         * doc.cs : when there was no '.' in cref to methods in doc comment,
3034           then parameters were missing in the output. Fixed bug #76691.
3035
3036 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
3037
3038         * driver.cs : don't output docs when there is an error.
3039           Fixed bug #76693.
3040
3041 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
3042
3043         * doc.cs :
3044           Now it should detect indexers. Fixed primary concern in bug #76685.
3045           Fixed CS0419 message to not show the identical member signature in
3046           the message.
3047
3048 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
3049
3050         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
3051           instead of Type.FindMembers() since it does not handle events.
3052           Fixed bug #71604.
3053
3054 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
3055
3056         * codegen.cs: Fixed typo (speficied -> specified).
3057
3058 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
3059
3060         Fix #76369.
3061         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
3062
3063 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
3064
3065         * attribute.cs: Changed error message.
3066
3067         * cs-tokenizer.cs: One more check.
3068
3069 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
3070
3071         * statement.cs (Block.Resolve): Ignore empty statement.
3072
3073 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
3074
3075         * report.cs: Made error/warning methods more strict to avoid
3076         their misuse.
3077
3078         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
3079         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
3080         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
3081         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
3082
3083 2005-11-11  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3084
3085         * codegen.cs (AssemblyClass.CheckInternalsVisibleAttribute): 
3086         Use the more explicit AssemblyName.FullName instead of 
3087         AssemblyName.Name to report errors.
3088         
3089 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
3090
3091         * attribute.cs, class.cs, cs-tokenizer.cs, parameter.cs: Sync
3092         with mcs.
3093
3094 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
3095
3096         * class.cs,
3097         * convert.cs,
3098         * cs-parser.jay,
3099         * decl.cs,
3100         * enum.cs,
3101         * expression.cs,
3102         * generic.cs,
3103         * pending.cs,
3104         * report.cs: Fixed error reporting and typos.
3105
3106         * generic.cs (TypeParameter.GetSignatureForError): New method.
3107         (ConstructedType.GetSignatureForError): Instead of DeclarationName.
3108
3109         * typemanager.cs (GetFullName): Refactored.
3110
3111 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
3112
3113         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
3114         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
3115
3116         * class.cs (TypeContainer.IsComImport): New property.
3117         (Constructor.Define): Create proper ctor for ComImport types.
3118
3119         * expression.cs (New.CheckComImport): Fixed.
3120
3121 2005-11-07  Miguel de Icaza  <miguel@novell.com>
3122
3123         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
3124         that a parameter has been captured does not mean that we do not
3125         have to do the rest of the processing.  This fixes the second part
3126         of #76592.  If there was another anonymous method capturing
3127         values in the past, the Scope would never be set for the second
3128         method that captured the same parameter.
3129
3130         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
3131         properly manipulate the stack.   Second part of fix for #76592.
3132
3133         * expression.cs (New): Add support for invoking "new" on
3134         interfaces that have been flagged with the ComImport attribute and
3135         the CoClass.  Fixes #76637 
3136
3137         * statement.cs (Try.DoEmit): When a variable is captured, do not
3138         try to emit the vi.LocalBuilder variable as it has been captured.
3139         Create a temporary variable and store the results on the
3140         FieldBuilder.  Fixes #76642
3141
3142 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3143
3144         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
3145
3146         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
3147
3148         * expression.cs (Binary.DoResolve): Added && optimalization.
3149     
3150         * typemanager.cs (AddUserType): Removed useless argument.
3151
3152 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
3153
3154         * statement.cs (Block.variables): Uses ListDictionary.
3155
3156 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
3157
3158         Fix #75969.
3159         * class.cs (PartialContainer.EmitType): Customized to emit
3160         security attributes.
3161         (ClassPart.ApplyAttributeBuilder): Transform security attribute
3162         for partial classes.
3163
3164 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
3165
3166         Fix #76599.
3167         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
3168         access has to be fixed.
3169         
3170         * typemanager.cs (IsUnmanagedType): Wrong common field type.
3171
3172 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
3173
3174         Fix #76590.
3175         * ecore.cs (NullCast.Reduce): Implemented.
3176
3177         * expression.cs (ArrayCreation.CheckIndices): Correcly check
3178         constant type.
3179         
3180         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
3181         properly.
3182         (Foreach.Resolve): Catch null properly.
3183
3184 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
3185  
3186         * cs-tokenizer.cs: Warning text fix.
3187
3188         * driver.cs: AllWarningNumbers exposed on public interface.
3189
3190         * report.cs (): Reviewed warning numbers.
3191         (IsValidWarning): Use binary search.
3192
3193 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
3194  
3195         * driver.cs: Implemeted resource visibility.
3196         (Resources): New class for code sharing between /res: and
3197         /linkres:
3198  
3199 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3200
3201         decl.cs (CurrentTypeParameters): Fixed to be public.
3202
3203 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3204
3205         generic.cs, rootcontext.cs: Removed NewConstraintAttribute.
3206
3207 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3208
3209         gmcs.exe.sources: Use CryptoConvert.cs from corlib.
3210
3211 2005-11-05  Kornél Pál  <kornelpal@hotmail.com>
3212
3213         * gmcs.exe.config: Updated runtime version to v2.0.50727 (2.0 RTM).
3214
3215 2005-11-04  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3216
3217         Add friend assembly access support.
3218         * typemanager.cs: assembly_internals_vis_attrs
3219         cache for friend assembly access. 
3220         (TypeManager.IsFriendAssembly): New method for
3221         checking friend assembly access.
3222         (TypeManager.Error_FriendAccessNameNotMatching): New
3223         helper method.
3224         (TypeManager.CompareKeyTokens): Likewise.
3225         (TypeManager.Filter): Handle friend accessible
3226         members.
3227
3228         * namespace.cs (RootNamespace.GetTypeInAssembly): Return
3229         friend accessible types.
3230
3231         * ecore.cs (Expression.IsAccessorAccessible): Handle
3232         friend accessible properties.
3233
3234         * decl.cs (DeclSpace.CheckAccessLevel): Handle friend
3235         accessible types.
3236         
3237 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
3238
3239         Fix #76568.
3240         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
3241         folding.
3242         
3243         * convert (Convert.ImplicitReferenceConversion): NullCast holds
3244         contants only.
3245         
3246         * ecore.cs (NullCast): Child is contant only.
3247         
3248         * literal.cs (NullLiteral.Reduce): null can be converted to any
3249         reference type.
3250
3251 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
3252
3253         * driver.cs: Use Encoding.Default as default code page instead
3254           of ISO-28591.
3255
3256 2005-10-27  Raja R Harinath  <rharinath@novell.com>
3257
3258         Fix #76085.
3259         * expression.cs (Invocation.Error_InvalidArguments): Handle
3260         __arglist parameters.
3261         (Invocation.VerifyArgumentsCompat): Likewise.
3262         * support.cs (ReflectionParameters.GetSignatureForError): Print
3263         __arglist parameters.
3264         (InternalParamters.GetSignatureForError): Likewise.
3265         * parameter.cs (Parameters.GetSignatureForError): Likewise.
3266
3267 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
3268
3269         * attribute.cs (GetPropertyValue): Made public.
3270
3271         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
3272         Resolve.
3273         Add new property WrapNonExceptionThrows to handle 2.0 assembly
3274         attribute.
3275         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
3276         is not defined.
3277         
3278         * driver.cs: Reflect method name change.
3279         
3280         * statement.cs (Try.Resolve): Warn when try has both general
3281         exception handlers.
3282         
3283         * typemanager.cs: runtime_compatibility_attr_type new predefined
3284         type.
3285
3286 2005-10-26  Raja R Harinath  <harinath@gmail.com>
3287
3288         Fix #76419.
3289         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
3290         treat it as an empty parameter list.
3291
3292 2005-10-26  Raja R Harinath  <rharinath@novell.com>
3293
3294         Fix #76271.     
3295         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
3296         ResolveAsTypeStep silent.
3297         * statement.cs (Block.AddConstant): Mark block as used.
3298         (Block.ResolveMeta): Avoid piling on error messages
3299         if a constant initializer resolution fails.
3300
3301 2005-10-25  Raja R Harinath  <rharinath@novell.com>
3302
3303         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
3304         Remove.
3305         (NamespaceEntry.VerifyAllUsing): New.
3306         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
3307         behaviour.  Delegates actual resolution of alias to ...
3308         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
3309         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
3310         Update.
3311         * driver.cs (Driver.MainDriver): Update.
3312         
3313         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
3314         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
3315         property.
3316         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
3317         Remove.
3318         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
3319         RootNamespace.DefineNamespacesForAll.
3320
3321 2005-10-24  Raja R Harinath  <harinath@gmail.com>
3322
3323         * typemanager.cs (assemblies, external_aliases, modules)
3324         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
3325         (ComputeNamespaces, GetRootNamespace): Remove extra staging
3326         overhead.  Move resposibility ...
3327         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
3328         * driver.cs, attribute.cs, codegen.cs: Update to changes.
3329
3330 2005-10-23  Raja R Harinath  <harinath@gmail.com>
3331
3332         * namespace.cs (RootNamespace.all_namespaces): Renamed from
3333         cached_namespaces.  Improve usage.
3334         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
3335         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
3336         Move from GlobalRootNamespace and simplify.
3337         (RootNamespace.Global): Make instance variable.
3338         (RootNamespace.RootNamespace): Add "alias name" parameter.
3339         (GlobalRootNamespace): Simplify drastically.
3340         (Namespace.Lookup): Don't use GetNamespace.
3341         * typemanager.cs (GetRootNamespace): Rename from
3342         ComputeNamespaceForAlias.
3343         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
3344
3345 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3346
3347         * anonymous.cs (AnonymousContainer): Don't crash when container
3348         doesn't exist.
3349
3350 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3351
3352         * expression.cs (Binary.DoResolve): Warn when comparing same
3353         values.
3354
3355 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3356
3357         Fix #76486.
3358         * expression.cs (Binary.DoResolve): It looks like there are no
3359         convetsion rules in enum context.
3360
3361 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3362
3363         Add support for extern alias qualifiers.
3364         * typemanager.cs: Move some LookupTypeReflection code
3365         to namespace.cs, to have cleaner code. Added some methods
3366         to help us keep track of the extern aliased references.
3367         * driver.cs: Add suport for extern alias assemblies on command
3368         line and check for their warnings/errors. Also keep track of the
3369         extern aliased assemblies.
3370         * namespace.cs: Move the global functionality of Namespace
3371         to GlobalRootNamespace/RootNamespace. Now the global namespace
3372         is GlobalRootNamespace.Globa. Also the code moved from 
3373         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
3374         Finally added LocalAliasEntry (AliasEntry before) and
3375         ExternAliasEntry, to handle alias statements.
3376         * cs-parser.jay: Add support in the grammar for extern alias
3377         statement.
3378         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
3379         Update callings to Namespace (now in GlobalRootNamespace).
3380
3381 2005-10-25  Martin Baulig  <martin@ximian.com>
3382
3383         * convert.cs (ImplicitTypeParameterConversion): Make base
3384         interfaces actually work; fixes #76557.
3385
3386 2005-10-25  Martin Baulig  <martin@ximian.com>
3387
3388         * generic.cs
3389         (GenericMethod.Define): Call TypeParameter.DefineConstraints() on
3390         all the type parameters; fixes #76551.
3391
3392 2005-10-25  Martin Baulig  <martin@ximian.com>
3393
3394         Fix #76472.
3395
3396         * generic.cs
3397         (GenericMethod.ctor): Added `Expression return_type' and
3398         `Parameters parameters' arguments.
3399         (GenericMethod.DefineType): Call ResolveAsTypeTerminal() on the
3400         parameter and return types to check their constraints if they're
3401         generic types.
3402
3403         * codegen.cs (EmitContext.ResolvingGenericMethod): New public
3404         boolean field.
3405
3406         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
3407         constraints of a generic type if `ec.ResolvingGenericMethod'.
3408
3409         * class.cs (MethodCore.DoDefineParameters): Set
3410         `ec.ResolvingGenericMethod' if we're a generic method.
3411         (MemberBase.MemberType): Likewise.
3412
3413 2005-10-25  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3414
3415         * typemanager.cs (TypeManager): Added 
3416         TypeManager.internals_visible_attr_type to cache
3417         S.R.CompilerServices.InternalsVisibleToAttribute.
3418
3419         * codegen.cs (AssemblyClass): Added checks for 
3420         InternalsVisibleToAttribute in new method 
3421         CheckInternalsVisibleAttribute () and also cache the
3422         AssemblyName in AssemblyClass.Name.
3423         
3424 2005-10-24  Martin Baulig  <martin@ximian.com>
3425
3426         * typemanager.cs
3427         (TypeManager.ExpandInterfaces): Added overloaded version which
3428         just takes a `Type[]' array.
3429
3430         * generic.cs
3431         (Constraints.Resolve): Don't expand the interfaces here; ie. we
3432         just use the interfaces which were explicitly specified and not
3433         the interfaces they inherit.  Fixes #76482.
3434         (TypeParameter.FindMembers): Expand the interfaces here.
3435
3436 2005-10-21  Martin Baulig  <martin@ximian.com>
3437
3438         * generic.cs
3439         (Constraints.Resolve): Also resolve the actual types here.
3440         (Constraints.ResolveTypes): Just check the constraints here.
3441         Fixes #76363; see gtest-218.cs.
3442
3443 2005-10-21  Martin Baulig  <martin@ximian.com>
3444
3445         * convert.cs
3446         (Convert.ImplicitTypeParameterConversion): Use a `ClassCast'
3447         instead of a `BoxedCast'; fixes gtest-217.cs.
3448
3449 2005-10-20  Atsushi Enomoto  <atsushi@ximian.com>
3450
3451         * generic.cs : (ConstructedType.CheckConstraints) warn CS0310 when
3452           1) "new()" is specified as generic parameter constraint and 2) the
3453           type is TypeBuilder and 3) the type is abstract even if it has a
3454           default .ctor(). Now errors/gcs0310-3.cs is correctly rejected.
3455
3456 2005-10-20  Martin Baulig  <martin@ximian.com>
3457
3458         * generic.cs
3459         (GenericConstraints.TypeParameter): New public property.
3460         (TypeParameter.ctor): Also take a `DeclSpace' argument.
3461         (TypeParameter.DeclSpace): New public property.
3462         (TypeParameter.DefineType): Inflate the constraints if our
3463         `DeclSpace' is an `Iterator'.   
3464
3465 2005-10-19  Atsushi Enomoto  <atsushi@ximian.com>
3466
3467         * class.cs, decl.cs : (MemberCache.FindMemberToOverride) added 
3468           GenericMethod argument to compare methods' generic type arguments.
3469           Fixed bug #76382.
3470
3471 2005-10-19  Martin Baulig  <martin@ximian.com>
3472
3473         * class.cs (TypeContainer.DefineType): Only use ResolveAsTypeStep(),
3474         not ResolveType() when resolving the base type, so we're not
3475         checking the constraints here.
3476         (TypeContainer.ResolveType): Call ResolveType() on our base_type
3477         if we have any.
3478
3479 2005-10-19  Martin Baulig  <martin@ximian.com>
3480
3481         * generic.cs (ConstructedType.CheckConstraints): Committing
3482         untested fix for #76441.
3483
3484 2005-10-18  Raja R Harinath  <rharinath@novell.com>
3485
3486         Fix #76371.
3487         * class.cs (TypeContainer.DefineType): Move updating of
3488         topological sort earlier in the code.
3489         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
3490
3491 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
3492
3493         Fix #76273.
3494         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
3495         
3496         * constant.cs (Constant.TryReduce): Moved from Cast class.
3497         (Reduce): Made little bit more OO and fixed missing conversions.
3498         
3499         * ecore.cs (Reduce): Implemented.
3500         (Binary.EnumLiftUp): New method to upgrade values to enum values.
3501         
3502         * literal.cs (Reduce): Implemented.
3503         
3504         * class.cs: Reverted Miguel's wrong commit.
3505
3506 2005-10-14  Miguel de Icaza  <miguel@novell.com>
3507
3508         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
3509
3510 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
3511
3512         * cs-parser.jay, expression.cs : CS0214 was missing error location
3513           for constants. Fixed bug #76404.
3514
3515 2005-10-10  Raja R Harinath  <rharinath@novell.com>
3516
3517         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
3518         InstanceExpression.
3519         (PropertyExpr.EmitCall): Likewise.
3520         * expression.cs (Invocation.EmitArguments): Handle case where
3521         arguments == null.
3522         (Invocation.EmitCall): Avoid allocating temporary variable if
3523         there are no arguments.
3524
3525 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
3526
3527         Fix #76370.
3528         * convert.cs (ExplicitConversionCore): Fixed object->enum
3529         conversion.
3530
3531 2005-10-07  Raja R Harinath  <rharinath@novell.com>
3532
3533         Fix #76323.
3534         * convert.cs (ImplicitConversionStandard): Move conversion of
3535         void* to arbitrary pointer types ...
3536         (ExplicitConversionStandard): .. here.
3537         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
3538         error to always print typenames.
3539
3540 2005-10-07  Raja R Harinath  <rharinath@novell.com>
3541
3542         * convert.cs (GetConversionOperator): Rename from
3543         GetConversionOperators.  Move operator selection code from ...
3544         (UserDefinedConversion): ... here.
3545
3546 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
3547
3548         * convert.cs (ExplicitConversionCore): Removed duplicate enum
3549         conversion.
3550
3551 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
3552
3553         * assign.cs (Assign.DoResolve): Error method changed.
3554
3555         * cfold.cs (DoConstantNumericPromotions): Error method changed.
3556         
3557         * const.cs (ResolveValue): Reset in_transit immediately.
3558         
3559         * constant.cs: Error method changed.
3560         
3561         * convert.cs: Removed useless location parameter.
3562         (ExplicitNumericConversion): Don't do double enum check.
3563         (ExplicitConversionCore): Renamed from ExplicitConversion.
3564         (ExplicitUnsafe): Extracted from ExplicitConversion.
3565         (ExplicitConversion): Uses for error reporting.
3566         
3567         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
3568         error messages.
3569         (ResolveBoolean): Uses common error method.
3570         (CastToDecimal): Get rid of ec.
3571         (CastFromDecimal): Optimized.
3572         (ConvCast): Get rid of ec.
3573         
3574         * enum.cs (ResolveValue): Reset in_transit immediately.
3575         (Emit): Return after first error.
3576         
3577         * expression.cs: Convert changes.
3578         
3579         * literal.cs: Error method changed.
3580         
3581         * statement.cs: Error method changed.
3582
3583 2005-10-06  Raja R Harinath  <rharinath@novell.com>
3584
3585         Fix gtest-131.cs and gtest-211.cs.
3586         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
3587         Only emit code for a label if it is used.  Unreachable code can
3588         violate ECMA evaluation stack invariants.
3589
3590 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
3591
3592         * anonymous.cs: Implemented ExprClassName.
3593         
3594         * assign.cs (Assign.DoResolve): Don't chrash when type is not
3595         delegate.
3596         
3597         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
3598         check.
3599         
3600         * class.cs (StaticClass.DefineContainerMembers): Report protected
3601         members as error.
3602         
3603         * codegen.cs: if(ed) PRODUCTION.
3604         
3605         * convert.cs (Error_CannotImplicitConversion): Better error
3606         distinction.
3607         
3608         * cs-parser.jay: More error checks.
3609         
3610         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
3611         
3612         * driver.cs (CSCParseOption): Enabled wrong option check.
3613         
3614         * ecore.cs (Expression.ExprClassName): Turned to property.
3615         (MemberExpr.CheckIntermediateModification): For checking boxed
3616         value types     modification.
3617         
3618         * statement.cs (Fixed.Resolve): Expression type must be
3619         convertible to fixed type.
3620         (CollectionForeach.GetEnumeratorFilter,TryType):
3621         Small refactoring for easier error checking.
3622
3623 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
3624
3625         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
3626         attributes.
3627         
3628         * class.cs (GeneratedBaseInitializer): New class for customization
3629         compiler generated initializers.
3630         (MemberBase.DoDefine): Check Obsolete attribute here.
3631         (FieldMember.DoDefine): Ditto.
3632         
3633         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
3634         constants.
3635         
3636         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
3637         (MemberCore.GetObsoleteAttribute): Removed argument.
3638         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
3639         (MemberCore.CheckObsoleteType): New helper.
3640         
3641         * delegate.cs,
3642         * enum.cs,
3643         * statement.cs: Updates after MemberCore changes.
3644         
3645         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
3646         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
3647         
3648         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
3649         obsolete attribute for compiler construct.
3650         (As.DoResolve): Cache result.
3651         
3652         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
3653
3654 2005-10-01  Miguel de Icaza  <miguel@novell.com>
3655
3656         * expression.cs (Probe): instead of having a "Type probe_type"
3657         keep the extra information as a TypeExpr probe_type_expr since the
3658         "As" operator needs to perform some type checks.
3659
3660         * (As.DoResolve): If the type is a type parameter, ensure that it
3661         is constrained by a class.
3662
3663 2005-09-22  Miguel de Icaza  <miguel@novell.com>
3664
3665         * statement.cs (Lock): Use the TemporaryVariable class instead of
3666         manually using local variables as those do not work when variables
3667         are captured.
3668
3669         * ecore.cs: Moved the TemporaryVariable class from being a nested
3670         class inside Foreach to be a public class that can be employed in
3671         other places. 
3672
3673 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
3674
3675         * cs-parser.jay: interface_accessors replaced by
3676         accessor_declarations.
3677
3678         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
3679         location.
3680         
3681         * statement.cs (GotoCase.Resolve): Convert null constant to
3682         null case.
3683         (SwitchLabel.ResolveAndReduce): Ditto.
3684         (SwitchLabel.NullStringCase): Custom null stamp.
3685         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
3686         
3687         typemanager.cs (CSharpSignature): Don't skip first argument
3688         for full names.
3689
3690 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
3691
3692         * cfold.cs, constant.cs, convert.cs, ecore.cs,
3693         expression.cs, iterators.cs, literal.cs: Store constants and
3694         literals location.
3695         
3696         * class.cs (MemberBase.ShortName): Pass location.
3697         
3698         * cs-parser.jay: Some location fixes.
3699         
3700         * ecore.cs (Expression.Location): Made virtual.
3701
3702 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
3703
3704         Fix #72930.
3705         * const.cs (Const.ResolveValue): Check for assigning non-null
3706         value to reference type.
3707
3708 2005-09-26  Raja R Harinath  <rharinath@novell.com>
3709
3710         Fix #76133.
3711         * expression.cs (This.VerifyFixed): In a value type T, the type of
3712         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
3713         value type R, 'this' is treated as a value parameter.
3714
3715 2005-09-05  Miguel de Icaza  <miguel@novell.com>
3716
3717         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
3718         if the underlying types are the same, otherwise we need to produce
3719         code that will do the proper cast.
3720
3721         This was exposed by Marek's constant rewrite which produced
3722         invalid code for the call site:
3723
3724         enum X : long { a }
3725         void Method (X v) {}
3726
3727         Method ((X) 5)
3728
3729         This fixes test-49.cs
3730
3731 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3732
3733         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
3734           Type/Object should be allowed as well. Fixed bug #75968.
3735
3736 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3737
3738         * expression.cs : (Binary.DoResolve): when one is enum constant and
3739           another is constant 0, then return enum one *as enum type*.
3740           Fixed bug 74846.
3741
3742 2005-10-04  Martin Baulig  <martin@ximian.com>
3743
3744         * ecore.cs (PropertyExpr.ResolveAccessors): Cosmetic fix; make the
3745         `SetMemberIsUsed()' work for generics, too.
3746
3747 2005-10-04  Martin Baulig  <martin@ximian.com>
3748
3749         * expression.cs (DelegateInvocation.EmitStatement): Make this work
3750         for corlib.  Fixes #75691.
3751
3752 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
3753
3754         Fix #76255.
3755         * driver.cs: Fix compilation files with full root path.
3756
3757 2005-09-25  Miguel de Icaza  <miguel@novell.com>
3758
3759         * report.cs (SymbolRelatedToPreviousError): Format the output so
3760         it does not use an open parenthesis that is never closed. 
3761
3762         * driver.cs: Follow coding guidelines
3763
3764 2005-09-18  Miguel de Icaza  <miguel@novell.com>
3765
3766         * driver.cs: Set InEmacs based on the environment variable EMACS. 
3767
3768         * location.cs (InEmacs): in this mode, do not report column
3769         location as it confuses Emacs.
3770
3771 2005-10-03  Raja R Harinath  <rharinath@novell.com>
3772
3773         * support.cs (SeekableStreamReader.Position): Don't error out when
3774         the requested position is just beyond the end of the current
3775         buffered data.
3776
3777 2005-09-28  Raja R Harinath  <rharinath@novell.com>
3778
3779         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
3780         try to keep in sync with the byte count of the underlying Stream.
3781         However, this limits us to a window size of 2048 characters: i.e.,
3782         the maximum lookahead of our lexer/parser can be 2048 characters.
3783
3784 2005-09-22  Martin Baulig  <martin@ximian.com>
3785
3786         * driver.cs: Removed a debugging FIXME.
3787
3788 2005-09-21  Raja R Harinath  <rharinath@novell.com>
3789
3790         * cs-parser.jay (type_arguments): Add CS1644 check.
3791         * decl.cs (DeclSpace.AddToContainer): Restore CS0694 check.
3792
3793 2005-09-15  Raja R Harinath  <rharinath@novell.com>
3794
3795         * Makefile (PROGRAM): Make profile specific.
3796         (gmcs.exe) [PROFILE=net_2_0]: Add utility rule to copy gmcs.exe to
3797         the current directory.
3798
3799         Fix test-455.cs.
3800         * expression.cs (Invocation.EmitCall): Remove optimization on
3801         this_call since it doesn't handle 'this' being a value type.
3802
3803 2005-09-05  Geoff Norton  <gnorton@customerdna.com>
3804
3805         * driver.cs: Ensure file handles are closed after parsing
3806
3807 2005-09-05  Miguel de Icaza  <miguel@novell.com>
3808
3809         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
3810         if the underlying types are the same, otherwise we need to produce
3811         code that will do the proper cast.
3812
3813         This was exposed by Marek's constant rewrite which produced
3814         invalid code for the call site:
3815
3816         enum X : long { a }
3817         void Method (X v) {}
3818
3819         Method ((X) 5)
3820
3821         This fixes test-49.cs
3822
3823 2005-09-05  Martin Baulig  <martin@ximian.com>
3824
3825         * expression.cs (As.DoResolve): Use `probe_type.IsValueType'
3826         instead of `TypeManager.IsValueType (probe_type)'; fixes #75668.
3827
3828         * cs-parser.jay (delegate_declaration): Small fix for #75852.
3829
3830 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3831
3832         * typemanager.cs: (IsUnmanagedType) : generic parameter is not allowed
3833           to be a pointer type due to the spec 25.2, so check if declaring
3834           type is generic type definition. Fixed bug #75772.
3835
3836 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3837
3838         Fixed bug #75957.
3839         * generic.cs : (TypeManager.IsEqual(Type,Type)): it should work when
3840           both types are not defined by methods.
3841         * expression.cs : (Invocation.IsApplicable): it should work when
3842           the argument type is equal to the parameter type, not only when
3843           ImplicitConversionExists() returns true.
3844
3845 2005-09-02  Raja R Harinath  <rharinath@novell.com>
3846
3847         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
3848         internal.
3849
3850         Fix #75941.
3851         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
3852         flow-branching for LocalVariableReferences in case we were invoked
3853         from a MemberAccess.
3854         * expression.cs (LocalVariableReference.VerifyAssigned): New.
3855         Carved out of ...
3856         (LocalVariableReference.DoResolveBase): ... this.
3857         (MemberAccess.Resolve): Do the check that was disabled during
3858         SimpleNameResolve.
3859
3860 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
3861
3862         * class.cs :
3863           (PartialContainer.Create): check abstract/sealed/static strictly
3864           but abstract/sealed can exist only at one side. Fixed bug #75883.
3865
3866 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
3867
3868         Fix #75945.
3869         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
3870         specified, don't default to UnmanagedType.I4.
3871
3872 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
3873
3874         * expression.cs : conditional operator should check possibly
3875           incorrect assign expression. Fixed bug #75946.
3876
3877 2005-08-30  Raja R Harinath  <rharinath@novell.com>
3878
3879         Fix #75934.
3880         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
3881         (ScopeInfo.EmitScopeType): Use it to construct field names from
3882         names of captured locals.
3883
3884         Fix #75929.
3885         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
3886         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
3887         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
3888         (ExplicitConversion): Remove enum cases already handled by
3889         implicit conversion.  Move implicit conversion check to the beginning.
3890         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
3891         * expression.cs (ArrayCreation.EmitDynamicInitializers):
3892         Don't treat System.Enum as a struct.
3893
3894 2005-08-30  Jb Evain  <jbevain@gmail.com>
3895
3896         * attribute.cs: handles as expression in parameters.
3897
3898 2005-08-30  Raja R Harinath  <rharinath@novell.com>
3899
3900         Fix #75802.
3901         * class.cs (TypeContainer.VerifyClsName): Don't use a
3902         PartialContainer when verifying CLS compliance.
3903         (AbstractPropertyEventMethod): Set Parent here, ...
3904         (PropertyMethod): ... not here.
3905
3906 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
3907
3908         * attribute.cs : escaped attribute name should not be allowed to be
3909           resolved (e.g. @class as classAttribute). Fixed bug #75930.
3910
3911 2005-08-29  Raja R Harinath  <rharinath@novell.com>
3912
3913         Fix #75927.
3914         * convert.cs (ImplicitStandardConversionExists): Allow zero also
3915         when converting a long constant to unsigned long.
3916         * expression.cs (Invocation.OverloadResolve): Add sanity check to
3917         detect where IsApplicable and VerifyArgumentsCompat disagree.
3918
3919 2005-08-29  Raja R Harinath  <rharinath@novell.com>
3920         and Carlos Alberto Cortez  <carlos@unixmexico.org>
3921
3922         Fix #75848.
3923         * class.cs (TypeContainer.CanElideInitializer): New helper.
3924         (TypeContainer.EmitFieldInitializers): Use it to determine if we
3925         can safely emitting the initializer of a field.
3926
3927 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3928
3929         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
3930           allowed inside a switch (without loop). Fixed bug #75433.
3931
3932 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
3933
3934         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
3935         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
3936
3937 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3938
3939         * driver.cs : kinda reverting the default encoding changes (not exact 
3940           revert since I noticed that "codepage:reset" might not work fine).
3941
3942 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3943
3944         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
3945           Location. Now getter and setter store location correctly.
3946           (errors/cs0111-12.cs now reports the expected location.)
3947
3948 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3949
3950         * driver.cs : Use default encoding on the environment.
3951           Removed (now that) extra parameter for SeekableStreamReader.
3952         * support.cs : (SeekableStreamReader) third .ctor() argument for
3953           StreamReader is not required (always true). preamble size could
3954           be acquired in simpler and safe way.
3955
3956 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
3957
3958         * cs-parser.jay: report CS0642 at warning level 3
3959           and report CS0642 for an if else statement also
3960           fixes bug #74745. Patch by John Luke (and a bit
3961           modified by me).
3962           Removed extra CS0642 warning check for "while",
3963           "for" and "fixed".
3964         * statement.cs: In Block.Resolve(), CS0642 check
3965           is reimplemented to check a sequence of an empty
3966           statement and a block.
3967
3968           Both fix bug #66777.
3969
3970 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
3971
3972         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
3973         detection until I fix it.
3974         
3975         * cs-tokenizer.cs: Changed error message.
3976         
3977         * cs-parser.jay: Fixed 2 error locations.
3978         
3979         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
3980         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
3981         properties.
3982         
3983         * enum.cs (GetSignatureForError): Fixed.
3984         
3985         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
3986         method detection.
3987         
3988         * class.cs,
3989         * typemanager.cs (RegisterProperty): Removed.
3990         
3991         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
3992
3993 2005-08-24  Raja R Harinath  <rharinath@novell.com>
3994
3995         Fix #75874.
3996         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
3997         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
3998
3999 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4000
4001         * expression.cs : tiny fix is required for not warning positive ulong.
4002           See test-441.cs.
4003
4004 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4005
4006         * expression.cs : add CS0652 check for constant and integral
4007           expression. Fixed bug #53974.
4008
4009 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4010
4011         * expression.cs : in DoNumericPromotions(), check if there is implicit
4012           conversion overload for string (to check CS0034). Fixed bug #52492.
4013
4014 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4015
4016         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
4017
4018 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4019
4020         * ecore.cs : report location when it is *not* Null.
4021
4022 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
4023
4024         * codegen.cs,
4025           ecore.cs,
4026           flowanalysis.cs,
4027           expression.cs:
4028           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
4029           correctly. Fixed bug #75721.
4030
4031 2005-08-23  Raja R Harinath  <rharinath@novell.com>
4032
4033         * support.cs (SeekableStreamReader.Position): Avoid an expensive
4034         loop that performs 'min (pos, char_count)'.
4035
4036         Fix #75862.
4037         * expression.cs (Unary.ResolveOperator): Don't discard implicit
4038         converted value in Operator.OnesComplement.
4039
4040 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
4041
4042         * anonymous.cs: If the anon method is pulled into a helper class,
4043         it needs to be `internal' not `private'. Fixes runtime behavior on
4044         msft. bug #75704
4045
4046 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
4047
4048         Fix #75803
4049         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
4050         is a partial class.
4051
4052 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
4053
4054         The big constants rewrite
4055         Fix #75746, #75685 and more
4056         As a side effect saved 1MB for MWF ;-)
4057         
4058         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
4059         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
4060         enum based for corlib compilation.
4061         
4062         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
4063         subtractions.
4064         
4065         * class.cs (FixedField.Define): Use ResolveAsConstant.
4066         
4067         * const.cs (IConstant): Interface constants and enums.
4068         (Const.ResolveValue): New method for constant resolvning.
4069         (ExternalConstant): Constants from imported assemblies.
4070         
4071         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
4072         conversion; like enums.
4073         (Constant.ToType): Converts this constant to different type.
4074         (Constant.Increment): Adds 1.
4075         
4076         * convert.cs (ImplicitConversionRequired): Simplified.
4077         
4078         * cs-parser.jay: Create EnumMember directly.
4079         
4080         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
4081         
4082         * doc.cs (GenerateEnumDocComment): Removed.
4083         
4084         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
4085         (ConvertIntLiteral): Removed.
4086         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
4087         
4088         * enum.cs (EnumMember): Implement IConstant.
4089         (Enum.IsValidEnumConstant): Removed.
4090         (Enum.GetNextDefaultValue): Removed.
4091         (Enum.FindMembers): Updated.
4092         (Enum.GenerateDocComment): Iterate enum members.
4093         
4094         * expression.cs (Cast.TryReduce): Handle enums correctly.
4095         (New.Constantify): Made public.
4096         (MemberAccess.DoResolve): Removed contant specific if(s).
4097         
4098         * literal.cs (NullLiteral): Implement new abstract methods.
4099         
4100         * statement.cs (GotoCase.Resolve): Use new constant methods.
4101         (SwitchLabel.ResolveAndReduce): Use new constant methods.
4102         
4103         * typemanager.cs (LookupEnum): Removed.
4104         (IsEnumType): Fixed to work with corlib.
4105         (RegisterConstant): Removed.
4106         (LookupConstant): Removed.
4107         (GetConstant): Changed to work with IConstant.
4108
4109 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
4110
4111         * location.cs : Fixed overflown (>255) column number.
4112
4113 2005-08-03  Raja R Harinath  <rharinath@novell.com>
4114
4115         First cut of the qualified-alias-member feature.
4116         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
4117         token.
4118         * cs-parser.jay (DOUBLE_COLON): New token.
4119         (namespace_or_type_name): Add rule for recognizing
4120         qualified-alias-members.
4121         (primary_expression): Likewise.
4122         (element_access): Allow QualifiedAliasMember as a possible
4123         type-bearing expression.
4124         (local_variable_type, local_variable_pointer_type): Likewise.
4125         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
4126         aliases in the current and enclosing namespace declarations.
4127         (NamespaceEntry.UsingAlias): Add CS0440 warning.
4128         * decl.cs (MemberName.is_double_colon): New.
4129         (MemberName.MemberName): Add new constructor for alias-member.
4130         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
4131         * expression.cs (QualifiedAliasMember): New expression type.
4132
4133 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
4134
4135         * location.cs : it borked when no argument was specified.
4136
4137 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
4138
4139         * location.cs : tiny ToString() format fix.
4140
4141 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
4142
4143         * statement.cs : oops, it was missing.
4144
4145 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
4146
4147         A set of fixes for precise line/column location.
4148
4149         * location.cs :
4150           "token" field now holds a file/line "delta", a line number offset 
4151           from the segment, and a column number. See also:
4152           http://lists.ximian.com/pipermail/mono-devel-list/2004-
4153           December/009508.html
4154           Removed static IsNull. Use instance IsNull property instead.
4155         * cs-tokenizer.cs :
4156           For some tokens it stores Location. For Identifier it stores
4157           LocatedToken which is a pair of string name and location.
4158           Column numbers are adjusted only at getChar().
4159         * report.cs :
4160           Use Location.ToString() for reporting (it now contains column).
4161         * cs-parser.jay :
4162           Largely modified to use LocatedToken instead of
4163           string (IDENTIFIER), and to acquire Location from some tokens.
4164         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
4165           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
4166           codegen.cs :
4167           Now MemberName holds Location. DeclSpace.ctor() receives Location
4168           as a parameter. Removed extra parameters to all derived classes.
4169           Replaced Location.IsNull() with instance property.
4170         * assign.cs, expression.cs :
4171           Added .ctor() overload that omits Location.
4172         * attribute.cs :
4173           Added "nameEscaped" flag that indicates the identifier was escaped
4174           in the source file. This fixes bug #57047.
4175
4176 2005-09-02  Martin Baulig  <martin@ximian.com>
4177
4178         * class.cs: Make CS3005 a warning, not an error.
4179
4180 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
4181
4182         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
4183         New method, looking for lo-case imported cls type.
4184
4185         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
4186         here.
4187
4188         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
4189
4190         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
4191
4192         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
4193         all_imported_types.
4194         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
4195
4196         Optimized to save 3.5 MB for SWF compilation.
4197
4198 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
4199
4200         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
4201         (PartialContainer.Create): Moved logic AddToContainer.
4202         (PartialContainer.MarkForDuplicationCheck): Shares name.
4203         
4204         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
4205         place.
4206         
4207         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
4208         initialization.
4209         (Namespace.GetSignatureForError): New method.
4210         
4211         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
4212         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
4213
4214 2005-08-01  Raja R Harinath  <rharinath@novell.com>
4215
4216         Fix #75669.
4217         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
4218         member lookup rather than qualifier_type, since qualifier_type can
4219         be null.
4220
4221 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
4222
4223         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
4224         enum member.
4225
4226 2005-07-31  Miguel de Icaza  <miguel@novell.com>
4227
4228         * statement.cs: Copy the local exception into the exception
4229         captured local.  Fixes 75674
4230
4231 2005-07-31  Raja R Harinath  <harinath@gmail.com>
4232
4233         Fix #75658.
4234         * expression.cs (Invocation.OverloadResolve): Don't report error
4235         CS1501 if error CS1502 has been reported.
4236         (New.DoResolve): Delegate CS1501 reporting to
4237         Invocation.OverloadResolve.
4238
4239         Fix #75656.
4240         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
4241         invariant-meaning-in-block property in an enclosing block if
4242         necessary.
4243
4244 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
4245
4246         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
4247         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
4248         (Switch.CheckSwitch): Just save 50kb for SWF.
4249
4250 2005-07-27  Martin Baulig  <martin@ximian.com>
4251
4252         * anonymous.cs (CaptureContext.AddField): Added
4253         `AnonymousContainer am' argument; compute its toplevel scope if
4254         it's not already computed.  Fixes #75649.
4255
4256 2005-07-26  Raja R Harinath  <rharinath@novell.com>
4257
4258         Fix #75628.
4259         * class.cs (Constructor.Emit): Reset block to null if the block
4260         resolve fails.
4261
4262 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
4263
4264         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
4265
4266 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
4267
4268         * class.cs (MethodData.Define): Check whether accessor implementing
4269         interface is public.
4270
4271         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
4272
4273 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
4274
4275         Fix #57245
4276         * namespace.cs (LookupType): Moved same type check to...
4277         
4278         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
4279         with the same name.
4280
4281 2005-07-21  Raja R Harinath  <rharinath@novell.com>
4282
4283         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
4284         already found a typebuilder.
4285         * class.cs (MethodCore.IsDuplicateImplementation): Compare
4286         MemberNames, not strings.
4287
4288         * const.cs (Error_ExpressionMustBeConst): 
4289         Rename from Error_EpressionMustBeConst.
4290         * const.cs, class.cs, statement.cd: Update.
4291
4292 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
4293
4294         Fix #65573
4295
4296         * const.cs (Const.LookupConstantValue): Report missing contant expression
4297         everytime.
4298         (Error_EpressionMustBeConstant): Only one error method.
4299
4300         * class.cs, statement.c: Updated.
4301
4302 2005-07-20  Raja R Harinath  <rharinath@novell.com>
4303
4304         * statement.cs (Block.Flags): Add back HasVarargs.
4305         (Block.flags): Make protected.
4306         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
4307
4308         * typemanager.cs (types, typecontainers, user_types): Remove.
4309         (UserTypes, TypeContainers): Likewise.
4310         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
4311         (CleanUp, Reset): Update.
4312         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
4313         (GetNestedType): Use Type.GetNestedType.
4314         (CoreLookupType): Take two arguments, the namespace and the
4315         basename of the type.  Update to use the Namespace.Lookup
4316         mechanism.
4317         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
4318         (RealMemberLookup): Use IsNestedChildOf instead of playing with
4319         string concatenation and substring matches.
4320         * class.cs, enum.cs, delegate.cs: Update to changes.
4321
4322 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
4323
4324         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
4325         Expression and made virtual.
4326
4327         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
4328         (ImplicitStandardConversionExists): Fixed `byte' typo ?
4329
4330         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
4331
4332         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
4333         error message.
4334
4335         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
4336         change.
4337
4338 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
4339
4340         Fix #57707
4341         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
4342         AssemblyCultureAttribute is not used on executable.
4343
4344         * rootcontext.cs,
4345         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
4346
4347 2005-07-16  Raja R Harinath  <rharinath@novell.com>
4348
4349         Fix #60638.
4350         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
4351         New.  Reports CS0252/CS0253.
4352         Mostly taken from preliminary patch by Duncak Mak.
4353         (Binary.DoResolveOperator): Store results of operator lookup.
4354         Use them to detect if we need to warn about unintended reference
4355         comparisons.
4356
4357 2005-07-15  Raja R Harinath  <rharinath@novell.com>
4358
4359         Fix #72969.
4360         * namespace.cs (Namespace.Lookup): Add back location parameter.
4361         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
4362         * delegate.cs, ecore.cs, expression.cs: Update to changes.
4363
4364         * codegen.cs (EmitContext.DeclSpace): Make readonly.
4365         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
4366         (Namespace.LookupType): ... this.
4367         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
4368         of namespaces.
4369         * typemanager.cs (LookupTypeReflection): Remove buggy code that
4370         purported to handle pointers.
4371         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
4372         CoreLookupType.
4373
4374 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
4375
4376         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
4377         type as namespace.
4378
4379 2005-07-15  Raja R Harinath  <rharinath@novell.com>
4380
4381         * namespace.cs (Namespace.Lookup): Drop location parameter.
4382         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
4383         (NamespaceEntry.Lookup): ... this.
4384         (NamespaceEntry.Error_AmbiguousTypeReference):
4385         Move here from DeclSpace.
4386         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
4387         names ...
4388         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
4389         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
4390         Move to NamespaceEntry.
4391         * delegate.cs, expression.cs: Update to changes.
4392
4393 2005-08-31  Martin Baulig  <martin@ximian.com>
4394
4395         Committing a patch from Atsushi Enomoto for #75850.
4396
4397         * statement.cs (Foreach.CollectionForeach.GetEnumeratorFilter):
4398         Prefer a generic enumerator over a non-generic one.
4399
4400 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
4401
4402         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
4403         * gmcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
4404
4405 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4406
4407         * driver.cs : reverting default encoding change as well as mcs.
4408
4409 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4410
4411         * driver.cs, support.cs : merged r48826.
4412           Marek Safer wrote:
4413           > could you integrate your mcs changes to gmcs otherwise
4414           > gmcs cannot compile some files.
4415
4416 2005-08-20  Martin Baulig  <martin@ximian.com>
4417
4418         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
4419         scope if we don't already have it.
4420
4421         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
4422         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
4423         fixes #75867.
4424
4425 2005-07-31  Miguel de Icaza  <miguel@novell.com>
4426
4427         * statement.cs: Copy the local exception into the exception
4428         captured local.  Fixes 75674
4429
4430 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
4431
4432         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
4433         type as namespace.
4434
4435 2005-08-12  Martin Baulig  <martin@ximian.com>
4436
4437         * expression.cs (MemberAccess.ResolveNamespaceOrType): Only search
4438         for nested types here to avoid hitting the cache too early.
4439
4440 2005-08-09  Miguel de Icaza  <miguel@novell.com>
4441
4442         * enum.cs: On the new compiler CLS error 3005 is now a warning not
4443         an error. 
4444
4445 2005-08-03  Martin Baulig  <martin@ximian.com>
4446
4447         Make iterators in generic methods work; see gtest-191.cs.
4448
4449         * generic.cs
4450         (Constraints.Resolve): Protect against being called twice.
4451
4452         * class.cs
4453         (TypeContainer.GetClassBases): Make this `protected virtual'.
4454
4455         * iterator.cs (Iterator.ctor): Added `GenericMethod' argument.
4456         (Iterator.GetClassBases): Override this and compute the base
4457         classes here.
4458         (Iterator.DefineNestedTypes): If we're a generic method, all our
4459         method type parameters become class type parameters on the proxy
4460         class.
4461
4462         * statement.cs
4463         (ToplevelBlock.Parameters): Make this a property, not a field.
4464         (ToplevelBlock.ResolveMeta): Update the `parameters' from the `ip'.
4465
4466 2005-08-03  Martin Baulig  <martin@ximian.com>
4467
4468         * typemanager.cs (TypeManager.IsSubclassOf): Use
4469         `TypeManager.IsEqual' instead of `Type.Equals'; fixes gtest-190.cs.
4470         (TypeManager.GetFullName_recursed): Improved.
4471
4472 2005-07-27  Carlos Alberto Cortez <calberto.cortez@gmail.com>
4473
4474         Fix #75417
4475         * ecore.cs (Expression.IsAccessorAccessible): Change the check for
4476         Private accessor case, using TypeManager.IsPrivateAccessible instead of
4477         invocation_type == mi.DeclaringType, since the first one also checks
4478         other condition used by generic instances.
4479         
4480 2005-07-27  Martin Baulig  <martin@ximian.com>
4481
4482         * anonymous.cs (CaptureContext.AddField): Added
4483         `AnonymousContainer am' argument; compute its toplevel scope if
4484         it's not already computed.  Fixes #75649.
4485
4486 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
4487
4488         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
4489         CheckAttributeType and refactored.
4490         (Attribute.ResolvePossibleAttributeType): Changed to reuse
4491         ResolveAsTypeTerminal error handling.
4492         (ResolveAsTypeTerminal): Introduced because of global attributes extra
4493         handling.
4494         (GetSignatureForError): Print errors in same way.
4495
4496         * class.cs,
4497         * codegen.cs: Reflect attribute GetSignatureForError change.
4498
4499         * ecore.cs,
4500         * expression.cs: Add silent parameter to ResolveAsTypeStep.
4501
4502         * namespace.cs (UsingEntry): Refactored to make fields private.
4503
4504         * assign.cs,
4505         statement.cs: Error_UnexpectedKind has extra parameter.
4506
4507 2005-07-14  Raja R Harinath  <rharinath@novell.com>
4508
4509         * ecore.cs (IAlias): Remove.
4510         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
4511         that implement the interface.
4512         * namespace.cs (Namespace): Likewise.
4513         (Namespace.declspaces): Renamed from 'defined_names'.
4514         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
4515         DeclSpace instead of an IAlias.
4516         * tree.cs (Tree.AddDecl): Update.
4517
4518 2005-07-12  Raja R Harinath  <rharinath@novell.com>
4519
4520         * statement.cs (Block.Flags); Remove HasVarargs.
4521         (Block.HasVarargs): Move to ToplevelBlock.
4522         (Block.ThisVariable, Block.AddThisVariable): Likewise.
4523         (Block.Variables): Make protected.  Initialize variable hashtable
4524         if necessary.
4525         (Block.AddVariable): Update.
4526         (Block.Resolve): Update to changes.
4527         (ToplevelBlock.HasVarargs): New boolean.
4528         (ToplevelBlock.ThisVariable): Move here from Block.
4529         (ToplevelBlock.AddThisVariable): Likewise.
4530         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
4531         * expression.cs (This.ResolveBase): Update to changes.
4532         (ArglistAccess.DoResolve): Likewise.
4533
4534 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
4535
4536         Fix #75321
4537         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
4538
4539         * class.cs (TypeContainer.VerifyMembers): Distinguish between
4540         not used and not used & assigned.
4541         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
4542
4543 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
4544
4545         Fix #75053
4546         * expression.cs (Is.DoResolve): null is never provided type.
4547
4548 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
4549
4550         Fix #52496
4551         * cs-parser.jay: Less strict event error rule to catch more errors.
4552
4553 2005-07-11  Martin Baulig  <martin@ximian.com>
4554
4555         * generic.cs (ConstructedType.CheckConstraints): Improve the check
4556         for the constructor constraint: we do not only have to check
4557         whether the class has a public constructor, but also ensure that
4558         it's parameterless.  Fixes #75492.
4559
4560 2005-07-11  Martin Baulig  <martin@ximian.com>
4561
4562         * expression.cs (Binary.ResolveOperator): Only allow `==' and `!='
4563         between type parameters if they either have the reference type
4564         constraint or the class constraint.
4565
4566 2005-07-10  Kamil Skalski <nazgul@nemerle.org>
4567
4568         * generic.cs: Use MakeGenericType instead of BindGenericParameters.
4569
4570 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
4571
4572         Fix #74975
4573         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
4574         (ExtractSecurityPermissionSet): Cope with self referencing security
4575         attributes properly.
4576
4577         * driver.cs (SetOutputFile): Made public property OutputFile.
4578
4579 2005-07-07  Raja R Harinath  <rharinath@novell.com>
4580
4581         Fix #75486.
4582         * class.cs (TypeContainer.first_nonstatic_field): Rename from
4583         has_nonstatic_fields.  Make into a FieldBase pointer.
4584         (TypeContainer.AddField): Add CS0282 check.
4585         (TypeContainer.EmitType): Update.
4586
4587 2005-07-06  Miguel de Icaza  <miguel@novell.com>
4588
4589         * cs-tokenizer.cs (consume_identifier): Do not create strings to
4590         compare if they start with __.
4591
4592 2005-07-06  Raja R Harinath  <rharinath@novell.com>
4593
4594         * statement.cs (Switch.SwitchGoverningType): Only look at
4595         UserCasts that don't need implicit standard conversions to one of
4596         the allowed switch types (Fixes test-322.cs).
4597         (LocalInfo.Resolve): Re-enable sanity-test.
4598
4599 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
4600
4601         * cs-tokenizer.cs (consume_identifier): Detect double undescores
4602         
4603         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
4604         
4605         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
4606
4607 2005-07-06  Raja R Harinath  <rharinath@novell.com>
4608
4609         Fix #75472.
4610         * ecore.cs (SimpleName.GetSignatureForError): Add.
4611         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
4612         (MemberAccess.GetSignatureForError): Add.
4613
4614 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
4615  
4616         The big error and warning messages review.
4617         
4618         * anonymous.cs,
4619         * assign.cs,
4620         * attribute.cs,
4621         * class.cs,
4622         * codegen.cs,
4623         * convert.cs,
4624         * cs-parser.jay,
4625         * cs-tokenizer.cs,
4626         * decl.cs,
4627         * delegate.cs,
4628         * doc.cs,
4629         * driver.cs,
4630         * ecore.cs,
4631         * enum.cs,
4632         * expression.cs,
4633         * flowanalysis.cs,
4634         * iterators.cs,
4635         * literal.cs,
4636         * location.cs,
4637         * modifiers.cs,
4638         * namespace.cs,
4639         * parameter.cs,
4640         * pending.cs,
4641         * report.cs,
4642         * rootcontext.cs,
4643         * statement.cs,
4644         * support.cs,
4645         * tree.cs,
4646         * typemanager.cs: Updated.
4647         
4648         * class.cs: (MethodCore.SetYields): Moved here to share.
4649         (PropertyMethod.Define): Moved iterator setup here.
4650         
4651         * iterators.cs: Add orig_method to have full access to parent
4652         container.
4653
4654 2005-07-05  Raja R Harinath  <rharinath@novell.com>
4655
4656         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
4657         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
4658         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
4659         variable of struct type.
4660         * expression.cs (Unary.ResolveOperator): Update to change.
4661         (Indirection.VerifyFixed): Likewise.
4662         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
4663         (ParameterReference.VerifyFixed): Value parameters are fixed.
4664         (This.VerifyFixed): Treat 'this' as a value parameter.
4665         * statement.cs (LocalInfo.IsFixed): Remove.
4666
4667 2005-07-01  Martin Baulig  <martin@ximian.com>
4668
4669         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
4670         `ec.EmitThis ()' to get the correct scope.
4671
4672 2005-07-01  Martin Baulig  <martin@ximian.com>
4673
4674         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
4675         instance is a ParameterReference; fixes #75299.
4676
4677 2005-06-30  Raja R Harinath  <rharinath@novell.com>
4678
4679         Fix #75412.
4680         * expression.cs (Indexers.map): Remove.
4681         (Indexers.Append): Filter out inaccessible setters and getters.
4682         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
4683
4684         Fix #75283.
4685         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
4686         Refactored from ...
4687         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
4688         (FieldExpr.Emit, PropertyExpr.Emit): Update.
4689         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
4690         * expression.cs (Invocation.EmitCall): Add CS0120 check.
4691
4692 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
4693
4694         Fix #75322
4695         * class.cs (FieldBase.GetInitializerExpression): One more field
4696         for backup.
4697
4698 2005-06-28  Miguel de Icaza  <miguel@novell.com>
4699
4700         * pending.cs: Do not define a proxy if the base method is virtual,
4701         it will be picked up by the runtime (bug 75270).
4702
4703 2005-07-08  Martin Baulig  <martin@ximian.com>
4704
4705         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
4706         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
4707
4708 2005-07-07  Martin Baulig  <martin@ximian.com>
4709
4710         * generic.cs (ConstructedType.CheckConstraint): Use
4711         ResolveAsTypeStep(), not ResolveAsTypeTerminal() so we're not
4712         called recursively; fixes #75329.
4713
4714 2005-07-06  Martin Baulig  <martin@ximian.com>
4715
4716         * generic.cs (TypeManager.InferTypeArguments): Added support for
4717         anonymous methods; fixes #75461.
4718
4719 2005-07-01  Martin Baulig  <martin@ximian.com>
4720
4721         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
4722         `ec.EmitThis ()' to get the correct scope.
4723
4724 2005-07-01  Martin Baulig  <martin@ximian.com>
4725
4726         * ecore.cs (FieldExpr.DoResolve): Only capture the field if it's
4727         instance is `This'; fixes #75299.
4728
4729 2005-06-30  Martin Baulig  <martin@ximian.com>
4730
4731         * class.cs (Indexer): Implement IIteratorContainer; added support
4732         for iterators in indexers.
4733
4734         * codegen.cs
4735         (EmitContext.CurrentIterator): Make this a property, not a field.
4736
4737         * anonymous.cs (AnonymousContainer.Iterator): New public property.
4738
4739 2005-06-28  Miguel de Icaza  <miguel@novell.com>
4740
4741         * pending.cs: Do not define a proxy if the base method is virtual,
4742         it will be picked up by the runtime (bug 75270).
4743
4744 2005-06-28  Martin Baulig  <martin@ximian.com>
4745
4746         * cs-parser.jay (interface_method_declaration): Avoid a
4747         reduce/reduce conflict by moving some of the code into a separate
4748         `interface_method_declaration_body' rule; fixes #75368.
4749
4750 2005-06-28  Martin Baulig  <martin@ximian.com>
4751
4752         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Move the
4753         array check after the check for TypeBuilder's.
4754
4755 2005-06-21  Raja R Harinath  <rharinath@novell.com>
4756
4757         * convert.cs (FindMostEncompassedType): Add two trivial special
4758         cases (number_of_types == 0 || number_of_types == 1).
4759         (FindMostEncompasingType): Likewise.
4760
4761 2005-06-17  Raja R Harinath  <rharinath@novell.com>
4762
4763         Some cleanups preparing for the fix of #75283.
4764         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
4765         error testing.
4766         (EventExpr.InstanceResolve): Likewise.
4767         (EventExpr.DoResolve): Remove redundant checks.
4768
4769 2005-06-08  Miguel de Icaza  <miguel@novell.com>
4770
4771         * class.cs: Small fix.
4772
4773 2005-06-08  Raja R Harinath  <rharinath@novell.com>
4774
4775         Fix #75160.
4776         * class.cs (GetPartialBases): Fix return value check of
4777         part.GetClassBases.
4778
4779 2005-06-07  Raja R Harinath  <rharinath@novell.com>
4780
4781         Ensure that partial classes are registered in their enclosing
4782         namespace.  Initial part of fix of #75160.
4783         * tree.cs (Tree.RecordDecl): Add new namespace argument.
4784         Register declspace with namespace here, not in
4785         DeclSpace.RecordDecl.
4786         * cs-parser.jay: Pass namespace to RecordDecl.
4787         * class.cs (PartialContainer.Create): Likewise.
4788         (ClassPart.DefineType): New sanity-check.  Throws an exception if
4789         called.
4790         * decl.cs (Declspace.RecordDecl): Remove.
4791         * namespace.cs (NamespaceEntry.DefineName): Remove.
4792
4793 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
4794
4795         * rootcontext.cs: Reset TargetExt as well.
4796
4797 2005-06-03  Raja R Harinath  <rharinath@novell.com>
4798
4799         * ecore.cs (Expression.Resolve): Emit CS0654 error when
4800         -langversion:ISO-1.
4801
4802 2005-06-02  Raja R Harinath  <rharinath@novell.com>
4803
4804         Fix #75080, cs0119.cs.
4805         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
4806         of ...
4807         (Expression.Resolve): ... this.  Use it.  Remove bogus code
4808         allowing ExprClass.Type and ExprClass.Namespace for
4809         ResolveFlags.VariableOrValue.
4810         (Expression.Resolve) [1-argument variant]: Change default resolve
4811         flags based on language version.
4812         (Expression.Error_UnexpectedKind): Use a simple string array
4813         rather than an ArrayList.
4814         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
4815         not ExprClass.Type.
4816         (TypeOfVoid.DoResolve): Likewise.
4817         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
4818         flags argument -- it always has the same value.
4819
4820 2005-05-31  Raja R Harinath  <rharinath@novell.com>
4821
4822         Fix #75081.
4823         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
4824         Use it in the error message.
4825         * assign.cs, expression.cs, statement.cs: Update.
4826
4827 2005-05-30  Raja R Harinath  <rharinath@novell.com>
4828
4829         Fix #75088.
4830         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
4831         the "almostMatchedMember" case too.
4832         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
4833         that failed the accessibility checks to 'almost_match'.
4834
4835 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
4836
4837         * attribute.cs: Use internal MethodBuilder methods to set
4838         ExactSpelling and SetLastError on PInvoke methods, instead
4839         of passing them via charset.  Fixes #75060.
4840
4841 2005-05-27  Raja R Harinath  <rharinath@novell.com>
4842
4843         * parameter.cs (Parameter): Remove TODO comment.
4844         (Parameter.DefineParameter): Remove Location parameter.
4845         (Parameters.LabelParameters): Likewise.
4846         * class.cs (Constructor.Emit): Update to change.
4847         (MethodData.Emit): Likewise.
4848         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
4849         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
4850
4851 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
4852
4853         * parameter.cs,
4854           Removed Parameters.Location and added Parameter.Location instead.
4855           Removed Location parameter from Emit() and GetSignature().
4856         * anonymous.cs,
4857           class.cs,
4858           cs-parser.jay,
4859           delegate.cs,
4860           iterators.cs,
4861           statement.cs :
4862           Modified all related calls.
4863
4864 2005-06-21  Martin Baulig  <martin@ximian.com>
4865
4866         * generic.cs (NullCoalescingOperator.Emit): Make this work if the
4867         left-hand side is not a nullable type; fixes #75328.
4868
4869 2005-06-21  Martin Baulig  <martin@ximian.com>
4870
4871         * typemanager.cs
4872         (TypeManager.CSharpName): Use GetFullName() instead of `t.FullName'.
4873         (TypeManager.GetFullNameSignature): Likewise.
4874
4875         * convert.cs (Convert.Error_CannotImplicitConversion): Compare
4876         `source.FullName' and `target.FullName' to check whether there are
4877         two conflicting definitions.
4878
4879 2005-06-21  Martin Baulig  <martin@ximian.com>
4880
4881         * convert.cs (Convert.ImplicitTypeParameterConversion): Always use
4882         a BoxedCast - also for reference types - to be compatible with csc.
4883
4884 2005-06-21  Martin Baulig  <martin@ximian.com>
4885
4886         * expression.cs (MemberAccess.DoResolve): Add support for nested
4887         types in a generic instance; fixes #75320.
4888
4889 2005-06-20  Martin Baulig  <martin@ximian.com>
4890
4891         * generic.cs (TypeManager.InferType): Also walk the class
4892         hierarchy for generic instances; fixes #75261.
4893
4894 2005-06-17  Martin Baulig  <martin@ximian.com>
4895
4896         * typemanager.cs (TypeManager.IsBuiltinType): Use TypeToCoreType()
4897         to make things work for corlib.
4898
4899 2005-06-15  Martin Baulig  <martin@ximian.com>
4900
4901         * attribute.cs (Attribute.CheckSecurityActionValidity): Remove the
4902         obsolete `SecurityAction' values.
4903
4904 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
4905
4906         * rootcontext.cs: Reset TargetExt as well.
4907         
4908 2005-06-09  Martin Baulig  <martin@ximian.com>
4909
4910         * delegate.cs (Delegate.VerifyMethod): Added
4911         `MethodGroupExpr old_mg' argument; inherit its
4912         `HasTypeParameters'; fix #75085.
4913
4914 2005-06-09  Martin Baulig  <martin@ximian.com>
4915
4916         * expression.cs (Invocation.OverloadResolve): Correctly handle
4917         generic methods for the SetMemberIsUsed(); fix #75064.
4918
4919 2005-06-09  Martin Baulig  <martin@ximian.com>
4920
4921         * statement.cs (Throw.Resolve): Use TypeManager.IsSubclassOf();
4922         fixes #75062.
4923
4924 2005-06-08  Martin Baulig  <martin@ximian.com>
4925
4926         * cs-parser.jay (nullable_type_or_conditional): If we put the
4927         nullable back and our `type' is a `ComposedCast', remove the
4928         nullable from it.  Fixes #75156.
4929
4930         * expression.cs (ComposedCast.RemoveNullable): New public method.
4931
4932 2005-06-08  Martin Baulig  <martin@ximian.com>
4933
4934         The big Iterators rewrite :-)
4935
4936         * iterators.cs: Rewrite this to use the anonymous methods framework.
4937
4938         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
4939         before the TypeContainers; see 2test-21.cs.
4940
4941         * class.cs
4942         (TypeContainer.DefineType): Don't create a new EmitContext if we
4943         already have one (this only happens if we're an Iterator).
4944         (TypeContainer.Define): Also call Define() on all our iterators.
4945         (Method.CreateEmitContext): Added support for iterators.
4946
4947         * anonymous.cs
4948         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
4949         (AnonymousContainer.CreateMethodHost): Moved here from
4950         AnonymousMethod and made abstract.
4951         (AnonymousContainer.CreateScopeType): New abstract method.
4952         (AnonymousContainer.IsIterator): New public property.
4953         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
4954         get the ScopeTypeBuilder rather than manually defining it here. 
4955         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
4956         iterators here.
4957
4958         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
4959         before RootContext.DefineTypes().
4960
4961         * codegen.cs (EmitContext.RemapToProxy): Removed.
4962         (EmitContext.CurrentAnonymousMethod): Changed type from
4963         AnonymousMethod -> AnonymousContainer.
4964         (EmitContext.ResolveTopBlock): Protect from being called twice.
4965         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
4966         (EmitContext.EmitThis): Removed the iterators hacks; use the
4967         anonymous methods framework for that.
4968
4969         * statement.cs
4970         (ToplevelBlock.Container): Make this a property, not a field.
4971         (ToplevelBlock.ReParent): New public method; move the
4972         ToplevelBlock into a new container.
4973         (Foreach.TemporaryVariable): Simplify.
4974
4975 2005-06-05  Martin Baulig  <martin@ximian.com>
4976
4977         * statement.cs (LocalInfo.CompilerGenerated): New flag.
4978         (Block.AddTemporaryVariable): New public method; creates a new
4979         `LocalInfo' for a temporary variable.
4980         (Block.EmitMeta): Create the LocalBuilders for all the temporary
4981         variables here.
4982         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
4983         non-iterator variables.
4984
4985 2005-06-05  Martin Baulig  <martin@ximian.com>
4986
4987         * statement.cs (Foreach.TemporaryVariable): Create the
4988         LocalBuilder in the Emit phase and not in Resolve since in some
4989         situations, we don't have an ILGenerator during Resolve; see
4990         2test-19.cs for an example.
4991
4992 2005-06-04  Martin Baulig  <martin@ximian.com>
4993
4994         The big Foreach rewrite - Part II.
4995
4996         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
4997         with `PropertyInfo ienumerator_getcurrent'.
4998
4999         * codegen.cs (VariableStorage): Removed.
5000
5001         * statement.cs
5002         (Foreach): Derive from Statement, not ExceptionStatement.
5003         (Foreach.CollectionForeach): New nested class.  Moved all the code
5004         dealing with collection foreach here.
5005         (Foreach.ForeachHelperMethods): Removed.
5006         (Foreach.TemporaryVariable): Implement IMemoryLocation.
5007
5008 2005-05-23  Martin Baulig  <martin@ximian.com>
5009
5010         * statement.cs (Try.DoResolve): Don't create a `finally' if we
5011         don't need to.  Fix #75014.
5012
5013 2005-05-26  Raja R Harinath  <rharinath@novell.com>
5014
5015         Improve user-defined conversion handling.
5016         * convert.cs (GetConversionOperators): Rewrite.  Return only the
5017         applicable operators.
5018         (AddConversionOperators): New.  Helper for GetConversionOperators.
5019         (FindMostEncompassedType, FindMostEncompassingType): Verify that
5020         there is only one most encompassed/encompassing type.
5021         (FindMostSpecificSource, FindMostSpecificTarget): Remove
5022         "applicable operator" handling.
5023         (UserConversion): Move cache here from GetConversionOperators.
5024         Directly cache the chosen operator, rather than the whole
5025         MethodGroup.
5026         (ExplicitNumericConversion): Fix buggy implementation of Decimal
5027         case.  Allow conversion of decimal to sbyte and byte too.
5028         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
5029         New static methods.  Used to avoid allocating EmptyExpressions in
5030         convert.cs.
5031
5032 2005-05-24  Duncan Mak  <duncan@novell.com>
5033
5034         * ecore.cs (CastFromDecimal): New class for casting a decimal to
5035         another class, used in Convert.ExplicitNumericConversion.
5036         (CastToDecimal): New class, similar to above, but casts to
5037         System.Decimal, used in Convert.ImplicitNumericConversion and also
5038         in explicit convesion from double/float to decimal.
5039
5040         * convert.cs (ImplicitNumericConversion): Handle implicit
5041         conversions to System.Decimal.
5042         (ExplicitNumericConversion): handle explicit conversions to
5043         System.Decimal.
5044
5045         This fixes #68711.
5046         
5047 2005-05-20  Miguel de Icaza  <miguel@novell.com>
5048
5049         * typemanager.cs: Do not throw an exception in the TypeBuilder
5050         case, we take care of it on the TypeCode.
5051
5052 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
5053         
5054         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
5055         is back.
5056         
5057         * cs-parser.jay: Catch more lexical errors.
5058         
5059         * report.cs: Add one more Error method.
5060         
5061         * rootcontext.cs,
5062         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
5063
5064 2005-05-20  Martin Baulig  <martin@ximian.com>
5065
5066         * class.cs (TypeContainer.CircularDepException): Removed.
5067         (TypeContainer.DefineType): Removed the `InTransit' stuff.
5068         (TypeContainer.CheckRecursiveDefinition): Check for circular class
5069         (CS0146) and interface (CS0529) dependencies here.
5070
5071 2005-05-20  Martin Baulig  <martin@ximian.com>
5072
5073         * expression.cs (New.DoResolve): Move the CS0712 check above the
5074         CS0144 check; otherwise it can never be reached.
5075
5076 2005-05-20  Martin Baulig  <martin@ximian.com>
5077
5078         * cs-parser.jay: Fix CS0080 check; add CS0231 and CS0257 from MCS.
5079
5080 2005-05-20  Martin Baulig  <martin@ximian.com>
5081
5082         * class.cs (TypeContainer.DefineType): Fix CS0698 check.
5083
5084         * typemanager.cs (TypeManager.IsAttributeType): New public method.
5085
5086 2005-05-19  Martin Baulig  <martin@ximian.com>
5087
5088         * delegate.cs
5089         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
5090         to disable error reporting.
5091
5092         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
5093         here since we don't want to report an error; see the new test-336.cs.
5094
5095 2005-05-19  Raja R Harinath  <rharinath@novell.com>
5096
5097         * statement.cs (ToplevelBlock.GetParameterReference)
5098         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
5099         Move here from class Block.
5100         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
5101         * expression.cs (ParameterReference.DoResolveBase): Likewise.
5102
5103 2005-05-18  Martin Baulig  <martin@ximian.com>
5104
5105         Fix #74978.
5106
5107         * flowanalysis.cs
5108         (FlowBranching.Reachability): Add non-static public And() and Or()
5109         methods.
5110         (FlowBranchingSwitch): New class; do the `break_origins' thing
5111         like in FlowBranchingLoop.
5112         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
5113         reachability, not just locals and parameters.
5114         (FlowBranching.MergeChild): Remove some of the hacks for loop and
5115         switch; MergeBreakOrigins() now takes care of that.
5116
5117 2005-05-18  Martin Baulig  <martin@ximian.com>
5118
5119         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
5120         a loop and may leave it, reset the barrier; fixes #74974.
5121
5122 2005-05-16  Raja R Harinath  <rharinath@novell.com>
5123
5124         Fix test-382.cs.  Emit values of decimal constants.
5125         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
5126         Carved out of ...
5127         (TypeContainer.AddField): ... this.
5128         (TypeContainer.EmitFieldInitializers): Allow the list of fields
5129         with initializers to include 'Const's.
5130         (ClassPart.RegisterFieldForInitialization): Forward to
5131         PartialContainer.
5132         * const.cs (Const.Const): Pass initializer to base class.
5133         (Const.Define): In case of decimal constants, register them for
5134         initialization in a static constructor.
5135
5136 2005-05-14  Martin Baulig  <martin@ximian.com>
5137
5138         * statement.cs (Block.Resolve): Correctly handle unreachable code;
5139         do not call ResolveUnreachable() on unreachable statements in
5140         here, see the comment in the source code.
5141
5142 2005-05-13  Raja R Harinath  <rharinath@novell.com>
5143
5144         Fix #74934.
5145         * expression.cs (BinaryResolveOperator): If one of the operands of
5146         an equality comparison is 'null' and the other is a pointer type,
5147         convert the null to a NullPointer.
5148         * convert.cs (ImplicitReferenceConversion): If the expression is a
5149         NullLiteral and the target type is a pointer type, return a
5150         NullPointer instead.
5151         (ImplicitConversionStandard): Likewise.
5152
5153 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
5154         
5155         * cs-parser.jay: Set readonly context based on special constructs.
5156         
5157         * expression.cs (LocalVariableReference.DoResolveBase): Improved
5158         readonly variable error handling.
5159         
5160         * rootcontext.cs (EmitCode): Don't verify members when error
5161         occurred.
5162         
5163         * statement.cs (LocalInfo): Add reaodnly context information.
5164         (SetReadOnlyContext, GetReadOnlyContext): New methods.
5165
5166 2005-05-17  Martin Baulig  <martin@ximian.com>
5167
5168         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
5169         #70970. 
5170
5171 2005-05-13  Martin Baulig  <martin@ximian.com>
5172
5173         * statement.cs (Block.Resolve, ResolveUnreachable): Correctly
5174         handle unreachable blocks.
5175
5176 2005-05-13  Martin Baulig  <martin@ximian.com>
5177
5178         * class.cs
5179         (ConstructorInitializer.GetOverloadedConstructor): Don't crash.
5180         (MethodCore.CheckCore): Use TypeManager.IsEqual(); fix #74904 and
5181         #74905. 
5182
5183 2005-05-13  Martin Baulig  <martin@ximian.com>
5184
5185         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
5186         instance variable, not a local.  Fix #74873.
5187         (Block.ResolveUnreachable): Set it to true here.
5188
5189 2005-05-12  Martin Baulig  <martin@ximian.com>
5190
5191         * cs-parser.jay (property_declaration): Pass the `current_class',
5192         not the `current_container' to Property's .ctor.  Fixes #74912.
5193
5194 2005-05-11  Martin Baulig  <martin@ximian.com>
5195
5196         * typemanager.cs (Closure): Copy this from MCS and merge all the
5197         GMCS-specific changes into it.
5198
5199 2005-05-12  Raja R Harinath  <harinath@gmail.com>
5200
5201         Fix #74920.
5202         * typemanager.cs (unmanaged_enclosing_types): New.
5203         (IsUnmanagedType): Avoid infloops by using
5204         'unmanaged_enclosing_types' to talk with recursive invocations.
5205
5206 2005-05-11  Duncan Mak  <duncan@novell.com>
5207
5208         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
5209         continuing to process for 'arg'.
5210         (handle_preprocessing_directive): Check the argument of the #endif
5211         directive and report error CS1025 if there are any trailing
5212         characters.
5213
5214         According to the C# spec, having even whitespace after the #endif
5215         directive is illegal; however, because we call arg.TrimEnd ()
5216         beforehand, we have the same behavior as csc, allowing whitespace
5217         after the directive.
5218
5219         Fixes #74892.
5220
5221 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
5222
5223         Fix #74863.
5224         
5225         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
5226         (Constructor.GetObsoleteAttribute): Implemented correctly.
5227
5228 2005-05-10  Martin Baulig  <martin@ximian.com>
5229
5230         * generic.cs (Constraints.Resolve): Report CS0246 if we cannot
5231         resolve the type; fixes #74864.
5232         (DefaultValueExpression): Create the LocalTemporary in Emit(), not
5233         in DoResolve(); fixes #74862.
5234
5235 2005-05-10  Martin Baulig  <martin@ximian.com>
5236
5237         * support.cs (ReflectionParameters.ParameterModifier): Use
5238         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
5239         and `ParameterAttributes.In'.  Fixes #74884.
5240
5241 2005-05-10  Martin Baulig  <martin@ximian.com>
5242
5243         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Don't use
5244         the cache if we're just looking for `MemberTypes.NestedType' in a
5245         generic instance.
5246
5247         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
5248         constraints if we're still resolving the type tree.
5249         (Expression.MemberLookup): If we're resolving the type tree, only
5250         look for `MemberTypes.NestedType' since we're only interested in
5251         getting types.
5252
5253         * class.cs (TypeContainer.DefineType): Don't resolve the type
5254         parameters here; do this later in ResolveType() after the type
5255         tree has been resolved.
5256         (TypeContainer.ResolveType): New public method; this is called
5257         after the type tree is resolved and before the types are being
5258         populated.  We resolve the generic constraints here.
5259         (TypeContainer.DoDefineMember): Check the constraints on our base
5260         class and interfaces.
5261
5262         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Make this protected;
5263         set the `ResolvingTypeTree' flag on the EmitContext.
5264
5265         * codegen.cs (EmitContext.ResolvingTypeTree): New public field.
5266
5267 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
5268
5269         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
5270         
5271         * expression.cs (Argument.GetParameterModifier): Turned to property.
5272         (Invocation.Error_InvalidArguments): Add more descriptive errors.
5273         
5274         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
5275         its C# equivalent.
5276         
5277 2005-05-09  Raja R Harinath  <rharinath@novell.com>
5278
5279         Fix #74852.
5280         * decl.cs (MemberCache.AddMethods): Register override methods,
5281         rather than non-override methods.
5282         * typemanager.cs (RegisterOverride): New.
5283         (IsOverride): Update.
5284
5285 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
5286
5287         * typemanager.cs (TypeManager): Moved InitGenerics to Reset method.
5288
5289 2005-05-06  Martin Baulig  <martin@ximian.com>
5290
5291         * attribute.cs
5292         (Attributable.IsClsComplianceRequired): Fix typo in the method name.
5293         (AttributeTester.AnalyzeTypeCompliance): Add generics support.
5294
5295 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
5296
5297         Fix #73105.
5298         
5299         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
5300         recursive declaration.
5301         
5302         * statement.cs (Block.ResolveMeta): Report any error in resolving.
5303         
5304 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
5305
5306         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
5307         
5308         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
5309
5310 2005-05-05  Raja R Harinath  <rharinath@novell.com>
5311
5312         Fix #74797.
5313         * decl.cs (DeclSpace.FamilyAccessible): 
5314         Use TypeManager.IsNestedFamilyAccessible.
5315
5316         Fix reopened #64812.
5317         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
5318         internal'.
5319
5320 2005-05-04  Raja R Harinath  <rharinath@novell.com>
5321             Abin Thomas  <projectmonokochi@rediffmail.com>
5322             Anoob V E  <projectmonokochi@rediffmail.com>
5323             Harilal P R  <projectmonokochi@rediffmail.com>
5324
5325         Fix #64812.
5326         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
5327         allow access to all static members.
5328
5329 2005-05-04  Martin Baulig  <martin@ximian.com>
5330
5331         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
5332
5333 2005-05-04  Martin Baulig  <martin@ximian.com>
5334
5335         Fix #74655.
5336
5337         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
5338         section at the end; make things work if `default' is not the last
5339         section.        
5340
5341 2005-05-04  Martin Baulig  <martin@ximian.com>
5342
5343         Fix #70400.
5344
5345         * statement.cs (Switch): Replaced the `got_default' field with a
5346         `default_section' one.
5347         (Switch.CheckSwitch): Set `default_section' here.
5348         (Switch.Resolve): If we're a constant switch and the constant is
5349         not found, use the default section.
5350
5351 2005-05-03  Martin Baulig  <martin@ximian.com>
5352
5353         * expression.cs (ArrayAccess.EmitGetLength): New public method.
5354
5355         * statement.cs (Foreach.ArrayForeach): New nested class.
5356         (Foreach.TemporaryVariable): New nested class.
5357         (Foreach.EmitArrayForeach): Removed; this is now in the new
5358         ArrayForeach class.
5359
5360 2005-05-03  Raja R Harinath  <rharinath@novell.com>
5361
5362         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
5363         more conservative.
5364         (VerifyPendingMethods): Revert change below.
5365
5366         * typemanager.cs (IsOverride, RegisterNonOverride): New.
5367         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
5368         that used to trigger warning -28.  Remove warning -28.
5369         * expression.cs (Invocation.OverloadResolve): Use
5370         TypeManager.IsOverride to distinguish override methods.
5371
5372         Fix #74773.
5373         * pending.cs (VerifyPendingMethods): If a base type implements the
5374         requested interface, don't bother checking individual methods of
5375         the base type.  As a side-effect, this prevents the creation of
5376         unnecessary proxies.
5377
5378 2005-05-02  Martin Baulig  <martin@ximian.com>
5379
5380         Fix #70182.
5381
5382         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
5383         Also `And' the locals if the old vector is null.
5384         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
5385         null; in this case we basically reset all the variables.        
5386
5387 2005-05-02  Martin Baulig  <martin@ximian.com>
5388
5389         Fix #74529.
5390
5391         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
5392         Added `FlowBranching branching' argument; always `and' the
5393         variables instead of `or'ing them unless we're an infinite loop.
5394
5395         * statement.cs (While.Resolve): Create a new sibling unless we're
5396         infinite.       
5397
5398 2005-05-02  Martin Baulig  <martin@ximian.com>
5399
5400         Fix #70140.
5401
5402         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
5403         arguments; use it instead of creating a new TopLevelBlock.
5404         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
5405         our ConstructorInitializer.
5406
5407         * statement.cs
5408         (TopLevelBlock.TopLevelBranching): New public property.
5409         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
5410         and create our `TopLevelBranching'.
5411
5412         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
5413         anonymous method host, use `block.TopLevelBranching' rather than
5414         creating a new branching.
5415
5416 2005-04-20  Miguel de Icaza  <miguel@novell.com>
5417
5418         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
5419         a ScopeInfo, if any of the current children is a child of the new
5420         entry, move those children there.
5421
5422 2005-04-30  Martin Baulig  <martin@ximian.com>
5423
5424         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
5425         at the beginning of a SwitchSection.  Fix #73335.
5426
5427 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
5428
5429         Fix #74378
5430         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
5431         
5432         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
5433         (FieldExpr.DoResolve): Obsolete members are ignored for field
5434         initializers.
5435         
5436 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
5437
5438         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
5439         of arrays detection.
5440
5441         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
5442         verification.
5443         (Field.VerifyClsCompliance): Volatile fields are not compliant.
5444
5445         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
5446         arrays report.
5447
5448 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
5449
5450         * cs-parser.jay: Use the prefered version of -unsafe in error
5451         message.
5452
5453 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
5454
5455         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
5456         circumstances.
5457
5458 2005-04-20  John Luke  <john.luke@gmail.com>
5459
5460         * driver.cs: fix typo in error message, --outout to --output
5461
5462 2005-04-30  Martin Baulig  <martin@ximian.com>
5463
5464         * attribute.cs (Attribute.CheckSecurityActionValidity): Correctly
5465         handle the .NET 2.x security attributes.
5466
5467 2005-04-30  Martin Baulig  <martin@ximian.com>
5468
5469         * typemanager.cs
5470         (TypeManager.ExpandInterfaces): Don't add things twice.
5471
5472         * class.cs
5473         (TypeContainer.VerifyClsCompliance): Allow generic instances.
5474
5475 2005-04-29  Martin Baulig  <martin@ximian.com>
5476
5477         * generic.cs (Constraints.ResolveTypes): Expand interfaces.
5478
5479         * anonymous.cs: Added support for anonymous generic methods.
5480
5481 2005-04-29  Martin Baulig  <martin@ximian.com>
5482
5483         * typemanager.cs (TypeManager.GetInterfaces): Correctly handle
5484         generic instances.
5485
5486 2005-04-29  Martin Baulig  <martin@ximian.com>
5487
5488         * generic.cs (TypeManager.HasConstructorConstraint): Removed.
5489
5490         * expression.cs (New.DoResolve): Fix the CS0304 check.
5491
5492 2005-04-29  Martin Baulig  <martin@ximian.com>
5493
5494         * typemanager.cs (TypeManager.GetFullName): Updated to the new
5495         naming schema.
5496
5497         * class.cs (MethodCore.IsDuplicateImplementation): If we're an
5498         explicit interface implementation, compare the interface types.
5499         (MethodData.Define): Use the new naming scheme from the latest
5500         .NET 2.x beta2.
5501         (MemberBase.DoDefineBase): Resolve `InterfaceType' here.
5502
5503         * decl.cs (MemberName.GetMemberName): Removed.
5504         (MemberName.MethodName, FullName): New properties.
5505
5506 2005-04-25  Raja R Harinath  <rharinath@novell.com>
5507
5508         * gmcs.exe.config: Update v2.0.40607 -> v2.0.50215.
5509
5510 2005-04-22  Martin Baulig  <martin@ximian.com>
5511
5512         * generic.cs (GenericMethod): Create the EmitContext in the
5513         `Define()'; in `Define(MethodBuilder)', create the type parameters
5514         before calling `Define()'.  Fixes #73933.
5515
5516 2005-04-22  Martin Baulig  <martin@ximian.com>
5517
5518         * generic.cs
5519         (Constraints.Resolve): Make things work wrt. the new type lookup system.
5520         (ConstructedType.ResolveAsTypeTerminal): Don't override this.
5521
5522         * ecore.cs (Expression.ResolveAsTypeTerminal): If `te' is a
5523         ConstructedType, check its constraints.
5524
5525 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
5526
5527         * codegen.cs (InRefOutArgumentResolving): New field.
5528         
5529         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
5530         fields outside contructor.
5531         
5532         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
5533         
5534 2005-04-19  Miguel de Icaza  <miguel@novell.com>
5535
5536         * anonymous.cs (CaptureContext.EmitParameterInstance): The
5537         parameter code was not completed ever, so it was not as up-to-date
5538         as local variables.  Must finish it.
5539
5540         The bug fix was to compare the Toplevel of the block, not the
5541         current block.  Thanks for Ben for pointing this out. 
5542
5543 2005-04-19  Raja R Harinath  <rharinath@novell.com>
5544
5545         * decl.cs (AddMethods): Use the declaring type of the problem
5546         method to determine if we want to squash a warning.
5547
5548 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
5549
5550         * attribute.cs: Removed debug output.
5551
5552         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
5553         
5554         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
5555         Report.Stderr.
5556         
5557 2005-04-18  Raja R Harinath  <rharinath@novell.com>
5558
5559         Fix #74481.
5560         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
5561         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
5562         all null comparisons against reference types.
5563
5564 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
5565
5566         Fix# 74565
5567         * class.cs (TypeContainer.CircularDepException) New nested
5568         exception class.
5569         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
5570         (TypeContainer.DefineType): Removed error, reset InTransit before
5571         exit.
5572         (Class.DefineType): Throw exception when is in Transit.
5573         Catch exception and report error.
5574         (Struct.DefineType): Throw exception when is in Transit.
5575         Catch exception and report error.
5576         (Interface.DefineType): Throw exception when is in Transit.
5577         Catch exception and report error.
5578
5579         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
5580         handle nested exception handlers.
5581
5582         * flowanalysis.cs (InTryWithCatch): New method, search for try with
5583         a catch.
5584
5585         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
5586         InFinally and InCatch storage.
5587
5588         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
5589         (Catch.Resolve): Set and Restore ec.InCatch.
5590         (Try.Resolve): Set and Restore ec.InFinally.
5591         (Try.HasCatch): True when try has catch.
5592
5593 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
5594
5595         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
5596           for the same event member, so exclude such cases from warning 419.
5597           Fixed bug #74633.
5598
5599 2005-04-16  Miguel de Icaza  <miguel@novell.com>
5600
5601         * expression.cs (Binary.ResolveOperator): Apply patch from John
5602         Luke to fix bug 59864: operators &, | and ^ on enumerations
5603         require that the same enum type on both sides.
5604
5605         * driver.cs: Add warnings to old flag usage, this is to assist
5606         people who produce Makefiles and hope that the Makefiles will be
5607         used on Windows.
5608
5609         * class.cs (TypeContainer.EmitType): Moved the definition of the
5610         special $PRIVATE$ field from the resolve phase to the Emit phase.
5611         During resolve we do not know if we are a struct with
5612         HasExplicitLayout, we know this only after the attributes for the
5613         type are emitted.
5614
5615         Set the FieldOffset to zero on the dummy field that we create for
5616         the class.   Fixes 74590.
5617
5618 2005-04-16  Raja R Harinath  <rharinath@novell.com>
5619
5620         Fix #73834.
5621         * ecore.cs (PropertyExpr.resolved): New.
5622         (DoResolve): Use it to handle a case of double resolution here.
5623         Handle a case of identical-name-and-type-name.
5624         * expression.cs (ArrayCreation.CheckIndices): Avoid double
5625         resolution by storing the results of expression resolution back
5626         into the "probes" array.
5627
5628 2005-04-15  Raja R Harinath  <rharinath@novell.com>
5629
5630         Fix cs0208-7.cs and cs0208-8.cs.
5631         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
5632         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
5633         error reporting to point out the reason a struct is not unmanaged.
5634
5635 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5636
5637         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
5638           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
5639
5640 2005-04-13  Raja R Harinath  <rharinath@novell.com>
5641
5642         Fix #74528.
5643         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
5644         IdenticalNameAndTypeName here.
5645         (EventExpr.InstanceResolve): Likewise.
5646
5647 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
5648
5649         C# 2.0 DefaultCharSetAttribute implementation
5650         
5651         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
5652         which allows us to set GlobalNamespace for every resolve.
5653         (Attribute.ResolveArguments): Cut from Resolve.
5654         (Attribute.GetCharSetValue): Returns CharSet named argument.
5655         (Attribute.DefinePInvokeMethod): Gets default charset from
5656         module settings.
5657         (GlobalAttribute.ResolveAsTypeStep): Override.
5658         (GlobalAttribute.ResolveArguments): Override.
5659         
5660         * class.cs (TypeAttr): Is protected.
5661         
5662         * codegen.cs (ModuleClass.DefaultCharSet): New member.
5663         (ModuleClass.DefaultCharSetType): New memeber.
5664         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
5665         
5666         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
5667         charset from module.
5668         
5669         * delegate.cs (TypeAttr): Override.
5670         (Delegate.DefineType): Use this TypeAttr.
5671         
5672         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
5673         at very early stage (before types are defined) to resolve model
5674         module attributes. It will probably not work with corlib but it
5675         should be ok.
5676         
5677         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
5678         charset from module.
5679         
5680         * typemanager.cs (default_charset_type): New type.
5681
5682 2005-04-13  Raja R Harinath  <rharinath@novell.com>
5683
5684         * decl.cs (MemberCache.AddMethods): Don't warn if
5685         System.Object.Finalize has buggy MethodAttributes.
5686
5687         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
5688         removed below.
5689
5690 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5691
5692         * doc.cs : detect ambiguous reference to overloaded members.
5693           Fixed bug #71603. MS 1.1 csc does not detect it.
5694
5695 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5696
5697         * doc.cs : delegates must not be referenced with parameters.
5698           Fixed bug #71605.
5699
5700 2005-04-12  Miguel de Icaza  <miguel@novell.com>
5701
5702         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
5703
5704 2005-04-10  Miguel de Icaza  <miguel@novell.com>
5705
5706         * driver.cs (MainDriver): Stop processing if the CLS stage found
5707         errors. 
5708
5709         (CompilerCallableEntryPoint.InvokeCompiler): Always
5710         reset after execution;   Take a TextWriter argument for the
5711         output.
5712
5713         * report.cs: Use the error stream instead of hardcoding stderr. 
5714
5715 2005-04-09  Miguel de Icaza  <miguel@novell.com>
5716
5717         * class.cs: Reduce code paths to test, too small of an
5718         optimization to make it worth the extra testing.  Always perform
5719         it. 
5720
5721 2005-04-08  Raja R Harinath  <rharinath@novell.com>
5722
5723         Fix #74510.
5724         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
5725         operators that had errors reported on them.
5726
5727 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
5728
5729         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
5730         argument types.
5731         (Attribute.Resolve): Add named argument type checking.
5732         
5733         * class.cs (FixedField.Define): Use IsPrimitiveType
5734         
5735         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
5736         
5737         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
5738         unsafe parameter types.
5739         
5740         * statement.cs (Using.ResolveExpression): Add better error description.
5741         
5742         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
5743         
5744 2005-04-08  Raja R Harinath  <rharinath@novell.com>
5745
5746         Fix #74484.
5747         * attribute.cs (Attribute.GetAttributeUsage): Resolve
5748         AttributeUsageAttribute in the emitcontext of the attribute class,
5749         not in the emitcontext of the attributable entity it was attached to.
5750         * cs-parser.jay: Use 'current_class', not 'current_container',
5751         when creating a GlobalAttribute.
5752
5753 2005-04-08  Alp Toker  <alp@atoker.com>
5754
5755         * pending.cs: The fix to #58413 failed to compile methods implementing
5756         interfaces with/without params modifiers and vice versa, even though
5757         params modifiers aren't part of the signature. Make the modifier check
5758         less strict as in csc.
5759
5760 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
5761             Anoob V E  <projectmonokochi@rediffmail.com>
5762             Harilal P R  <projectmonokochi@rediffmail.com>
5763
5764         Fix #58413.
5765         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
5766         modifiers of pending methods.
5767         (PendingImplementation.PendingImplementation): Initialize it.
5768         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
5769         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
5770         with ParameterData.  Add check for modifiers.
5771         * class.cs (MethodData.Define): Update to changes.
5772
5773 2005-04-07  Raja R Harinath  <rharinath@novell.com>
5774
5775         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
5776
5777 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
5778
5779         * class.cs (PropertyMethod.Define): Check private accessor in abstract
5780         property.
5781         
5782         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
5783         
5784         * rootcontext.cs,
5785         * typemanager.cs: Registered RequiredAttributeAttribute.
5786         
5787 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
5788
5789         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
5790         Warning CS0169 is back at level 3.
5791         (IMethodData.SetMemberIsUsed): New method.
5792         
5793         * decl.cs (IsUsed): New value; moved from FieldBase.Status
5794         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
5795         
5796         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
5797
5798         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
5799         contants.
5800         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
5801         is used.
5802         
5803         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
5804         is used.
5805         
5806         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
5807         to avoid the problems with nested types.
5808
5809 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
5810             Anoob V.E  <projectmonokochi@rediffmail.com>
5811             Harilal P.R  <projectmonokochi@rediffmail.com>
5812             Raja R Harinath  <rharinath@novell.com>
5813
5814         Fix #73820.
5815         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
5816         attribute.
5817         * typemanager (GetConstructor): Make public.
5818
5819 2005-04-05  John Luke  <john.luke@gmail.com>
5820             Raja R Harinath  <rharinath@novell.com>
5821
5822         Fix #62232.
5823         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
5824         struct too.  Return false quicker in a few cases.
5825         (VerifyUnManaged): Use it.
5826
5827 2005-04-05  Raja R Harinath  <rharinath@novell.com>
5828
5829         Fix #74041.
5830         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
5831         not 'unreachable_seen'.
5832
5833 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
5834
5835         * attribute.cs (Attribute.GetValue): Removed unused.
5836         
5837         * codegen.cs (CodeGen.TrimExt): Removed unused.
5838         
5839         * cs-parser.jay (output): Removed unused.
5840         
5841         * cs-tokenizer.cs (hex_digits): Removed unused.
5842         
5843         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
5844         
5845         * expression.cs (Indirection.LoadExprValue): Removed unused.
5846         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
5847         
5848         * iterators.cs (Iterator.param_types): Removed unused.
5849         
5850         * statement.cs (Goto.block): Removed unused.
5851         (ToplevelBlock.did): Removed unused.
5852         (Switch.ResolveConstantSwitch): Removed unused.
5853
5854 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
5855
5856         * rootcontext.cs: Allow mcs to bootstrap with the compilation
5857         resetting thingy.
5858
5859 2005-04-19  Martin Baulig  <martin@ximian.com>
5860
5861         Merged r42462 from MCS and made it work for GMCS.
5862
5863         * class.cs (MethodCore.ds): Moved this field to `MemberBase'.
5864
5865         * generic.cs (GenericMethod.Define): Removed `return_type' argument.
5866
5867 2005-04-01  Raja R Harinath  <rharinath@novell.com>
5868
5869         Fix #74232 and cs0208-3.cs.
5870         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
5871         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
5872         unmanaged type.  Don't use FieldBuilders when 't' is a
5873         TypeBuilder.  Use ModFlags and MemberType fields.
5874         * class.cs (MemberBase.member_type): Rename from MemberType.
5875         (MemberBase.MemberType): New property.  Determines member_type on
5876         demand.
5877         (MemberBase.DoDefine): Don't initialize MemberType here.
5878         (FieldMember.Define): Likewise.
5879
5880 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
5881
5882         Fix #74241
5883         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
5884         Attributes are emitted there.
5885         
5886 2005-04-01  Raja R Harinath  <rharinath@novell.com>
5887
5888         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
5889         keyword in 'partial enum' too.
5890         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
5891         is not allowed).
5892         Report from Kamil Skalski <nazgul@omega.pl>.
5893
5894         Fix #74309.
5895         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
5896         have partial containers too.
5897
5898         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
5899         in block' checks to Block.CheckInvariantMeaningInBlock.
5900         * statement.cs (Block.GetKnownVariableInfo): Make private.
5901         (Block.IsVariableUsedInChildBlock): Remove.
5902         (Block.IsVariableUsedInBlock): Likewise.
5903         (Block.CheckInvariantMeaningInBlock): New.  Show location of
5904         conflicting declaration.
5905         (Block.AddVariable): Make error messages less long-winded and more
5906         specific.  Show location of conflicting declaration.
5907         * parameter.cs (Parameters.Location): New readonly property.
5908
5909 2005-03-31  Raja R Harinath  <rharinath@novell.com>
5910
5911         Clean up semantics of invoking ResolveMemberAccess.
5912         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
5913         can have an instance, ensure that we pass in a non-TypeExpression
5914         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
5915         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
5916         argument.  Update to changes and simplify.
5917         (FieldExpr.Emitinstance): Remove CS0120 check.
5918         (PropertyExpr.EmitInstance): Likewise.
5919         * expression.cs (Argument.Resolve): Likewise.
5920         (Invocation.DoResolve): Update to changes in semantics of
5921         InstanceExpression.
5922
5923 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
5924
5925         Fix #74241
5926         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
5927         customization.
5928         
5929         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
5930
5931 2005-03-31  Raja R Harinath  <rharinath@novell.com>
5932
5933         Fix difference in behaviour with commandline invocation.
5934         * driver.cs (Driver.Reset): New.
5935         (CompilerCallableEntryPoint): Call it.
5936
5937         * statement.cs (If.Resolve): Avoid spurious "uninitialized
5938         variable" warnings if the boolean expression failed to resolve.
5939
5940 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
5941
5942         * attribute.cs: Fix the union of several permissions when some of them
5943         are unrestricted (so the result isn't an unrestricted permission set).
5944         Fix #74036.
5945
5946 2005-03-30  Raja R Harinath  <rharinath@novell.com>
5947
5948         * ecore.cs (MemberExpr): New class.  Convert from interface
5949         IMemberExpr.
5950         (MemberExpr.ResolveMemberAccess): Refactor and move here from
5951         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
5952         error checks.
5953         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
5954         (MethodGroupExpr.IsExplicitImpl): Remove.
5955         (Expression.GetFieldFromEvent): Remove.
5956         (SimpleName.MemberStaticCheck): Remove.
5957         (SimpleName.DoSimpleNameResolve): Update to changes.
5958         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
5959         (MemberAccess.IdenticalNameAndTypeName): Remove.
5960         (MemberAccess.error176): Move to MemberExpr.
5961         (MemberAccess.DoResolve): Update to changes.
5962         (BaseAccess.DoResolve): Likewise.
5963
5964 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
5965
5966         C# 2.0 Conditional attribute class implementation
5967         
5968         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
5969         Analyzes class whether it has attribute which has ConditionalAttribute
5970         and its condition is not defined.
5971         
5972         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
5973         (Class.IsExcluded): New method. Search for at least one defined
5974         condition in ConditionalAttribute of attribute class.
5975
5976 2005-03-30  Raja R Harinath  <rharinath@novell.com>
5977
5978         * ecore.cs (PropertyExpr): Derive from Expression, not
5979         ExpressionStatement.
5980         (PropertyExpr.EmitStatement): Remove.
5981
5982 2005-03-29  Raja R Harinath  <rharinath@novell.com>
5983
5984         Fix #74060.
5985         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
5986         internal field "value__" of an enum be private.  The examples for
5987         "value__" that I found on MSDN all used FieldAttributes.Private.
5988
5989         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
5990         Don't mention IL method attribute names.
5991
5992         Fix #47991.  Remove a TODO.
5993         * statement.cs (Block.Toplevel): Make into a field.
5994         (Block.Parameters): Move into ToplevelBlock.
5995         (Block.known_variables): Rename from child_variable_names.
5996         (Block.Block): Remove variants that take Parameters.  Initialize
5997         'Toplevel' with the immediately surrounding toplevel block.
5998         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
5999         LocalInfo parameter.
6000         (Block.GetKnownVariableInfo): New.
6001         (Block.IsVariableNameUsedInChildBlock): Update.
6002         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
6003         the block, even though it may not be in scope.
6004         (Block.AddVariable): Remove Parameters parameter.  Use
6005         Toplevel.Parameters instead.
6006         (Block.AddConstant): Remove Parameters parameter.
6007         (Block.GetParameterReference): Update to use Toplevel.Parameters.
6008         (Block.IsParamaterReference): Likewise.
6009         (Block.IsLocalParameter): Likewise.  Simplify a lot.
6010         (ToplevelBlock.Parameters): New.  Moved from Block.
6011         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
6012         initialize Parameters to a non-null value.
6013         * cs-parser.jay: Update to changes.
6014         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
6015         simple names that mean different things in the same block.  Use
6016         Block.IsVariableNameUsedInBlock.
6017
6018 2005-03-28  Raja R Harinath  <rharinath@novell.com>
6019
6020         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
6021
6022 2005-03-26  Raja R Harinath  <harinath@acm.org>
6023
6024         Fix #73038.
6025         * assign.cs (Assign.DoResolve): When the RHS of an assignment
6026         fails to resolve, ensure that the LHS is still resolved as an
6027         lvalue.
6028
6029 2005-03-25  Raja R Harinath  <harinath@acm.org>
6030
6031         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
6032         ec.ContainerType.
6033         (Enum.current_ec): Remove.
6034         (Enum.LookupEnumValue): Remove EmitContext argument.
6035         Just uses the one created during DefineType.
6036         (Enum.FindMembers): Update.
6037         * expression.cs (MemberAccess.DoResolve): Update.
6038
6039 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
6040
6041         * assign.cs (Assign.DoResolve): Check for CS1717 when
6042         source and target are same (uses Equals).
6043
6044         * expression.cs (LocalVariableReference, ParameterReference,
6045         This): Implemented Equals, GetHashCode.
6046
6047         * statement.cs (Block.GetParameterReference): Removed useless
6048         local variable.
6049
6050 2005-03-22  Raja R Harinath  <rharinath@novell.com>
6051
6052         Fix cs0128.cs
6053         * statement.cs (Block.AddVariable): Ensure that we skip implicit
6054         blocks before deciding whether the error is cs0136 or cs0128.
6055
6056         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
6057         (using_alias_directive, using_namespace_directive): Pass
6058         MemberName, not an expression to Namespace.UsingAlias and
6059         Namespace.Using.
6060         (MakeName): Use the MemberName of the namespace.
6061         * namespace.cs (Namespace.MemberName): New.
6062         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
6063         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
6064         Likewise.
6065         * decl.cs (MemberName.Name): Make readonly.
6066         (MemberName.FromDotted): New "constructor".
6067         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
6068         (MemberCore.Name): Compute from MemberName on demand.
6069         (MemberCore.SetMemberName): Provide a way to change the
6070         MemberName.
6071         (MemberCore.AddToContainer): Don't take a fullname parameter.
6072         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
6073         fully qualified name of the container to the member name.
6074         (TypeContainer.AddToTypeContainer): Use a fully qualified name
6075         only if the type is a member of the root container.
6076         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
6077         MemberName.Left rather than searching for an embedded ".".
6078         (PartialContainer.CreatePart): Update to changes in RootContext.
6079         (MemberBase.ShortName): Turn into a property.  Use
6080         MemberCore.SetMemberName.
6081         (MemberBase.ExplicitInterfaceName): Remove.
6082         (MemberBase.UpdateMemberName): Remove.
6083         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
6084         (PropertyBase.SetMemberName): New override.
6085         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
6086         (Tree.GetDecl): New.
6087         (Tree.AllDecls): Rename from Decls.
6088         * attribute.cs, enum.cs, report.cs: Update to changes.
6089         * driver.cs (MainDriver): Use MemberName.FromDotted on
6090         RootContext.MainClass.
6091
6092 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
6093
6094         * class.cs (FixedField.Define): Check for CS1664 and more sanity
6095         checks.
6096
6097         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
6098
6099 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
6100
6101         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
6102         property accessor modifiers.
6103
6104         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
6105         fixed buffer attribute (CS1716).
6106         (PropertyMethod.HasCustomAccessModifier): When property accessor
6107         has custom modifier.
6108
6109         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
6110         modifiers.
6111         (PropertyExpr.DoResolveLValue): Add CS0272.
6112
6113 2005-03-17  Miguel de Icaza  <miguel@novell.com>
6114
6115         * convert.cs: When converting to a pointer, use the proper Conv.U
6116         or Conv.I depending on the source data type.
6117
6118         * cs-tokenizer.cs: Make the size for large decimal constants,
6119         fixes #72957.
6120
6121 2005-03-17  Martin Baulig  <martin@ximian.com>
6122
6123         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
6124         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
6125
6126 2005-03-17  Martin Baulig  <martin@ximian.com>
6127
6128         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
6129         to bool so we can return an error condition.
6130         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
6131         returned an error.
6132
6133 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
6134
6135         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
6136         attributes.
6137
6138 2005-03-16  Raja R Harinath  <rharinath@novell.com>
6139
6140         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
6141         Refactor to avoid traversing the list of assemblies, and to avoid
6142         string concatenation.
6143         * typemanager.cs (guid_attr_type): Remove.
6144         (negative_hits, pointers, references): Remove hashes.
6145         (type_hash): New.
6146         (GetConstructedType): New.  Uses type_hash to handle constructed
6147         types (arrays, references, pointers).
6148         (GetReferenceType, GetPointerType): Use it.
6149         (GetNestedType): New.  Uses type_hash to handle nested types of
6150         reflected types.
6151         (LookupType, LookupTypeDirect): Remove.
6152         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
6153         'types' hash and LookupTypeReflection directly.
6154         (params_string, params_object): Use GetConstructedType.
6155         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
6156         top-level types.
6157         (Namespace.Lookup): Use cached_types.
6158         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
6159         provided by old TypeManager.LookupType.
6160         * rootcontext.cs (MakeFQN): Remove.
6161         * decl.cs (DeclSpace.MakeFQN): Likewise.
6162         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
6163         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
6164         TypeManager.GetConstructedType.
6165         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
6166
6167 2005-04-16  Zoltan Varga  <vargaz@freemail.hu>
6168
6169         * cs-parser.jay: Fix build.
6170
6171 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
6172
6173         * class.cs (TypeContainer.CircularDepException) New nested
6174         (MethodCore.CheckBase): Report CS1715 for properties and indexers.
6175
6176         * cs-parser.jay: Reports CS1527 for any namespace element.
6177
6178         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
6179         Added CS0407.
6180
6181         * expression.cs (ParameterReference.IsAssigned): Changed error to
6182         CS0269.
6183         (Error_WrongNumArguments): Moved CS0245 detection here.
6184
6185         * statement.cs (Return.Resolve): Add CS1622 report.
6186
6187 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
6188
6189         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
6190
6191 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
6192
6193         * attribute.cs expression.cs: Get rid of some allocations.
6194
6195 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
6196
6197         * doc.cs : just eliminate the latest change.
6198
6199 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6200
6201         * doc.cs : commented out the latest change. It breaks xml-030.cs
6202
6203 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6204
6205         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
6206           fail. So invoke CreateType() in FindDocumentedType().
6207
6208 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6209
6210         * cs-tokenizer.cs : added IsKeyword().
6211         * doc.cs : Detect keyword incorrectly used as identifier.
6212           Allow identifiers prefixed by @.
6213
6214 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
6215
6216         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
6217         It caused exception in namespace resolving (again!).
6218         
6219         * class.cs (Class.ctor): Removed exit.
6220         (PropertyMethod.ctor): ditto.
6221         
6222         * codegen.cs (Codegen.Reset): Reset static data.
6223         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
6224         
6225         * cs-tokenizer.cs (Cleanup): Removed.
6226         
6227         * driver.cs (GetSystemDir): Rewrote to one line command.
6228         It caused problem with unloaded dynamic modules.
6229         (UnixParseOption): Removed Exit.
6230         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
6231         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
6232         Now can be mcs used as library.
6233         
6234         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
6235         empty location.
6236         
6237         * location.cs (Reset): Reset static data.
6238         
6239         * namespace.cs (Reset): Reset static data.
6240         
6241         * report.cs (Report.Reset): Reset static data.
6242         
6243         * rootcontext.cs (RootContext.Reset): Reset static data.
6244         
6245         * tree.cs (RootTypes.ctor): Use Location.Null
6246         
6247         * typemanager.cs (TypeManager.Reset): Reset static data.
6248         (CoreLookupType): Removed Exit.
6249         (TypeHandle.Reset): Reset static data.
6250         
6251 2005-03-10  Raja R Harinath  <rharinath@novell.com>
6252
6253         Fix #73516.
6254         * typemanager.cs (ComputeNamespaces): Import namespaces from
6255         referenced modules too.
6256
6257 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6258
6259         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
6260         than '.'.
6261
6262 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6263
6264         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
6265         enclosing DeclSpace.  This ensures that a name-lookup populates
6266         more caches and there are fewer 'TypeExpression's.  Carve out
6267         nested type lookup into ...
6268         (LookupNestedTypeInHierarchy): ... this.
6269
6270 2005-04-15  Martin Baulig  <martin@ximian.com>
6271
6272         Merged r41590 from MCS and make it work in the generics land.
6273
6274         * generic.cs (TypeParameter.UpdateConstraints): Removed the
6275         `check' argument.
6276
6277         * class.cs (PartialContainer.UpdateConstraints): Removed.
6278         (PartialContainer.CheckConstraints): Removed.
6279         (PartialContainer.SetParameterInfo): Store the constraints here.
6280         (PartialContainer.DefineTypeParameters): New public method;
6281         resolve the type parameter's constraints here.  Note that the
6282         PartialContainer doesn't have an EmitContext anymore, so we must
6283         do this in the ClassPart.
6284
6285 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6286
6287         Clean up a few partial-class semantics.  
6288         Fixes test-357.cs and cs1618-2.cs.
6289         * cs-parser.jay (struct_declaration): Use 'current_class' as
6290         parent of newly-created struct.  Remove call to Register ().
6291         Use 'pop_current_class' to complete handing the current struct.
6292         (interface_declaration): Likewise.
6293         (class_declaration): Likewise.
6294         (enum_declaration): Use 'current_class' as parent of newly created
6295         enum.
6296         (delegate_declaration): Likewise.
6297         (pop_current_class): New function.  This is used to handle closing
6298         up the 'current_class' and 'current_container', and pointing them
6299         to the enclosing class/container.
6300         (CSharpParser): Initialize 'current_class' too.
6301         * decl.cs (MemberCore): Add check for invariant: a partial
6302         container is not a parsed entity, and thus does not enclose any
6303         parsed members.
6304         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
6305         (DeclSpace.BaseTypeExpr): Use it.
6306         (DeclSpace.LookupType): Add check for invariant.
6307         * class.cs (TypeContainer): Add check for invariant: a nested
6308         class should have the same NamespaceEntry as its enclosing class.
6309         (TypeContainer.EmitFieldInitializers): Make virtual.
6310         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
6311         MemberCore.
6312         (TypeContainer.Register): Remove.
6313         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
6314         null.  Use TypeResolveEmitContext for resolving base types and
6315         interfaces.  Move initialization of Parts.TypeBuilder here from
6316         ...
6317         (TypeContainer.DefineNestedTypes): ... here.
6318         (PartialContainer): Take a Namespace not a NamespaceEntry.
6319         (PartialContainer.Create): Don't use Register.  Call the
6320         appropriate Add... function directly.
6321         (ClassPart): Take both the PartialContainer and the enclosing
6322         class as constructor arguments.
6323         (ClassPart.EmitFieldInitializers): Override.
6324         (ClassPart.PartFindNestedTypes): Remove.
6325         (FieldBase.GetInitializerExpression): Resolve the initializer
6326         expression in the emit context of the enclosing class.
6327         * tree.cs (RootTypes): Remove Register ().
6328         
6329 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
6330
6331         * cs-parser.jay: Removed CS0134.
6332         
6333         * driver.cs: Removed CS1901.
6334         
6335         * expression.cs (SizeOf.DoResolve): Don't report CS0233
6336         for predefined types.
6337
6338 2005-03-07  Duncan Mak  <duncan@novell.com>
6339
6340         * codegen.cs (Save):  Catch UnauthorizedAccessException as
6341         well. Fixes bug #73454.
6342
6343 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
6344
6345         * cs-tokenizer.cs (xtoken): Add CS1035.
6346         
6347         * class.cs (MethodData.Define): Add CS0683.
6348         (FieldMember.ctor): Add CS0681.
6349
6350 2005-03-07  Raja R Harinath  <rharinath@novell.com>
6351
6352         * ecore.cs (SimpleName.DoResolve): Rename from
6353         SimpleName.DoResolveAllowStatic.
6354         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
6355         Pass 'intermediate' flag to MemberStaticCheck.
6356         (SimpleName.MemberStaticCheck): Skip "static check" only in case
6357         of "intermediate" lookups via MemberAccess.
6358         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
6359         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
6360
6361 2005-03-07  Raja R Harinath  <rharinath@novell.com>
6362
6363         Fix #73394.
6364         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
6365         slipped in because of variable names that are identical to a
6366         builtin type's BCL equivalent ('string String;', 'int Int32;').
6367         (PropertyExpr.EmitInstance): Likewise.
6368
6369 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
6370
6371         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
6372         
6373         * report.cs (warning_ignore_table): Made public.
6374
6375 2005-03-04  Raja R Harinath  <rharinath@novell.com>
6376
6377         Fix #73282.
6378         * class.cs (MethodData.Emit): Pass 'container' to
6379         container.GetObsoleteAttribute instead of 'container.Parent'.
6380
6381 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
6382
6383         * cs-parser.jay: Add 1534 error test.
6384
6385         * iterators.cs (Yield.CheckContext): Add error 1629.
6386         (Iterator.ctor): Save unsafe modifier.
6387         (MoveNextMethod.DoEmit): Restore unsafe context.
6388
6389         * namespace.cs (UsingAlias): Better error message.
6390
6391 2005-03-03  Dan Winship  <danw@novell.com>
6392
6393         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
6394         the warning message [#73219]
6395
6396 2005-03-03  Raja R Harinath  <rharinath@novell.com>
6397
6398         Fix compile with MCS 1.0.0.0.
6399         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
6400         w_restore to not depend on string constant folding.
6401
6402 2005-03-03  Raja R Harinath  <rharinath@novell.com>
6403
6404         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
6405         CS0246 check to users who passed 'silent = false'.
6406         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
6407         check.
6408         (SimpleName.SimpleNameResolve): Update.
6409         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
6410         (MemberAccess.IdenticalNameAndTypeName): Update.
6411         * doc.cs (FindDocumentedTypeNonArray): Update.
6412
6413 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
6414
6415         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
6416         * parameters.cs (ComputeAndDefineParameters): Remove.
6417         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
6418         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
6419         Use GetParameterInfo.
6420
6421 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
6422
6423         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
6424
6425 2005-03-02  Raja R Harinath  <rharinath@novell.com>
6426
6427         Unify DeclSpace.LookupType and DeclSpace.FindType.
6428         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
6429         is in charge of defining nested types on demand.
6430         (DeclSpace.LookupType): Use it when the current_type is a
6431         TypeBuilder.  Use LookupTypeDirect for reflected types.
6432         (DeclSpace.FindType): Remove.
6433         (DeclSpace.LookupInterfaceOrClass): Likewise.
6434         (DeclSpace.DefineTypeAndParents): Likewise.
6435         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
6436         DeclSpace.LookupType.
6437         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
6438         * typemanager.cs (LookupType): Simplify.
6439         (AddUserType): Remove type from negative_hits.
6440         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
6441         * class.cs (TypeContainer.FindMembers): Move handling of nested
6442         types ...
6443         (TypeContainer.FindMembers_NestedTypes): ... here.
6444         (TypeContainer.FindNestedType): Implement override.
6445         (ClassPart.FindNestedType): Delegate to PartialContainer.
6446         (ClassPart.PartFindNestedType): Looks up the nested types of the
6447         part alone.
6448
6449 2005-04-14  Martin Baulig  <martin@ximian.com>
6450
6451         * generic.cs (ConstructedType): Moved all the type lookup and
6452         nested class logic into SimpleName.
6453         (ConstructedType.ResolveConstructedType): Our underlying type is
6454         already fully resolved; all the type lookup stuff is in
6455         SimpleName.
6456
6457         * ecore.cs (SimpleName.ResolveAsTypeStep): Resolve nested
6458         constructed types here instead of in ConstructedType.
6459
6460         * decl.cs (MemberName.GetTypeExpression): Always create a
6461         SimpleName, not a ConstructedType.
6462         (DeclSpace.ResolveNestedType): Removed; this is now in SimpleName.
6463
6464 2005-03-02  Martin Baulig  <martin@ximian.com>
6465
6466         * class.cs (TypeContainer.DoDefineMembers): We also need a default
6467         static constructor in static classes.
6468
6469 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
6470
6471         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
6472         sizeParamIndex is not specified.
6473
6474 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
6475
6476         Fix #73117
6477         * report.cs (WarningMessage.IsEnabled): Missing null check.
6478
6479 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6480
6481         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
6482         in the fields and not in the properties.
6483
6484 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
6485
6486         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
6487         fields as well.
6488
6489 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6490
6491         * attribute.cs: Small refactoring (improved robustness).
6492         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
6493         (ValidateGuid): Removed.
6494         (Resolve): Removed referenced to above mentioned.
6495         (GetAttributeUsage): Made private and changed to work without
6496         class assistance.
6497         (GetIndexerAttributeValue): Don't crash.
6498         (GetConditionalAttributeValue): Ditto.
6499         (GetClsCompliantAttributeValue): Ditto.
6500         (ExtractSecurityPermissionSet): All attributes exceptions are
6501         error 648.
6502         (GetPropertyValue): New helper.
6503         (GetMethodImplOptions): New method.
6504         (DefinePInvokeMethod): Reuse common code. Implemented handling of
6505         some missing properties.
6506         
6507         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
6508         (Method.ApplyAttributeBuilder): Updated.
6509         
6510         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
6511         exception.
6512
6513 2005-02-28  Raja R Harinath  <rharinath@novell.com>
6514
6515         Fix #73052.
6516         * report.cs (Report.SymbolRelatedToPreviousError): Handle
6517         non-simple types (array, pointer, reference).
6518
6519 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6520
6521         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
6522
6523         * class.cs (MethodCore.IsDuplicateImplementation): Special error
6524         for operators.
6525         (Method.CheckBase): Catch wrong destructor here.
6526         (MethodData.Define): Add errors 550, 668.
6527
6528         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
6529
6530         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
6531
6532         * pending.cs (VerifyPendingMethods): Add error 551.
6533
6534         * typemanager.cs (CSharpName): Next error report helper.
6535
6536 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
6537
6538         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
6539         attributes. Removed useless attribute double check.
6540         It saves almost 2MBs for corlib.
6541
6542 2005-02-25  Raja R Harinath  <rharinath@novell.com>
6543
6544         Fix #72924.
6545         * statement.cs (ExpressionStatement.Resolve): Make robust to being
6546         called twice in case of error.
6547
6548 2005-02-23  Chris Toshok  <toshok@ximian.com>
6549
6550         Fix compiler portions of #72827.
6551         * statement.cs (Block.Emit): call Begin/EndScope on the
6552         EmitContext instead of the ILGenerator.
6553
6554         * codegen.cs (EmitContext.BeginScope): new method, call
6555         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
6556         we have one.)
6557         (EmitContext.BeginScope): same, but EndScope and CloseScope
6558
6559         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
6560         offset and call the superclass's OpenScope(int) with it.
6561         (SymbolWriter.CloseScope): get the current il
6562         offset and call superclass's CloseScope(int) with it.
6563
6564 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
6565
6566         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
6567         CS1677 for out and ref as well.
6568
6569         * class.cs (Method.Define): Add error CS1599 detection.
6570         
6571         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
6572         
6573         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
6574         
6575         * delegate.cs (Delegate.Define): Add error CS1599 detection.
6576         
6577         * support.cs.cs (ModifierDesc): New helper method.
6578
6579 2005-02-23  Raja R Harinath  <rharinath@novell.com>
6580             Abin Thomas  <projectmonokochi@rediffmail.com>
6581             Anoob V E  <projectmonokochi@rediffmail.com>
6582             Harilal P R  <projectmonokochi@rediffmail.com>
6583
6584         Fix #57851, #72718.
6585         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
6586         MemberLookup (used for error reporting) actually returns a result.
6587         Fix error report number (122, not 112).
6588
6589 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
6590             Anoob V E  <projectmonokochi@rediffmail.com>
6591             Harilal P R  <projectmonokochi@rediffmail.com>
6592
6593         Fix #71134.
6594         * pending.cs (PendingImplementation.GetAbstractMethods):
6595         Find NonPublic members too.
6596
6597 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
6598
6599         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
6600         Fixed error 217.
6601         
6602         * class.cs (MethodCore.CheckMethodAgainstBase):
6603         Add error 239 report.
6604
6605 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6606
6607         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
6608         
6609         * class.cs (Operator.Define): Add error 217 report.
6610         
6611 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6612
6613         Fix #68955.
6614         * expression.cs (Invocation.IsApplicable): Make public.
6615         (Invocation.IsParamsMethodApplicable): Likewise.
6616         * delegate.cs (Delegate.VerifyApplicability): Don't use
6617         Invocation.VerifyArgumentCompat for parameter applicability
6618         testing.  Use Invocation.IsApplicable and
6619         Invocation.IsParamsMethodApplicable.
6620
6621 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6622
6623         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
6624         
6625         * class.cs (Operator.Define): Add error 217 report.
6626         
6627 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6628
6629         * namespace.cs (UsingEntry.Resolve): Undo change below.
6630
6631 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6632
6633         Fix #72756.
6634         * ecore.cs (Expression.MemberLookupFailed): Add argument to
6635         disable the error message when the extended MemberLookup also
6636         fails.
6637         (Expression.MemberLookupFinal): Update.
6638         (SimpleName.DoSimpleNameResolve): Update.
6639         * expression.cs (MemberAccess.ResolveNamespaceOrType):
6640         Don't use MemberLookupFinal.
6641         (New.DoResolve): Update.
6642         (BaseAccess.CommonResolve): Update.
6643
6644 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6645
6646         Fix #72732.
6647         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
6648         occured previously, don't resolve again.
6649
6650 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6651
6652         Fix #69949
6653         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
6654         argument. Call ResolveAttributeUsage for unresolved.
6655         when types doesn't match ctor arguments.
6656         
6657         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
6658         for nested attribute classes.
6659         (Class.attribute_usage): Removed.
6660         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
6661         for attribute class.
6662         
6663         * ecore.cs (IsAttribute): Removed.
6664         
6665         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
6666         
6667         * rootcontext.cs (RegisterAttribute): Removed, attributes are
6668         now normal types.
6669         (attribute_types): Removed.
6670         (EmitCode): Global attributes are emited as the latest.
6671
6672 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
6673
6674         * class.cs (EmitFieldInitializers): Don't emit field initializer
6675         for default values when optimilization is on.
6676         
6677         * constant.cs (Constant.IsDefaultValue): New property.
6678         
6679         * driver.cs: Add /optimize handling.
6680         
6681         * constant.cs,
6682         * ecore.cs,
6683         * literal.cs: Implement new IsDefaultValue property.
6684         
6685         * rootcontext.cs (Optimize): New field, holds /optimize option.
6686
6687 2005-02-18  Raja R Harinath  <rharinath@novell.com>
6688
6689         Fix crasher in re-opened #72347.
6690         * namespace.cs (Namespace.Lookup): Return null if
6691         DeclSpace.DefineType returns null.
6692
6693         Fix #72678.
6694         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
6695
6696 2005-02-18  Raja R Harinath  <rharinath@novell.com>
6697
6698         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
6699         now returns null if it cannot resolve to an lvalue.
6700         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
6701         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
6702         returned null.  Remove check for SimpleName.
6703         (EventExpr.DoResolveLValue): New.
6704         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
6705         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
6706         error from ...
6707         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
6708         avoid CS0131 error.
6709         (Unary.ResolveOperator): Move CS0211 check ...
6710         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
6711         CS0131 error.
6712         (Unary.DoResolveLValue): Simplify.
6713         (AddressOf.DoResolveLValue): New.
6714         (ArrayAccess.DoResolveLValue): New.
6715
6716 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
6717
6718         * attribute.cs (Attribute.Resolve): Add arguments casting for
6719         when types doesn't match ctor arguments.
6720
6721 2005-02-16  Raja R Harinath  <rharinath@novell.com>
6722
6723         Fix parts of #63202.
6724         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
6725         lookup of operator in base type.  Ensure that all checks happen
6726         when the operator resolves to an "op_..." method.
6727
6728 2005-02-15  Raja R Harinath  <rharinath@novell.com>
6729
6730         Fix #71992.
6731         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
6732         'ignore_cs0104' parameter.  Pass it to ...
6733         (NamespaceEntry.Lookup): ... this.
6734         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
6735         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
6736         (TypeLookupExpression.DoResolveAsTypeStep): Update.
6737         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
6738         Update.  Request that cs0104 errors be ignored.
6739         (ComposedCast.ResolveAsTypeStep): Update.
6740
6741 2005-02-14  Raja R Harinath  <rharinath@novell.com>
6742
6743         Fix #59209.
6744         * expression.cs (Invocation.BetterFunction): Remove support for
6745         comparing virtual functions and their overrides.
6746         (Invocation.IsOverride): New.
6747         (Invocation.OverloadResolve): Don't consider 'override' functions
6748         during candidate selection.  Store them in a lookaside list.
6749         If the selected method is a 'virtual' function, use the list to
6750         find any overrides that are closer to the LHS type.
6751
6752 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
6753
6754         * expression.cs (New.DoResolve): Add complex core type reduction.
6755         (New.Constantify): Converts complex core type syntax like 'new int ()'
6756         to simple constant.
6757         
6758 2005-02-14  Raja R Harinath  <rharinath@novell.com>
6759
6760         * decl.cs (EntryType.EntryType): New constructor to create an
6761         updated copy of a cache entry.
6762         (MemberCache.AddMethods): Use it.
6763         (MemberCache.ClearDeclaredOnly): Remove.
6764         (MemberCache.MemberCache): Update.
6765
6766 2005-02-11  Miguel de Icaza  <miguel@novell.com>
6767
6768         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
6769         variable.  This one is represents the actual low-level declaration
6770         of the method, as opposed to the semantic level `IsStatic'.   
6771
6772         An anonymous method which is hosted into a static method might be
6773         actually an instance method.  IsStatic would reflect the
6774         container, while MethodIsStatic represents the actual code
6775         generated.
6776
6777         * expression.cs (ParameterReference): Use the new MethodIsStatic
6778         instead of IsStatic.
6779
6780         * anonymous.cs (AnonymousMethod.Compatible): Pass the
6781         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
6782         set on the current EmitContext. 
6783
6784         * expression.cs (Cast): Overload DoResolveLValue so we can pass
6785         resolve our casted expression as an LValue.  This triggers the
6786         proper LValue processing that is later required by Assign.
6787
6788         This fixes 72347.
6789
6790         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
6791
6792 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
6793
6794         C# 2.0 Fixed buffer implementation
6795
6796         * anonymous.cs: Update after RegisterHelperClass renaming.
6797
6798         * attribute.cs (AttributeTester.fixed_buffer_cache):
6799         Cache of external fixed buffers.
6800         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
6801         implementation if field is fixed buffer else null.
6802
6803         * class.cs
6804         (TypeContainer.AddField): Accept FieldMember instead of Field.
6805         (FieldBase.IsFieldClsCompliant): Extracted code from
6806         VerifyClsCompliance descendant customization.
6807         (FixedField): New class handles fixed buffer fields.
6808         (FixedFieldExternal): Keeps information about imported fixed
6809         buffer.
6810         (IFixedField): Make access to internal or external fixed buffer
6811         same.
6812
6813         * cs-parser.jay: Add fixed buffer parsing.
6814
6815         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
6816         buffer.
6817
6818         * expression.cs (Indirection): Extended implementation to accept
6819         fixed buffer field.
6820         (PointerArithmetic.Emit): Get element from fixed buffer as well.
6821         (ElementAccess.MakePointerAccess): Get type as parameter.
6822         (DoResolve): Add fixed buffer field expression conversion.
6823         (DoResolveLValue): Ditto.
6824         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
6825         (ArrayPtr): Derives from FixedBufferPtr.
6826         (ArrayPtr.Emit): Add extra emit for array elements.
6827
6828         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
6829
6830         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
6831         for compiler generated types.
6832         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
6833
6834         * statement.cs (Fixed): Refactored to be easier add fixed buffer
6835         and consume less memory.
6836         (Fixed.Resolve): Add fixed buffer case.
6837
6838         * typemanager.cs (compiler_generated_attr_ctor,
6839         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
6840         (HasElementType): Add our own implementation to work on every
6841         runtime.
6842
6843 2005-02-11  Miguel de Icaza  <miguel@novell.com>
6844
6845         * anonymous.cs (CaptureContext): Track whether `this' has been
6846         referenced.   
6847
6848         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
6849         only captured `this' if it was implicitly done (instance
6850         methods/variables were used). 
6851
6852         * codegen.cs (EmitContext.CaptureThis): New method to flag that
6853         `this' must be captured.
6854
6855 2005-01-30  Miguel de Icaza  <miguel@novell.com>
6856  
6857         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
6858         is null it means that there has been no need to capture anything,
6859         so we just create a sibling.
6860
6861         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
6862
6863         Just a partial fix.  The other half is fairly elusive.
6864         
6865 2005-02-10  Raja R Harinath  <rharinath@novell.com>
6866
6867         Fix #52586, cs0121-4.cs.
6868         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
6869         and return a hashtable.
6870         (MemberCache.ClearDeclaredOnly): New.
6871         (MemberCache.MemberCache): Update to change.  Make a deep copy of
6872         the method_hash of a base type too.
6873         (MemberCache.AddMethods): Adapt to having a deep copy of the base
6874         type methods.  Overwrite entries with the same MethodHandle so
6875         that the ReflectedType is correct.  The process leaves in base
6876         virtual functions and their overrides as distinct entries.
6877         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
6878         matters since it was boxed in a ArrayList before.
6879         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
6880         modifier.
6881         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
6882         case of a virtual function and its override (choose the overload
6883         as better).
6884         (Invocation.OverloadResolve): Avoid 'override' members during
6885         'applicable_type' calculation.
6886
6887 2005-03-28  Raja R Harinath  <rharinath@novell.com>
6888
6889         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
6890         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
6891         GetTypeHandle.  It is possible for a reflected type to derive from
6892         a TypeBuilder (e.g., int[] derives from the TypeBuilder
6893         System.Array during mscorlib compilation).
6894         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
6895         contain a method_hash, don't create one either.  Don't create a
6896         deep copy of the base cache's method_hash.
6897         (MemberCache.SetupCache): Rename back from DeepCopy.
6898         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
6899         already initialized.  If we see an override function, add its
6900         underlying base virtual function to the member_hash too.
6901
6902 2005-02-09  Raja R Harinath  <rharinath@novell.com>
6903
6904         Combine two near-redundant caches.
6905         * typemanager.cs (method_params): Rename from method_internal_params.
6906         (TypeManager.GetParameterData): New.  Replace
6907         Invocation.GetParameterData.
6908         (TypeManager.LookupParametersByBuilder): Remove.
6909         * expression.cs (Invocation.method_parameter_cache): Remove.
6910         (Invocation.GetParameterData): Remove.
6911         Update to changes.
6912         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
6913         Update to changes.
6914
6915 2005-02-08  Raja R Harinath  <rharinath@novell.com>
6916
6917         Fix #72015.
6918         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
6919         TypeManager.multicast_delegate_type is null, resolve it by looking
6920         up "System.MulticastDelegate".
6921         * rootcontext.cs (RootContext.ResolveCore): Simplify.
6922
6923 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
6924             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
6925             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
6926
6927         Fix cs0164.cs.
6928         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
6929         (LabeledStatement.AddReference): New.  Set 'referenced'.
6930         (Goto.Resolve): Use it.
6931
6932 2005-02-05  John Luke  <john.luke@gmail.com>
6933
6934         * driver.cs: remove duplicate -doc line in Usage ()
6935
6936 2005-02-04  Raja R Harinath  <rharinath@novell.com>
6937
6938         * location.cs (Location.AddFile): Fix CS2002 error report.
6939
6940 2005-02-02  Martin Baulig  <martin@ximian.com>
6941
6942         * delegate.cs (Delegate.DefineType): Report an internal error if
6943         TypeManager.multicast_delegate_type is null.  See bug #72015 for
6944         details.        
6945
6946 2005-02-02  Raja R Harinath  <rharinath@novell.com>
6947
6948         Fix a crasher in a variant of #31984.
6949         * const.cs (Constant.CheckBase): New override that defers the
6950         new-or-override check in case the base type hasn't been populated
6951         yet.
6952         (Constant.Define): Ensure the new-or-override check is performed.
6953
6954 2005-02-01  Duncan Mak  <duncan@ximian.com>
6955
6956         * const.cs (LookupConstantValue): Check that `ce' is not null
6957         before calling GetValue ().
6958
6959 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6960
6961         Fix test-334.cs (#69519).
6962         * cs-parser.jay (using_alias_directive): Pass in an expression to
6963         NamespaceEntry.UsingAlias.
6964         (using_namespace_directive): Pass in an expression to
6965         NamespaceEntry.Using.
6966         (namespace_name): Don't flatten to a string.
6967         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
6968         (NamespaceEntry.AliasEntry.Resolve): Lookup using
6969         ResolveAsTypeStep.
6970         (NamespaceEntry.UsingEntry): Likewise.
6971         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
6972         changes.
6973         (NamespaceEntry.LookupForUsing): Remove.
6974         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
6975         names.
6976         (NamespaceEntry.Lookup): Remove support for dotted names.
6977
6978 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6979
6980         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
6981         split into two.
6982         (NamespaceEntry.ImplicitParent): Compute on demand.
6983         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
6984         parallels the current.
6985         (NamespaceEntry.LookupForUsing): Use it.
6986         (NamespaceEntry.Lookup): If the current namespace-entry is
6987         implicit, don't search aliases and using tables.
6988
6989 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6990
6991         Fix #31984.
6992         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
6993         BaseCache here.
6994         (TypeContainer.BaseCache): Compute on demand.
6995         (TypeContainer.FindMembers): Define constants and types if they're
6996         not already created.
6997         (FieldMember.Define): Move resetting of ec.InUnsafe before error
6998         check.
6999         * const.cs (Constant.Define): Make idempotent.
7000
7001 2005-01-29  Miguel de Icaza  <miguel@novell.com>
7002
7003         * pending.cs: Produce better code (no nops produced by using Ldarg
7004         + value).
7005         
7006         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
7007         i - 1' it should be arg + 1.
7008
7009         Fixes bug #71819.
7010
7011 2005-01-28  Raja R Harinath  <rharinath@novell.com>
7012
7013         * attribute.cs (Attribute.CheckAttributeType): Make private
7014         non-virtual.
7015         (Attribute.ResolveType): Make virtual.
7016         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
7017         handling of RootContext.Tree.Types.
7018
7019 2005-01-27  Raja R Harinath  <rharinath@novell.com>
7020
7021         Update attribute-handling to use the SimpleName/MemberAccess
7022         mechanisms.
7023         * cs-parser.jay (attribute): Pass in an expression to the
7024         constructors of Attribute and GlobalAttribute.
7025         * attribute.cs (Attribute): Take an expression for the name.
7026         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
7027         passed in attribute name expression.
7028         (Attribute.CheckAttributeType): Use it.
7029         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
7030         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
7031         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
7032         argument to prevent error messages if the lookup fails.
7033
7034 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
7035
7036         * expression.cs (Indirection): Implemented IVariable interface
7037         to support indirection in AddressOf operator.
7038         (PointerArithmetic.Emit): Add optimalization for case where
7039         result can be precomputed.
7040
7041 2005-01-26  Martin Baulig  <martin@ximian.com>
7042
7043         * class.cs (TypeContainer.AttributeTargets): Return the correct
7044         AttributeTargets depending on our `Kind' instead of throwing an
7045         exception; fixes #71632.
7046
7047 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
7048
7049         Fix #71257
7050         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
7051         constant members.
7052
7053 2005-03-17  Martin Baulig  <martin@ximian.com>
7054
7055         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
7056         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
7057
7058 2005-03-17  Martin Baulig  <martin@ximian.com>
7059
7060         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
7061         to bool so we can return an error condition.
7062         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
7063         returned an error.
7064
7065 2005-03-17  Martin Baulig  <martin@ximian.com>
7066
7067         * generic.cs (TypeMananager.IsIEnumerable): New public method.
7068
7069         * convert.cs (Convert.ImplicitReferenceConversion(Exists)): Allow
7070         converting from an array-type of T to `IEnumerable<T>'.
7071
7072 2005-03-16  Martin Baulig  <martin@ximian.com>
7073
7074         * generic.cs (Nullable.Unwrap): Implement IAssignMethod.
7075         (Nullable.LiftedUnaryMutator): New public class.
7076
7077         * expression.cs (UnaryMutator.DoResolve): Added support for
7078         Nullable Types.
7079
7080 2005-03-14  Martin Baulig  <martin@ximian.com>
7081
7082         * generic.cs (Nullable.NullCoalescingOperator): Implemented.
7083
7084 2005-03-14  Martin Baulig  <martin@ximian.com>
7085
7086         * generic.cs (Nullable.LiftedBinaryOperator): Added support for
7087         the comparision operators `<', `>', `<=' and `>='.
7088
7089 2005-03-13  Martin Baulig  <martin@ximian.com>
7090
7091         * generic.cs
7092         (Nullable.NullLiteral): Renamed to `Nullable.NullableLiteral' to
7093         avoid confusion with the `NullLiteral'.
7094         (Nullable.LiftedBinaryOperator): Correctly implement `==' and '!='.
7095
7096 2005-03-13  Martin Baulig  <martin@ximian.com>
7097
7098         * expression.cs (Binary.ResolveOperator): For `==' and `!=', allow
7099         comparing arbitrary types with the null literal.
7100
7101 2005-03-13  Martin Baulig  <martin@ximian.com>
7102
7103         * generic.cs (Nullable.LiftedBinaryOperator): Add support for the
7104         boolean operators '&&', '||', '&' and '|'.
7105         (Nullable.OperatorTrueOrFalse): New public class.
7106
7107         * ecore.cs (Expression.GetOperatorTrue/False): Return an `Expression'
7108         instead of a `StaticCallExpr'; added support for nullables.
7109
7110 2005-03-10  Martin Baulig  <martin@ximian.com>
7111
7112         * expression.cs
7113         (ArrayAccess.EmitDynamicInitializers): Use `etype.IsValueType'
7114         rather than `etype.IsSubclassOf (TypeManager.value_type)'.      
7115
7116 2005-03-07  Martin Baulig  <martin@ximian.com>
7117
7118         * generic.cs (Nullable.Unwrap): Implement IMemoryLocation and make
7119         it work if `expr' is not an IMemoryLocation.
7120         (Nullable.Lifted): Implement IMemoryLocation.
7121         (Nullable.LiftedConversion.ResolveUnderlying): Use the correct
7122         target type.
7123
7124 2005-03-05  Martin Baulig  <martin@ximian.com>
7125
7126         * generic.cs (Nullable.Unwrap, Wrap): New protected classes.
7127         (Nullable.Lifted): New abstract class; rewrote the lifted conversions.
7128         (Nullable): Added support for lifted unary and binary operators.
7129
7130         * expression.cs (Unary.DoResolve): Added support for nullable types.
7131         (Binary.DoResolve): Likewise.
7132         (Conditional.DoResolve): Likewise.
7133
7134 2005-03-02  Martin Baulig  <martin@ximian.com>
7135
7136         * decl.cs (DeclSpace.SetParameterInfo): Make this virtual.
7137
7138         * class.cs (ClassPart.SetParameterInfo): Override this.
7139         (PartialContainer.SetParameterInfo): Override this.
7140         (TypeContainer.CheckConstraints): New protected method.
7141         (PartialContainer.CheckConstraints): Override this and check
7142         whether the same contraints were specified in all parts of a
7143         partial generic type definition.
7144         (PartialContainer.UpdateConstraints): New public method.
7145
7146         * generic.cs (TypeParameter.UpdateConstraints): New public method.
7147
7148 2005-03-02  Martin Baulig  <martin@ximian.com>
7149
7150         Committing a patch from Carlos Alberto Cortez to fix #72887.
7151
7152         * convert.cs (Convert.ExplicitReferenceConversionExists): Allow
7153         casts from `T []' to `int []'.
7154
7155 2005-03-02  Martin Baulig  <martin@ximian.com>
7156
7157         * generic.cs (TypeManager.IsEqual): Make this symmetric.
7158
7159         * expression.cs (Binary.ResolveOperator): When resolving a
7160         BinaryDelegate, use `TypeManager.IsEqual (l, r)' rather than just
7161         `=='.  Fixes #71866.  See gen-127.cs.
7162
7163 2005-03-02  Martin Baulig  <martin@ximian.com>
7164
7165         * class.cs (TypeContainer.DoDefineMembers): We also need a default
7166         static constructor in static classes.
7167
7168 2005-03-02  Martin Baulig  <martin@ximian.com>
7169
7170         * generic.cs
7171         (NullableType.Name, NullableType.FullName): Add a "?" to the name.
7172         (Nullable.LiftedConversion): Added support for user-defined
7173         conversions.
7174
7175         * cs-tokenizer.cs (Tokenizer.PutbackCloseParens): New public method.
7176
7177         * cs-parser.jay: Use ComposedCast everywhere instead of
7178         NullableType, so we don't need to check for NullableType
7179         everywhere.
7180         (conditional_expression): Added `INTERR CLOSE_PARENS' rule for the
7181         case where we'll be resolved into a `parenthesized_expression_0'
7182         afterwards.
7183
7184         * convert.cs
7185         (Convert.UserDefinedConversion): Added nullable conversions.
7186
7187 2005-02-28  Martin Baulig  <martin@ximian.com>
7188
7189         * generic.cs (TypeManager.IsNullableType): New static method.
7190         (Nullable): New abstract class.
7191         (Nullable.NullLiteral): New public class.
7192         (Nullable.LiftedConversion): New public class.
7193
7194         * cs-parser.jay (non_expression_type): Changed `builtin_types' to
7195         `builtin_types opt_nullable'.
7196
7197         * convert.cs
7198         (Convert.ImplicitConversionStandard): Added nullable conversions.
7199         (Convert.ExplicitConversionStandard): Likewise.
7200         (Convert.ExplicitConversion): Likewise.
7201
7202 2005-02-26  Martin Baulig  <martin@ximian.com>
7203
7204         * expression.cs (ComposedCast.DoResolveAsTypeStep): Allow `dim' to
7205         begin with a "?", for instance "?[]".  Don't do a type lookup if
7206         `dim' is empty.
7207
7208 2005-02-25  Martin Baulig  <martin@ximian.com>
7209
7210         The first part of Nullable Types :-)
7211
7212         * generic.cs (NullableType): New public class.
7213         (NullCoalescingOperator): New public class.
7214         (TypeArguments.Resolve): Add a CS0306 check.
7215
7216         * cs-parser.jay (opt_error_modifier): Removed, this was unused.
7217         (opt_nullable): New rule.
7218         (type): Added `opt_nullable' to `namespace_or_type_name',
7219         `builtin_types' and `pointer_type'.
7220         (array_type): Added `opt_nullable'.
7221         (opt_rank_specifier_or_nullable): New rule; this is the
7222         combination of `opt_rank_specifier' and `opt_nullable'.
7223         (opt_error): New rule; catch errors here.
7224         (nullable_type_or_conditional): New rule; we use this to check for
7225         nullable and still detect the conditional operator.
7226         (local_variable_type): Use `opt_rank_specifier_or_nullable'
7227         instead `opt_rank_specifier'.
7228
7229         * expression.cs (ComposedCast.DoResolveAsTypeStep): Added support
7230         for nullables.
7231
7232 2005-02-24  Martin Baulig  <martin@ximian.com>
7233
7234         * README, README.Changes: Removed; they're old and obsolete.
7235
7236 2005-02-22  Martin Baulig  <martin@ximian.com>
7237
7238         * generic.cs (TypeParameter.Resolve): If resolving the constraints
7239         returned an error, set `constraints' to null to avoid a crash
7240         later on.
7241         (TypeParameter.ResolveType): Likewise.
7242
7243 2005-02-22  Martin Baulig  <martin@ximian.com>
7244
7245         * generic.cs
7246         (Constraints.ResolveTypes): Protect against being called twice.
7247         (Constraints.CheckInterfaceMethod): Don't call ResolveTypes().
7248         (TypeParameter.ResolveType): New public method; calls
7249         constraints.ResolveTypes().
7250         (TypeParameter.DefineType): Moved constraints.ResolveType() out
7251         into the new ResolveType().
7252         (GenericMethod.Define): Call ResolveType() on all our
7253         TypeParameter's.        
7254
7255 2005-02-21  Martin Baulig  <martin@ximian.com>
7256
7257         * generic.cs
7258         (TypeManager.generic_nullable_type): New static public field.
7259         (TypeManager.InitGenericCoreType): Lookup "System.Nullable`1".
7260
7261         * rootcontext.cs
7262         (RootContext.ResolveCore): Resolve "System.Nullable`1".
7263
7264 2005-02-15  Martin Baulig  <martin@ximian.com>
7265
7266         * generic.cs (ConstructedType.Constraints): Correctly check
7267         constraints if the argument type is a type parameter; fixes
7268         #72326. 
7269
7270 2005-02-02  Martin Baulig  <martin@ximian.com>
7271
7272         * delegate.cs (Delegate.DefineType): Report an internal error if
7273         TypeManager.multicast_delegate_type is null.  See bug #72015 for
7274         details.        
7275
7276 2005-01-29  Miguel de Icaza  <miguel@novell.com>
7277
7278         * pending.cs: Produce better code (no nops produced by using Ldarg
7279         + value).
7280         
7281         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
7282         i - 1' it should be arg + 1.
7283
7284         Fixes bug #71819.
7285         
7286 2005-01-26  Martin Baulig  <martin@ximian.com>
7287
7288         * cs-parser.jay (indexer_declarator): Don't report an error if we
7289         have type parameters since we can be an explicit interface
7290         implementation; fixes #71449.
7291
7292 2005-01-26  Martin Baulig  <martin@ximian.com>
7293
7294         * class.cs (TypeContainer.AttributeTargets): Return the correct
7295         AttributeTargets depending on our `Kind' instead of throwing an
7296         exception; fixes #71632.
7297
7298 2005-01-26  Martin Baulig  <martin@ximian.com>
7299
7300         * delegate.cs (Delegate.DefineType): Correctly define our type
7301         parameters.  Fixes #71483.
7302
7303 2005-01-25  Raja R Harinath  <rharinath@novell.com>
7304
7305         Fix #71602.
7306         * expression.cs (MemberAccess.DoResolve): Don't complain with
7307         cs0572 when the LHS of a member access has identical name and type
7308         name.
7309
7310 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
7311
7312         Fix #71651, #71675
7313         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
7314         CreatePermission.
7315         Create custom PermissionSet only for PermissionSetAttribute.
7316
7317 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
7318
7319         Fix #71649
7320         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
7321         delegates in static class.
7322
7323 2005-01-24  Martin Baulig  <martin@ximian.com>
7324
7325         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
7326         merging an implicit block, just use its reachability.
7327
7328         * statement.cs (Block.Resolve): Make the unreachable code check
7329         work wrt. implicit blocks; see test-337 from #63842.
7330
7331 2005-01-21  Alp Toker  <alp@atoker.com>
7332  
7333         * cs-parser.jay: destructor_declaration's container is PartialContainer
7334         not Class when partial types are used, so use Kind prop instead of
7335         'is'.
7336         
7337 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
7338
7339         * cs-parser.jay: Improve error reporting when an interface
7340         declares new types.
7341
7342 2005-01-20  Dick Porter  <dick@ximian.com>
7343
7344         * support.cs: SeekableStreamReader fix from Sandor Dobos
7345         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
7346         chars are read.  Fixes bug 70369.
7347
7348 2005-01-20  Raja R Harinath  <rharinath@novell.com>
7349
7350         * cs-parser.jay (catch_clause): Simplify current_block handling
7351         somewhat.
7352
7353 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
7354
7355         * convert.cs (ImplicitStandardConversionExists): Synchronize the
7356         code with ImplicitStandardConversion to handle the implicit
7357         conversion of method groups into valid delegate invocations. 
7358
7359         The problem is that in parameter handling we were using this code
7360         path.  Fixes bug #64698
7361
7362 2005-01-19  Raja R Harinath  <rharinath@novell.com>
7363
7364         * cs-parser.jay: Fix several infelicities.
7365         - Avoid assigning to the parser value stack.  Code like 
7366           '$3 = null' is unclean.  Synthesize a value for the code block
7367           instead. 
7368         - Avoid using oob_stack for storing location information.  Use ...
7369         (_mark_): ... this.  New (empty) rule.  Saves the current location
7370         in $$.
7371         (foreach_statement): Avoid using oob_stack for current_block
7372         handling.  Use technique used in for_statement and
7373         using_statement.  Synthesize a value for the code block to store
7374         additional intermediate information.
7375
7376 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
7377
7378         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
7379         of a different type is only allowed to private fields of a
7380         containing type, not on fields of a base class.
7381
7382         See test-174.cs and error cs0122-9.cs
7383
7384 2005-01-13  Raja R Harinath  <rharinath@novell.com>
7385
7386         Fix test-335.cs (bug #58126).
7387         * cs-parser.jay (argument): Split out non-expression parts of the
7388         rule into 'non_simple_argument'.
7389         (invocation_expression): Support parenthesized invocations with
7390         multiple arguments, and with single non-simple arguments.
7391
7392 2005-01-13  Raja R Harinath  <rharinath@novell.com>
7393
7394         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
7395         places.
7396
7397 2005-01-12  Raja R Harinath  <rharinath@novell.com>
7398
7399         Fix cs0038-1.cs, cs1640-6.cs.
7400         * ecore.cs (Expression.Resolve): Remove special-case for
7401         SimpleName in error-handling.
7402         (Expression.almostMatchedMembers): Relax access permission to
7403         protected.
7404         (Expression.MemberLookupFailed): Handle duplicates in
7405         almostMatchedMembers list.
7406         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
7407         * expression.cs (New.DoResolve): Report CS1540 for more cases.
7408         * typemanager.cs (GetFullNameSignature): Use the MethodBase
7409         overload if the passed in MemberInfo is a MethodBase.
7410
7411 2005-01-25  Martin Baulig  <martin@ximian.com>
7412
7413         * doc.cs
7414         (DocUtil.emptyParamList): Removed; use `Type.EmptyTypes' instead.
7415
7416 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
7417
7418         Fix #70749
7419         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
7420         for non-CAS & merge permission sets properly.
7421
7422 2005-01-11  Raja R Harinath  <rharinath@novell.com>
7423
7424         Improve standard-compliance of simple name and member access 
7425         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
7426         * ecore.cs (FullNamedExpression): New abstract base class 
7427         for Namespaces and TypeExpressions.
7428         (ResolveFlags.SimpleName): Remove.
7429         (SimpleName): Remove support for dotted names.
7430         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
7431         DeclSpace.FindType and DeclSpace.LookupType.
7432         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
7433         (Expression.ExprClassName): Make member function.
7434         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
7435         a namespace.  Remove creation of dotted "SimpleName"s.
7436         (MemberAccess.DoResolve): Likewise.
7437         * decl.cs (DeclSpace.Cache): Make private.
7438         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
7439         (DeclSpace.FindType): Update.
7440         (DeclSpace.LookupType): Move here from RootContext.  Return a 
7441         FullNamedExpression.
7442         * namespace.cs (Namespace): Derive from FullNamedExpression
7443         so that it can be part of expression resolution.
7444         (Namespace.Lookup): Return an FullNamedExpression.
7445         (NamespaceEntry.LookupAlias): Lookup aliases only in current
7446         namespace.
7447         * rootcontext.cs (NamespaceLookup): Remove.
7448         (LookupType): Move to DeclSpace.
7449         * attribute.cs (CheckAttributeType): Update.
7450         * doc.cs (FindDocumentedType): Remove allowAlias argument.
7451         (FindDocumentedTypeNonArray): Likewise.
7452
7453 2005-01-11  Raja R Harinath  <rharinath@novell.com>
7454
7455         Fix cs0509.cs, cs1632.cs.
7456         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
7457         is the same as IsInterface.
7458         (TypeContainer.GetClassBases): Likewise.
7459         * statement.cs (LabeledStatement.ig): New field.
7460         (LabeledStatement.LabelTarget): Save ILGenerator which created the
7461         label.
7462         (LabeledStatement.DoEmit): Check that the label was created with
7463         the same ILGenerator.
7464
7465 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
7466
7467         Fix #71058
7468         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
7469         accessors to its properties.
7470
7471         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
7472         from accessors to property.
7473         
7474 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
7475
7476         Fix #70722
7477         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
7478         only for overrides.
7479         
7480 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
7481
7482         * attribute.cs: Check for null and empty strings.  
7483
7484         I have lost another battle to Paolo.
7485
7486 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
7487
7488         Fix #70942
7489         * class.cs (PropertyMethod): Set Parent field in ctors.
7490         (SetMethod.InternalParameters): Add unsafe switch hack.
7491         Override MarkForDuplicationCheck where it is appropriate.
7492
7493         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
7494         It says whether container allows members with the same name.
7495         Base default is no.
7496         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
7497         Removed is_method parameter.
7498
7499 2005-01-06  Duncan Mak  <duncan@ximian.com>
7500
7501         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
7502         because the previous change led to incorrect reporting of CS1032
7503         ("Cannot define/undefine preprocessor symbols after first token in
7504         file"). Instead of using `tokens_seen' as the only flag that
7505         triggers CS1040, introduce `comments_seen'. This new flag is used
7506         to signify having seen comments on the current line, so it is
7507         unset after a newline.
7508
7509 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
7510
7511         * doc.cs : When searching for a type, find nested type too.
7512           This fixes bug #71040.
7513
7514 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
7515
7516         * doc.cs :
7517           - Warn missing member comment on those classes which also does not
7518             have doc comments. Fixed bug #71041.
7519           - Don't warn missing doc comment on default constructor.
7520             Fixed bug #71042.
7521
7522 2005-01-06  Duncan Mak  <duncan@ximian.com>
7523
7524         * cs-tokenizer.cs (xtoken): After handling traditional C-style
7525         comments, set `tokens_seen' to true. This allows us to detect
7526         misplaced preprocessor directives (i.e. not at the beginning of
7527         the a line, nor after whitespaces). In that case, report error
7528         CS1040. This fixes bug #56460.
7529
7530         * cs-parser.jay (interface_member_declaration): Add checks for
7531         IsExplicitImpl, and report CS0541 error if an interface member is
7532         defined as an explicit interface declaration.
7533
7534 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
7535
7536         Fix #70817
7537         * class.cs (PropertyMethod): Set Parent field in ctors.
7538         (SetMethod.InternalParameters): Add unsafe switch hack.
7539         
7540         * decl.cs (MemberCore.Parent): Cannot be readonly.
7541
7542 2005-01-06  Raja R Harinath  <rharinath@novell.com>
7543
7544         * decl.cs (DeclSpace.ResolveType): Remove.
7545         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
7546         Merge in code from ...
7547         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
7548         * class.cs, enum.cs: Update to changes.
7549
7550 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
7551
7552         * anonymous.cs: Ensure that we init the scope of our parent if it
7553         has not been initialized yet.
7554
7555 2004-12-30  Duncan Mak  <duncan@ximian.com>
7556
7557         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
7558         if field.FieldBuilder is null. Fixes #70758.
7559
7560         * convert.cs: Fixed some typos and updated some of the comments.
7561         (ImplicitStandardConversionExists):
7562         (TryImplicitIntConversion): If `target_type' is an interface and
7563         the type of `ic' implements this interface, return true or a new
7564         BoxedCast instead of null. This fixes #70468.
7565
7566 2004-12-29  Duncan Mak  <duncan@ximian.com>
7567
7568         * expression.cs (Argument.Emit): Check that Expr is
7569         IMemoryLocation before casting to it, and report CS1510 otherwise.
7570
7571         This fixes #70402.
7572
7573 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
7574
7575         * statement.cs (Block.ThisVariable): remove the recursion here, to
7576         make the --profile more sane.
7577
7578 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
7579
7580         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
7581         assembly, by JB Evain.
7582
7583 2004-12-17  Raja R Harinath  <rharinath@novell.com>
7584
7585         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
7586           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
7587         "parent" refers to enclosing type/class.  "base" refers to superclass.
7588
7589 2004-12-17  Raja R Harinath  <rharinath@novell.com>
7590
7591         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
7592         Ensure that we only have GlobalAttributes.
7593         * attribute.cs (Attribute.Emit): Make non-virtual.
7594         (GlobalAttribute.Emit): Remove.
7595         (Attribute.Resolve): Make virtual.
7596         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
7597         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
7598         the argument. Don't create one.
7599         (Attribute.GetObsoleteAttribute): Likewise.
7600         (Attribute.GetClsCompliantAttributeValue): Likewise.
7601         * class.cs, decl.cs: Update to changes.
7602
7603 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
7604
7605         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
7606         
7607         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
7608         
7609         * statement.cs (Foreach.Resolve): Add error 186 report.
7610
7611 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
7612
7613         * expression.cs (Conditional.DoResolve): Add warning 429.
7614         
7615         * statement.cs (If.Resolve): Add warning 665.
7616
7617 2004-12-16  Raja R Harinath  <rharinath@novell.com>
7618
7619         New invariant: RootContext.Tree.Types.NamespaceEntry == null
7620         except when in the parser, and in GlobalAttribute.
7621         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
7622         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
7623         RootContext.Tree.Types.NamespaceEntry once work is done.
7624         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
7625         and resets RootContext.Tree.Types.NamespaceEntry.
7626
7627 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
7628
7629         * cs-parser.jay: Don't create a block for every variable.
7630
7631 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
7632
7633         * location.cs: Provide extra information.
7634
7635         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
7636         variables from the captured environment, it is the ldarg_0.
7637
7638 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
7639
7640         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
7641         find a conclusion.
7642         
7643         * class.cs: Changed warning level for 169 to avoid developer
7644         displeasure from warning flooding. It will be changed back when they
7645         fix most of current BCL warnings.
7646         
7647         * RootContext.cs: Pushed default WarningLevel to 3.
7648         
7649         * statement.cs: Removed unused variable.
7650
7651 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
7652
7653         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
7654         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
7655         Add error 502 report.
7656         (StaticClass.DefineType): Add error 441 report.
7657         (Class.AllowedModifiersProp): New virtual property as temporary
7658         extension to AllowedModifiers.
7659         (Class.DefineType): Add error 418 report. Moved ModFlags check here
7660         to share implementation with StaticClass and don't call virtual
7661         methods from ctor.
7662         
7663         * driver.cs (MainDriver): Add error 1558 test.
7664
7665         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
7666         report. Moved error 36 test here.
7667
7668         * statement.cs (Throw.Resolve): Add error 724 report.
7669
7670         * typemanager.cs: Add out_attribute_type core type.
7671         
7672 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
7673
7674         * class.cs (TypeContainer.VerifyClsCompliance): Add error
7675         3018 report.
7676         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
7677
7678         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
7679         3017 report.
7680         
7681         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
7682
7683         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
7684         Add error 3023 report.
7685         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
7686
7687         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
7688         implementation.
7689
7690 2004-12-12  John Luke  <john.luke@gmail.com>
7691
7692         * driver.cs (AddArgs): take -- into account when
7693         adding arguments, fixes bug 65710 
7694
7695 2004-12-12  Martin Baulig  <martin@ximian.com>
7696
7697         * expression.cs (Unary.TryReduceNegative): Added support for
7698         SByteConstant and ByteConstant.
7699         (Unary.Reduce): Check error values from TryReduceNegative().
7700
7701 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
7702
7703         * attributes.cs (Attribute.Resolve): Avoid multiple error report
7704         and report exception as error 182.
7705
7706 2004-12-10  Raja R Harinath  <rharinath@novell.com>
7707
7708         * driver.cs (Main): Fix message when there are warnings.
7709
7710 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
7711
7712         * delegate.cs: Fixed my fix from yesterday, sorry about that.
7713
7714 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
7715
7716         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
7717         Reduced number of warnings.
7718         
7719         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
7720
7721 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
7722
7723         * driver.cs: Removed message.
7724
7725         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
7726
7727 2004-12-08    <vargaz@freemail.hu>
7728
7729         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
7730
7731 2004-12-08  Martin Baulig  <martin@ximian.com>
7732
7733         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
7734         instead of a CS3002 for properties and indexer.
7735
7736 2004-12-08  Martin Baulig  <martin@ximian.com>
7737
7738         * decl.cs (MemberName.ToString): Make this work again.
7739
7740 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
7741
7742         * attribute.cs (Resolve): Add error 591 detection.
7743
7744         * class.cs (FieldMember.Define): Add error 1547 detection.
7745         (Indexer.Define): Add error 620 detection.
7746         (Operator.Define): Add error 590 detection.
7747
7748         * ecore.cs: Missing argument for error 79.
7749
7750         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
7751         detection.
7752
7753 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
7754
7755         Fix #70106
7756         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
7757         only.
7758
7759 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
7760
7761         * cs-parser.jay : handle doc comments on implicit/explicit operators.
7762           Some operator comments were suppressed.
7763         * doc.cs : Implicit/explicit operator name in doc comments are like
7764           "op_Explicit(type)~returnType", so added suffix handling.
7765
7766 2005-01-21  Alp Toker  <alp@atoker.com>
7767
7768         * cs-parser.jay: destructor_declaration's container is PartialContainer
7769         not Class when partial types are used, so use Kind prop instead of 'is'.
7770
7771 2004-12-12  Martin Baulig  <martin@ximian.com>
7772
7773         * expression.cs (Unary.TryReduceNegative): Added support for
7774         SByteConstant and ByteConstant.
7775         (Unary.Reduce): Check error values from TryReduceNegative().
7776
7777 2004-12-11  Martin Baulig  <martin@ximian.com>
7778
7779         * support.cs (ReflectionParameters.ParameterName): If we have a
7780         `gpd', call `ParameterName' on it.
7781
7782         * parameter.cs (Parameter.GetParameterAttributes): New static method.
7783
7784         * pending.cs (PendingImplementation.DefineProxy): Call
7785         DefineParameter() for all of the MethodBuilder's arguments.
7786
7787 2004-12-09  Martin Baulig  <martin@ximian.com>
7788
7789         * doc.cs (DocUtil): Make this a static class.
7790
7791 2004-12-09  Martin Baulig  <martin@ximian.com>
7792
7793         * expression.cs (Invocation.InferType): Moved the type inference
7794         implementation into TypeManager.
7795
7796         * generics.cs (TypeManager): Moved the type inference
7797         implementation here.
7798
7799 2004-12-09  Martin Baulig  <martin@ximian.com>
7800
7801         * typemanager.cs (TypeManager): Make this a partial class.
7802
7803         * generics.cs
7804         (TypeManager): Move the generics part of `TypeManager' here.
7805
7806 2004-12-08  Martin Baulig  <martin@ximian.com>
7807
7808         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
7809         instead of a CS3002 for properties and indexer.  Added CS3024
7810         check for generic interfaces.
7811
7812         * attributes.cs (AttributeTester.AnalyzeTypeCompliance): Generic
7813         instances are not CLS-compliant.
7814
7815 2004-12-08  Martin Baulig  <martin@ximian.com>
7816
7817         * cs-parser.jay
7818         (void_pointer_expression): New rule for `void*', `void**' etc.
7819         (typeof_expression): Add `void_pointer_expression'; fixes #66846.       
7820
7821 2004-12-08  Martin Baulig  <martin@ximian.com>
7822
7823         * expression.cs (Invocation.InferType): Removed the hack for
7824         MethodCore.MayUnify().  
7825
7826         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Make
7827         this actually work.
7828
7829         * class.cs (MethodCore.MayUnify): Use
7830         TypeManager.MayBecomeEqualGenericTypes().       
7831
7832 2004-12-08  Martin Baulig  <martin@ximian.com>
7833
7834         * expression.cs (Is.DoResolve, As.DoResolve): If we're a type
7835         parameter, box it.  Fixes #69233.
7836
7837 2004-12-08  Martin Baulig  <martin@ximian.com>
7838
7839         * generic.cs (ConstructedType.CheckConstraints): Valuetypes always
7840         have the ctor constraint.  Fixes #68326.
7841
7842 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
7843
7844         * cs-parser.jay : interface comment was not consumed because of
7845           extra opt_semicolon before doc handling.
7846
7847 2004-12-03  Raja R Harinath  <rharinath@novell.com>
7848
7849         Fix test-327.cs, test-328.cs, and put in early infrastructure
7850         for eventually fixing #52697.
7851         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
7852         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
7853         from other methods.
7854         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
7855         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
7856         (VerifyUsing, error246): Update.
7857         * rootcontext.cs (RootContext.NamespaceLookup): Just use
7858         'NamespaceEntry.LookupNamespaceOrType'.
7859
7860 2004-12-07  Martin Baulig  <martin@ximian.com>
7861
7862         * driver.cs: Call it "BETA SOFTWARE" :-)
7863
7864 2004-12-06  Raja R Harinath  <rharinath@novell.com>
7865
7866         Fix crash on cs0657-17.cs.
7867         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
7868         Use RootContext.Tree.Types, not 'new RootTypes ()'.
7869         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
7870         the case where the NamespaceEntry gets overwritten.
7871
7872 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
7873
7874         Fixed #69195, #56821
7875         * ecore.cs (ResolveBoolean): Tiny refactoring.
7876
7877         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
7878         of right expression resolving when left is false constant and
7879         operator is LogicalAnd OR true constant and operator is LogicalOr.
7880
7881         * statement.cs (ResolveUnreachable): Always reports warning.
7882
7883 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
7884
7885         * class.cs: Distinguish between 1721 and 1722 (just a little help
7886         for the programmer).
7887
7888 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
7889
7890         * delegate.cs: Only allow this on new versions of the language. 
7891
7892 2004-12-02  Duncan Mak  <duncan@ximian.com>
7893
7894         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
7895         Expression class.
7896         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
7897         here as a static method. Take an additional bool out parameter
7898         `must_do_cs1540_check' for signaling to InstanceResolve.
7899         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
7900         member field from PropertyExpr class and made it an argument of
7901         the method instead.
7902         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
7903         check for MarshalByRefObject, and report CS0122 instead of CS1540.
7904         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
7905         and `remove_accessor' as well as InstanceResolve: report CS0122
7906         where applicable.
7907
7908         Fixes #70129.
7909
7910 2004-12-07  Martin Baulig  <martin@ximian.com>
7911
7912         * decl.cs (DeclSpace.AddToContainer): Report correct errors CS0694
7913         and CS0692 where appropriate.
7914
7915 2004-12-06  Martin Baulig  <martin@ximian.com>
7916
7917         * class.cs (MethodCore.MayUnify): Moved the CS0408 check here from
7918         IsDuplicateImplementation() and improved it.
7919
7920         * expression.cs (Invocation.InferTypeArguments): Added
7921         `Type[] inferred_class_types' argument (for MethodCore.MayUnify)
7922         and removed the "ref" modifier from `infered_types'.
7923
7924         * decl.cs (MemberName.ToString): Removed the exception.
7925
7926 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
7927
7928         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
7929           comments are allowed.
7930
7931 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
7932
7933         * delegate.cs: Add checks for subtypes in paramaters and return values
7934         in VerifyMethod () to add support for Covariance/Contravariance
7935         in delegates.
7936         
7937 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
7938
7939         * report.cs: Remove extra closing parenthesis.
7940
7941         * convert.cs (Error_CannotImplicitConversion): If the name of the
7942         types are the same, provide some extra information.
7943
7944 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
7945
7946         Fix bug #70102
7947         * attribute.cs (Resolve): Improved implementation of params
7948         attribute arguments.
7949
7950         * support.cs (ParameterData): Add HasParams to be faster.
7951
7952 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
7953
7954         all things are for /doc support:
7955
7956         * doc.cs: new file that supports XML documentation generation.
7957         * mcs.exe.sources: added doc.cs.
7958         * driver.cs:
7959           Handle /doc command line option.
7960           Report error 2006 instead of 5 for missing file name for /doc.
7961           Generate XML documentation when required, after type resolution.
7962         * cs-tokenizer.cs:
7963           Added support for picking up documentation (/// and /** ... */),
7964           including a new XmlCommentState enumeration.
7965         * cs-parser.jay:
7966           Added lines to fill Documentation element for field, constant,
7967           property, indexer, method, constructor, destructor, operator, event
7968           and class, struct, interface, delegate, enum.
7969           Added lines to warn incorrect comment.
7970         * rootcontext.cs :
7971           Added Documentation field (passed only when /doc was specified).
7972         * decl.cs:
7973           Added DocComment, DocCommentHeader, GenerateDocComment() and
7974           OnGenerateDocComment() and some supporting private members for
7975           /doc feature to MemberCore.
7976         * class.cs:
7977           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
7978         * delegate.cs:
7979           Added overriden DocCommentHeader.
7980         * enum.cs:
7981           Added overriden DocCommentHeader and GenerateDocComment().
7982
7983 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
7984
7985         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
7986         unwrapping the enumeration values, chain to
7987         DoConstantNumericPromotions again, so we can promote things to the
7988         fundamental types (takes care of enums that are bytes, sbytes).
7989
7990         Fixes bug #62054.
7991
7992 2004-12-01  Raja R Harinath  <rharinath@novell.com>
7993
7994         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
7995         Fix long-standing bug in type-lookup.  Use FindType instead of
7996         LookupType when ec.ResolvingTypeTree.
7997         (Attribute.ResolveType, Attribute.Resolve)
7998         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
7999         Update to changes.
8000         (Attributes.Search): Remove internal version.  Update.
8001         (Attributes.SearchMulti): Update.
8002         (Attributes.GetClsCompliantAttribute): Remove.
8003         (Attributes.GetIndexerNameAttribute): Remove.
8004         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
8005         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
8006         * class.cs (Indexer.Define): Likewise.
8007
8008 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
8009
8010         Fix bug #68790
8011         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
8012         MarshallByReference members access.
8013
8014         * expression.cs: Use CheckMarshallByRefAccess;
8015         Better error CS0197 message.
8016
8017         * report.cs: Print whole related error message.
8018
8019 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
8020
8021         * class (GetClassBases): Better error 60 report.
8022         (EventProperty): Disabled warning 67 detection.
8023
8024 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
8025
8026         Fix bug #60324
8027         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
8028
8029         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
8030         precise values.
8031
8032 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
8033
8034         Fix bug #49488
8035         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
8036
8037         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
8038
8039 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
8040
8041         * attribute.cs (Attribute.Resolve): Refine error reporting and
8042         report a cs0117 if the identifier does not exist, to distinguish
8043         from 0617 which is a miss-use of the actual identifier.
8044
8045         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
8046         between cs0070 and cs0079.
8047
8048         * class.cs (MemberBase.DoDefine): When reporting a wrong
8049         accessibility level, we use MethodCore to compare instead of
8050         Method (this was a regression in some refactoring effort).
8051
8052         So now we correctly report cs0056 again.
8053
8054         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
8055         testing the target_type (which was known to be object_type) and
8056         not the source type (which is anonymous_method).
8057
8058         Fixed reporting of error cs1660.
8059
8060         * expression.cs (UserCast.Source): Expose the underlying cast.
8061
8062         * statement.cs (Switch.SwitchGoverningType): Sort the list of
8063         allowed types to find a match to int32 first (most common).
8064
8065         In addition, it ignores any ImplicitUserConversions that did an
8066         internal implicit conversion (as the switch statement allows only
8067         one integral conversion to exist).
8068
8069         * class.cs (PartialContainer.Create): rename `name' to
8070         `member_name' for clarity.  Then replace the string calls with a
8071         call to MemberName.GetPartialName, as now using
8072         MemberName.ToString is an error (this is due to the side effects
8073         it had, that were fixed in the past).
8074
8075         This will restore the error reporting on a number of partial class
8076         errors that were missusing this (and getting an exception as a
8077         results, which is now just a plain textual warning, because
8078         yyparse debug output would crash otherwise).
8079
8080 2004-11-26  Raja R Harinath  <rharinath@novell.com>
8081
8082         * Makefile (PROGRAM_INSTALL_DIR): Remove.
8083
8084 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
8085
8086         * rootcontext.cs (LookupType): Make sure to cache lookups that
8087         don't give us a negative result. This saves about 5% of corlib
8088         compilation time.
8089
8090 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
8091
8092         * report.cs (AbstractMessage.Print): messages are sent to stderr
8093
8094         * class.cs (TypeContainer.GetClassBases): It is an error to have a
8095         non-interface in the list of interfaces (at this point, either
8096         parent was properly set, or a base class is being listed in the
8097         interfaces section).
8098
8099         This flags error 1722, and resolves the crash from bug 69259.
8100
8101 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
8102
8103         * statement.cs (Using.EmitExpressionFinally): make this work right
8104         for valuetypes. Fixes 69926.
8105
8106 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
8107
8108         * const.cs (Const.ChangeType): Cope with the "0 literal can be
8109         converted to an enum" here, before we try to change the underlying
8110         type.  This code exists, but it is a different code path than the
8111         one used while encoding constants.
8112
8113         (ImplicitReferenceConversionExists): In addition, resynchronized
8114         the code here, so it matches the same code in
8115         ImplicitReferenceConversionExists for the `from any class-type S
8116         to any interface-type T'.       
8117
8118 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
8119
8120         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
8121
8122 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
8123
8124         * cs-parser.jay: Use verbosity accordingly. 
8125
8126 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
8127
8128         * expression.cs (Unary.ResolveOperator): Do not report warning;
8129         AddressOf reads from variable.
8130         
8131         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
8132
8133 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
8134
8135         Fix bug #69462
8136
8137         * attribute.cs (Attributable): Removed CheckTargets.
8138         (Attributes.Emit): Explicit attribute targets are tested here.
8139
8140         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
8141         not enabled for interfaces.
8142
8143         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
8144         (GetAssemblyName): Ouch next bug there.
8145
8146 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
8147
8148         * expression.cs: Error 275 added.
8149         
8150 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
8151
8152         Fix bug #69177 (Implemented decimal constant support)
8153
8154         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
8155         (BinaryFold): Add DecimalConstant.
8156
8157         * const.cs (Define): Decimal constant 
8158         (is not constant.
8159         (ChangeType): Add decimal type handling.
8160         (LookupConstantValue): Don't set value for decimal type but
8161         emit DecimalConstantAttribute. Needed for constant optimization.
8162
8163         * constant.cs (ToDecimal): New method.
8164         (ConvertToDecimal): New method.
8165         (IntConstant): Implemented ConvertToDecimal.
8166         (DecimalConstant.Emit): Emit optimized version for decimals in
8167         int range.
8168
8169         * expression.cs (ResolveOperator): Changed order of constant
8170         reduction to work correctly with native types which have
8171         overloaded operators.
8172         (ResolveMemberAccess): Extract constant value from attribute
8173         for decimal type.
8174
8175         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
8176
8177         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
8178         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
8179         (ChangeType): Decimal is special.
8180         (TypeToCoreType): Add decimal type.
8181
8182 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
8183
8184         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
8185         decimal types.
8186
8187 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
8188
8189         * class.cs (EventField.ApplyAttributeBuilder): Fix error
8190         test cs1667-5.cs.
8191
8192 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
8193
8194         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
8195
8196         * pending.cs (PendingImplementation): Grab only interfaces.
8197
8198 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
8199
8200         * statement.cs (ForeachHelperMethods): Add location member and
8201         error 202 detection.
8202
8203 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
8204
8205         * expression.cs (DoResolveBase): Fixed wrong warning for out
8206         variables.
8207
8208 2004-12-04  Martin Baulig  <martin@ximian.com>
8209
8210         * convert.cs (Convert.TypeParameter_to_Null): Use the constraints
8211         to check whether the conversion is ok.
8212
8213         * typemanager.cs (TypeManager.GetTypeArguments): Just return
8214         `Type.EmptyTypes' if we're not a generic TypeContainer.
8215
8216 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
8217
8218         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
8219         old bug: when converting from the null literal to a pointer,
8220         return an EmptyCast, not the NullLiteral.
8221
8222         This fixes #69921, the recent null_type changes probably made this
8223         bug more prominent.
8224
8225 2004-12-03  Martin Baulig  <martin@ximian.com>
8226
8227         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
8228         method as our child, call AnonymousMethod.Compatible() on it.
8229
8230 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
8231
8232         * class.cs (FieldBase): Use an unused bit field from the field to
8233         encode the `has_offset' property from the FieldMember.  This saves
8234         a couple of Ks on bootstrap compilation.
8235
8236         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
8237         method as our child, return the AnonymousMethod resolved
8238         expression.
8239
8240         * expression.cs (New.DoResolve): Allow return values from
8241         NewDelegate to also include AnonymousMethods.
8242
8243         Fixes #70150.
8244
8245 2004-11-29  Raja R Harinath  <rharinath@novell.com>
8246
8247         * decl.cs (MemberCore.MemberName): Remove readonly to fix an error
8248         cs1648 report.
8249         * rootcontext.cs (ResolveCore::interfaces_first_stage): Add
8250         System.Runtime.InteropServices._Exception, since it's a base
8251         interface of the core type System.Exception in the net_2_0 profile.
8252
8253 2004-11-27  Martin Baulig  <martin@ximian.com>
8254
8255         * ecore.cs (Expression.StoreFromPtr): Use `stobj' for generic parameters.
8256
8257 2004-11-26  Raja R Harinath  <rharinath@novell.com>
8258
8259         * Makefile: Convert to use executable.make.
8260         * gmcs.exe.sources: New.
8261
8262 2004-11-25  Martin Baulig  <martin@ximian.com>
8263
8264         * expression.cs (Invocation.InferType): Added support for byref types.
8265
8266 2004-11-25  Martin Baulig  <martin@ximian.com>
8267
8268         * statement.cs (Foreach.FetchMethodMoveNext): Wrap `mi.ReturnType'
8269         in TypeManager.TypeToCoreType().
8270
8271 2004-11-25  Martin Baulig  <martin@ximian.com>
8272
8273         * iterators.cs (Iterator.DoDefineMembers): Override and lookup the
8274         "Dispose" method from the `current_type'.
8275         (Iterator.EmitMoveNext): Use the `dispose_method' we looked up in
8276         DoDefineMembers() instead of using the MethodBuilder; this is
8277         required for generic iterators.
8278
8279         * class.cs (TypeContainer.DoDefineMembers): Make this virtual.
8280
8281 2004-11-24  Martin Baulig  <martin@ximian.com>
8282
8283         * ecore.cs (Expression.LoadFromPtr): Use `ldobj' for generic parameters.
8284
8285 2004-11-20  Martin Baulig  <martin@ximian.com>
8286
8287         * expression.cs (Invocation.InferType): Correctly infer generic
8288         instances; see gen-103.cs.
8289         (Invocation.InferTypeArguments): If a generic method doesn't have
8290         any unbound type parameters, we don't need to infer anything.
8291
8292 2004-11-19  Raja R Harinath  <rharinath@novell.com>
8293
8294         * Makefile (gmcs.exe): Update to new location of bootstrap mcs.exe.
8295
8296 2004-11-17  Raja R Harinath  <rharinath@novell.com>
8297
8298         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
8299         (TypeHandle.GetMemberCache): New.
8300         (TypeHandle.TypeHandle): Update.
8301         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
8302         (TypeManager.LookupParentInterfacesCache):
8303         Rename from LookupInterfaceCache.  Optimize slightly.
8304         (TypeManager.MemberLookup_FindMembers): Update.
8305         * decl.cs (MemberCache.MemberCache): Set Container to null in the
8306         multi-type variant.
8307         (AddCacheContents): Rename from AddHashtable.
8308         * class.cs (TypeContainer.parent_container): Remove.
8309         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
8310         (TypeContainer.DoDefineMembers): Don't initialize it.
8311         Update to name changes.
8312         
8313 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
8314
8315         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
8316         that factors the code to check access modifiers on override.  
8317
8318         (PropertyBase): Use the code here.
8319
8320         Patch from Lluis S'anchez, fixes bug #69361.
8321
8322 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
8323
8324         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
8325         routine that is used to report the use of a captured variable
8326         whose address has been taken.
8327
8328         There are two checks: one when variables are being captured and
8329         the other check is when the address of a variable is taken. 
8330         
8331         (because an anonymous methods might be resolved before *or* after
8332         the address has been taken) and 
8333
8334         * expression.cs (Conditional.DoResolve): Remove the special
8335         casing that Martin added to trueExpr and falseExpr being both
8336         NullLiteral.  We get the right behavior now just by introducing
8337         the null_type into the compiler. 
8338
8339         * convert.cs (ExplicitConversion): Change the code to use
8340         null_type instead of testing `expr is NullLiteral'.
8341         (ImplicitConversionStandard): use null_type too.
8342         (ImplicitReferenceConversionExists): use null_type too.
8343         (ImplicitReferenceConversion): use null_type too.
8344
8345         * literal.cs: The type of `NullLiteral' is now null_type instead
8346         of object_type. 
8347         (Resolve): Set the type here.
8348
8349         * typemanager.cs: Introduce null_type.
8350
8351 2004-11-18  Martin Baulig  <martin@ximian.com>
8352
8353         * rootcontext.cs
8354         (RootContext.LookupType): Return a `Type', not a `TypeExpr'.
8355
8356 2004-11-18  Martin Baulig  <martin@ximian.com>
8357
8358         * ecore.cs (TypeExpr.DoResolveAsTypeStep): Make this protected.
8359
8360 2004-11-18  Martin Baulig  <martin@ximian.com>
8361
8362         * generic.cs (Constraints.Resolve): Take an `EmitContext' instead
8363         of a `DeclSpace'.  If one of our constraints is a `ConstructedType',
8364         call ResolveConstructedType() on it to resolve it without checking
8365         constraints.
8366         (Constraints.ResolveTypes): Check them here.
8367         (ConstructedType.DoResolveAsTypeStep): Fully resolve ourselves,
8368         but don't check constraints.
8369         (ConstructedType.ResolveAsTypeTerminal): Override this and also
8370         check constraints here.
8371         (ConstructedType.ResolveConstructedType): New public method.  This
8372         is called from DoResolveAsTypeStep() and Constraints.Resolve() to
8373         resolve ourselves without checking constraints.
8374
8375         * ecore.cs (Expression.ResolveAsTypeTerminal): Make this virtual.
8376
8377 2004-11-18  Martin Baulig  <martin@ximian.com>
8378
8379         * decl.cs
8380         (DeclSpace.CurrentType): Changed type from `TypeExpr' to `Type'.
8381
8382         * delegate.cs (Delegate.DefineType): Always create the EmitContext.
8383
8384 2004-11-18  Martin Baulig  <martin@ximian.com>
8385
8386         * ecore.cs (TypeExpr.ResolveType): Removed.
8387         (Expression.ResolveAsTypeTerminal): We always return a fully
8388         resolved `TypeExpr', so we can just access its `Type'.
8389
8390         * class.cs (TypeContainer.DefineType): Resolve `CurrentType' here.
8391
8392 2004-11-17  Martin Baulig  <martin@ximian.com>
8393
8394         * ecore.cs (IAlias.Type): Replaced with ResolveAsType() to make
8395         sure we don't return any unresolved TypeExpr's.
8396         (TypeAliasExpression): The .ctor now takes an `IAlias' instead of
8397         a `TypeExpr'.
8398         (Expression.ResolveAsTypeTerminal): Make sure `te.Type != null'.
8399
8400         * expression.cs (MemberAccess.ResolveAsTypeStep): Don't return any
8401         unresolved `ConstructedType's.
8402
8403 2004-11-17  Martin Baulig  <martin@ximian.com>
8404
8405         * ecore.cs (TypeExpr.ResolveType): Don't make this virtual.
8406
8407 2004-11-17  Martin Baulig  <martin@ximian.com>
8408
8409         * ecore.cs
8410         (Expression.ResolveAsTypeTerminal): Removed the `bool silent' argument.
8411
8412         * decl.cs (DeclSpace.ResolveType): Removed.
8413         (DeclSpace.ResolveTypeExpr): Removed the `bool silent' argument.
8414
8415 2004-11-17  Martin Baulig  <martin@ximian.com>
8416
8417         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
8418         direction, like FindMembers() does.  Fixes #69546, testcase is in
8419         test-315.cs.    
8420
8421 2004-11-16  Martin Baulig  <martin@ximian.com>
8422
8423         This is based on a patch from Marek Safar, see bug #69082.
8424         Fixes bugs #63705 and #67130.
8425
8426         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
8427         method; create a MemberCache for an interface type and cache the
8428         result.
8429
8430         * decl.cs (IMemberContainer.ParentContainer): Removed.
8431         (IMemberContainer.ParentCache): New property.
8432         (MemberCache.SetupCacheForInterface): Removed.
8433         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
8434         to create a cache for an interface's "parent".
8435
8436         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
8437         interfaces too.
8438
8439 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
8440
8441         * statement.cs: Avoid adding bools to a hashtable.
8442
8443 2004-11-15  Martin Baulig  <martin@ximian.com>
8444
8445         * decl.cs (MemberName.GetPartialName): Removed, use GetTypeName() instead.
8446
8447 2004-11-11  Martin Baulig  <martin@ximian.com>
8448
8449         * typemanager.cs (TypeManager.GetMethodName): New method.
8450
8451         * class.cs (MethodData.Define): Include the generic arity in the
8452         name of an explicit interface; also add it to the method name.
8453
8454         * pending.cs (PendingImplementation.InterfaceMethod): The method
8455         name now includes the generic arity.
8456
8457 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
8458
8459         * expression.cs (Invocation.OverloadResolve): Flag error if we are
8460         calling an unsafe method from a safe location.
8461
8462 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
8463
8464         Fix #69167
8465         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
8466
8467 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
8468
8469         * namespace.cs (VerifyUsing): use GetPartialName instead of
8470         ToString. 
8471
8472 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
8473
8474         * statement.cs (Return.Resolve): Fix regression in typo: if
8475         `in_exc', we have to request a NeedReturnLabel, this was a typo
8476         introduced in the anonymous method check-in.  Fixes #69131.
8477
8478         * Indexers were using the ShortName when defining themselves,
8479         causing a regression in the compiler bootstrap when applying the
8480         patch from 2004-11-02 (first part), now they use their full name
8481         and the bug is gone.
8482
8483 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
8484
8485         * driver.cs: Strip the path from the names of embedded resources. Fixes
8486         #68519.
8487
8488 2004-11-04  Raja R Harinath  <rharinath@novell.com>
8489
8490         Fix error message regression: cs0104-2.cs.
8491         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
8492         (AliasEntry.Resolve): Update.
8493         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
8494         'silent' flag.
8495         (RootContext.LookupType): Update.
8496
8497 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
8498
8499         * cs-parser.jay: Add support for handling accessor modifiers
8500         * class: Add support port accessor modifiers and error checking,
8501         define PropertyMethod.Define as virtual (not abstract anymore)
8502         * ecore.cs: Add checking for proeprties access with access modifiers
8503         * iterators.cs: Modify Accessor constructor call based in the modified
8504         constructor
8505 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
8506
8507         * expression.cs (StringConcat): Handle being called twice,
8508         as when we have a concat in a field init with more than two
8509         ctors in the class
8510
8511 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
8512
8513         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
8514         special case explicit implementations, we should always produce
8515         the .property or .event declaration.
8516         
8517         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
8518         since it will not return correct data if people use this
8519         unresolved in the presence of using statements (see test-313).
8520
8521         * class.cs (MethodData.Define): If we are an explicit interface
8522         implementation, set the method name to the full name of the
8523         interface plus the name of the method.  
8524
8525         Notice that using the method.MethodName.GetFullName() does not
8526         work, as it will only contain the name as declared on the source
8527         file (it can be a shorthand in the presence of using statements)
8528         and not the fully qualifed type name, for example:
8529
8530         using System;
8531
8532         class D : ICloneable {
8533                 object ICloneable.Clone ()  {
8534                 }
8535         }
8536
8537         Would produce a method called `ICloneable.Clone' instead of
8538         `System.ICloneable.Clone'.
8539
8540         * namespace.cs (Alias.Resolve): Use GetPartialName.
8541         
8542 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
8543
8544         * cs-parser.jay: Add error 1055 report.
8545
8546 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
8547
8548         * assign.cs (Assign.DoResolve): Only do the transform of
8549         assignment into a New if the types are compatible, if not, fall
8550         through and let the implicit code deal with the errors and with
8551         the necessary conversions. 
8552
8553 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
8554
8555         * cs-parser.jay: Add error 1031 report.
8556
8557         * cs-tokenizer.cs: Add location for error 1038.
8558
8559 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8560
8561         * cs-parser.jay: Add error 1016 report.
8562
8563 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8564
8565         * cs-parser.jay: Add errors 1575,1611 report.
8566
8567 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8568
8569         * cs-parser.jay: Add error 1001 report.
8570
8571 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8572
8573         Fix #68850
8574         * attribute.cs (GetMarshal): Add method argument for
8575         caller identification.
8576
8577         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
8578         agument for GetMarshal and RuntimeMissingSupport.
8579
8580 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8581
8582         * attribute.cs (ExtractSecurityPermissionSet): Removed
8583         TypeManager.code_access_permission_type.
8584
8585         * typemanager.cs: Removed TypeManager.code_access_permission_type.
8586
8587 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
8588
8589         * expression.cs (LocalVariableReference.DoResolveLValue): Check
8590         for obsolete use of a variable here.   Fixes regression on errors
8591         cs0619-25 and cs0619-26.
8592
8593 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
8594
8595         Fix #62358, implemented security attribute encoding.
8596
8597         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
8598         Tests permitted SecurityAction for assembly or other types.
8599         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
8600         data from SecurityPermissionAttribute to PermisionSet class.
8601
8602         * class.cs (ApplyAttributeBuilder): Added special handling
8603         for System.Security.Permissions.SecurityAttribute based types.
8604
8605         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
8606         special handling for System.Security.Permissions.SecurityAttribute
8607         based types.
8608
8609         * enum.cs (ApplyAttributeBuilder): Added special handling
8610         for System.Security.Permissions.SecurityAttribute based types.
8611
8612         * parameter.cs (ApplyAttributeBuilder): Added special handling
8613         for System.Security.Permissions.SecurityAttribute based types.
8614
8615         * rootcontext.cs: Next 2 core types.
8616
8617         * typemanager.cs (TypeManager.security_permission_attr_type):
8618         Built in type for the SecurityPermission Attribute.
8619         (code_access_permission_type): Build in type.
8620
8621 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
8622
8623         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
8624         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
8625         all of this information into
8626         EmitContext.EmitCapturedVariableInstance.
8627         
8628         * codegen.cs (EmitCapturedVariableInstance): move here the
8629         funcionality of emitting an ldarg.0 in the presence of a
8630         remapping.   This centralizes the instance emit code.
8631
8632         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
8633         then emit a load of this: it means that we have reached the
8634         topmost ScopeInfo: the one that contains the pointer to the
8635         instance of the class hosting the anonymous method.
8636
8637         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
8638         captures to the topmost CaptureContext.
8639
8640 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
8641
8642         * expression.cs (LocalVariableReference): Move the knowledge about
8643         the iterators into codegen's EmitCapturedVariableInstance.
8644
8645 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
8646
8647         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
8648         all code paths return a value from an anonymous method (it is the
8649         same as the 161 error, but for anonymous methods).
8650
8651 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
8652
8653         The introduction of anonymous methods in the compiler changed
8654         various ways of doing things in the compiler.  The most
8655         significant one is the hard split between the resolution phase
8656         and the emission phases of the compiler.
8657
8658         For instance, routines that referenced local variables no
8659         longer can safely create temporary variables during the
8660         resolution phase: they must do so from the emission phase,
8661         since the variable might have been "captured", hence access to
8662         it can not be done with the local-variable operations from the runtime.
8663         
8664         * statement.cs 
8665
8666         (Block.Flags): New flag `IsTopLevel' to indicate that this block
8667         is a toplevel block.
8668
8669         (ToplevelBlock): A new kind of Block, these are the blocks that
8670         are created by the parser for all toplevel method bodies.  These
8671         include methods, accessors and anonymous methods.
8672
8673         These contain some extra information not found in regular blocks:
8674         A pointer to an optional CaptureContext (for tracking captured
8675         local variables and parameters).  A pointer to the parent
8676         ToplevelBlock.
8677         
8678         (Return.Resolve): Catch missmatches when returning a value from an
8679         anonymous method (error 1662).
8680         Invoke NeedReturnLabel from the Resolve phase instead of the emit
8681         phase.
8682
8683         (Break.Resolve): ditto.
8684
8685         (SwitchLabel): instead of defining the labels during the
8686         resolution phase, we now turned the public ILLabel and ILLabelCode
8687         labels into methods called GetILLabelCode() and GetILLabel() that
8688         only define the label during the Emit phase.
8689
8690         (GotoCase): Track the SwitchLabel instead of the computed label
8691         (its contained therein).  Emit the code by using
8692         SwitchLabel.GetILLabelCode ().
8693
8694         (LocalInfo.Flags.Captured): A new flag has been introduce to track
8695         whether the Local has been captured or not.
8696
8697         (LocalInfo.IsCaptured): New property, used to tell whether the
8698         local has been captured.
8699         
8700         * anonymous.cs: Vastly updated to contain the anonymous method
8701         support.
8702
8703         The main classes here are: CaptureContext which tracks any
8704         captured information for a toplevel block and ScopeInfo used to
8705         track the activation frames for various local variables.   
8706
8707         Each toplevel block has an optional capture context associated
8708         with it.  When a method contains an anonymous method both the
8709         toplevel method and the anonymous method will create a capture
8710         context.   When variables or parameters are captured, they are
8711         recorded on the CaptureContext that owns them, for example:
8712
8713         void Demo () {
8714              int a;
8715              MyDelegate d = delegate {
8716                  a = 1;
8717              }
8718         }
8719
8720         Here `a' will be recorded as captured on the toplevel
8721         CapturedContext, the inner captured context will not have anything
8722         (it will only have data if local variables or parameters from it
8723         are captured in a nested anonymous method.
8724
8725         The ScopeInfo is used to track the activation frames for local
8726         variables, for example:
8727
8728         for (int i = 0; i < 10; i++)
8729                 for (int j = 0; j < 10; j++){
8730                    MyDelegate d = delegate {
8731                         call (i, j);
8732                    }
8733                 }
8734
8735         At runtime this captures a single captured variable `i', but it
8736         captures 10 different versions of the variable `j'.  The variable
8737         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
8738         recorded on a child.  
8739
8740         The toplevel ScopeInfo will also track information like the `this'
8741         pointer if instance variables were referenced (this is necessary
8742         as the anonymous method lives inside a nested class in the host
8743         type of the method). 
8744
8745         (AnonymousMethod): Expanded to track the Toplevel, implement
8746         `AnonymousMethod.Compatible' to tell whether an anonymous method
8747         can be converted to a target delegate type. 
8748
8749         The routine now also produces the anonymous method content
8750
8751         (AnonymousDelegate): A helper class that derives from
8752         DelegateCreation, this is used to generate the code necessary to
8753         produce the delegate for the anonymous method that was created. 
8754
8755         * assign.cs: API adjustments for new changes in
8756         Convert.ImplicitStandardConversionExists.
8757
8758         * class.cs: Adjustments to cope with the fact that now toplevel
8759         blocks are of type `ToplevelBlock'. 
8760
8761         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
8762         insteda of standard blocks.
8763
8764         Flag errors if params arguments are passed to anonymous methods.
8765
8766         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
8767         `CurrentAnonymousMethod' which points to the current Anonymous
8768         Method.  The variable points to the AnonymousMethod class that
8769         holds the code being compiled.  It is set in the new EmitContext
8770         created for the anonymous method.
8771
8772         (EmitContext.Phase): Introduce a variable and an enumeration to
8773         assist in enforcing some rules about when and where we are allowed
8774         to invoke certain methods (EmitContext.NeedsReturnLabel is the
8775         only one that enfonces this right now).
8776
8777         (EmitContext.HaveCaptureInfo): new helper method that returns
8778         whether we have a CapturedContext initialized.
8779
8780         (EmitContext.CaptureVariable): New method used to register that a
8781         LocalInfo must be flagged for capturing. 
8782
8783         (EmitContext.CapturedParameter): New method used to register that a
8784         parameters must be flagged for capturing. 
8785         
8786         (EmitContext.CapturedField): New method used to register that a
8787         field must be flagged for capturing. 
8788
8789         (EmitContext.HaveCapturedVariables,
8790         EmitContext.HaveCapturedFields): Return whether there are captured
8791         variables or fields. 
8792
8793         (EmitContext.EmitMethodHostInstance): This is used to emit the
8794         instance for the anonymous method.  The instance might be null
8795         (static methods), this (for anonymous methods that capture nothing
8796         and happen to live side-by-side with the current method body) or a
8797         more complicated expression if the method has a CaptureContext.
8798
8799         (EmitContext.EmitTopBlock): Routine that drives the emission of
8800         code: it will first resolve the top block, then emit any metadata
8801         and then emit the code.  The split is done so that we can extract
8802         any anonymous methods and flag any captured variables/parameters.
8803         
8804         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
8805         during this phase, the ILGenerator should not be used as labels
8806         and local variables declared here might not be accessible to any
8807         code that is part of an anonymous method.  
8808
8809         Exceptions to this include the temporary variables that are
8810         created by some statements internally for holding temporary
8811         variables. 
8812         
8813         (EmitContext.EmitMeta): New routine, in charge of emitting all the
8814         metadata for a cb
8815
8816         (EmitContext.TemporaryReturn): This method is typically called
8817         from the Emit phase, and its the only place where we allow the
8818         ReturnLabel to be defined other than the EmitMeta.  The reason is
8819         that otherwise we would have to duplicate a lot of logic in the
8820         Resolve phases of various methods that today is on the Emit
8821         phase. 
8822
8823         (EmitContext.NeedReturnLabel): This no longer creates the label,
8824         as the ILGenerator is not valid during the resolve phase.
8825
8826         (EmitContext.EmitThis): Extended the knowledge in this class to
8827         work in anonymous methods in addition to iterators. 
8828
8829         (EmitContext.EmitCapturedVariableInstance): This emits whatever
8830         code is necessary on the stack to access the instance to a local
8831         variable (the variable will be accessed as a field).
8832
8833         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
8834         EmitContext.EmitAddressOfParameter): Routines to support
8835         parameters (not completed at this point). 
8836         
8837         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
8838         will also remove the parameters.
8839
8840         * convert.cs (Convert): Define a `ConstantEC' which points to a
8841         null.  This is just to prefity some code that uses
8842         ImplicitStandardConversion code and do not have an EmitContext
8843         handy.
8844
8845         The idea is to flag explicitly that at that point in time, it is
8846         known that the conversion will not trigger the delegate checking
8847         code in implicit conversions (which requires a valid
8848         EmitContext). 
8849
8850         Everywhere: pass new EmitContext parameter since
8851         ImplicitStandardConversionExists now requires it to check for
8852         anonymous method conversions. 
8853
8854         (Convert.ImplicitStandardConversionExists): If the type of an
8855         expression is the anonymous_method_type, and the type is a
8856         delegate, we invoke the AnonymousMethod.Compatible method to check
8857         whether an implicit conversion is possible. 
8858
8859         (Convert.ImplicitConversionStandard): Only do implicit method
8860         group conversions if the language level is not ISO_1.
8861
8862         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
8863         MethodInfo for the Invoke method.  used by Delegate and
8864         AnonymousDelegate.
8865
8866         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
8867         method conversions if the target type is a delegate.
8868
8869         Removed extra debugging nops.
8870
8871         (LocalVariableReference): Turn the `local_info' into a public
8872         field. 
8873
8874         Add `prepared' field, the same hack used for FieldExprs to cope
8875         with composed assignments, as Local variables do not necessarily
8876         operate purely on the stack as they used to: they can be captured
8877         fields. 
8878
8879         Add `temp' for a temporary result, like fields.
8880
8881         Refactor DoResolve and DoResolveLValue into DoResolveBase.
8882
8883         It now copes with Local variables that are captured and emits the
8884         proper instance variable to load it from a field in the captured
8885         case. 
8886
8887         (ParameterReference.DoResolveBase): During the resolve phase,
8888         capture parameters if we are in an anonymous method.
8889
8890         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
8891         anonymous method, use the EmitContext helper routines to emit the
8892         parameter reference.
8893
8894         * iterators.cs: Set RemapToProxy to true/false during the
8895         EmitDispose class.
8896
8897         * parameters.cs (GetParameterByName): New helper method. 
8898
8899         * typemanager.cs (anonymous_method_type) a new type that
8900         represents an anonyous method.  This is always an internal type,
8901         used as a fencepost to test against the anonymous-methodness of an
8902         expression. 
8903         
8904 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
8905
8906         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
8907         561 report.
8908         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
8909
8910 2004-11-10  Martin Baulig  <martin@ximian.com>
8911
8912         * expression.cs (Invocation.BetterFunction): If two methods have
8913         equal parameter types, but only one of them is generic, the
8914         non-generic one wins.
8915         (New.DoResolve): Don't set `is_struct' to false if we're a generic
8916         instance; just use `Type.IsValueType' to determine whether
8917         something is a struct or not.
8918         (MemberAccess.DoResolveAsTypeStep): Don't modify the `args' field,
8919         so we can be called multiple times.
8920
8921 2004-11-10  Martin Baulig  <martin@ximian.com>
8922
8923         * generic.cs (TypeParameter.DefineConstraints): New public method.
8924         (TypeParameter.CheckAccessLevel): Override this and return true.
8925         (ConstructedType.ResolveType): Renamed to DoResolveType(), don't
8926         override ResolveType() anymore.
8927         (ConstructedType.DoResolveAsTypeStep): Call DoResolveType() here.
8928
8929 2004-11-10  Martin Baulig  <martin@ximian.com>
8930
8931         * rootcontext.cs (RootContext.LookupType): If we're a nested type,
8932         call DeclSpace.ResolveNestedType() on it.
8933
8934 2004-11-10  Martin Baulig  <martin@ximian.com>
8935
8936         * support.cs (ReflectionParameters.ParameterModifier): If `gpd' is
8937         non-null, call ParameterModifier() on it.
8938
8939 2004-11-10  Martin Baulig  <martin@ximian.com>
8940
8941         * iterators.cs
8942         (Iterators): Added `current_type' and `this_type' fields.
8943         (Iterators.DefineIterator): Create a new EmitContext and store it
8944         in `ec'; compute `this_type'.
8945
8946 2004-11-10  Martin Baulig  <martin@ximian.com>
8947
8948         * typemanager.cs
8949         (TypeManager.IsPrivateAccessible): New public method.
8950         (Closure.Filter): Use IsPrivateAccessible() instead of IsEqual().
8951
8952 2004-11-10  Martin Baulig  <martin@ximian.com>
8953
8954         * class.cs (TypeContainer.DefineType): Call
8955         TypeBuilder.DefineGenericParameters() before resolving the type
8956         parameters.
8957         (MethodData.parent_method): New protected field.
8958         (MethodData..ctor): Added `MethodInfo parent_method' argument.
8959         (MethodData.Define): Compute `parent_method'.
8960
8961         * decl.cs
8962         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
8963         (MemberCore.GetClsCompliantAttributeValue): Likewise.
8964         (DeclSpace.ec): New protected field; store the EmitContext here.
8965         (DeclSpace.EmitContext): New public property.
8966         (DeclSpace.ResolveType): Un-comment from the [Obsolte] attribute.
8967         (DeclSpace.ResolveNestedType): New public method.
8968         (DeclSpace.ResolveTypeExpr): Just call ResolveAsTypeTerminal() here.
8969         (DeclSpace.NestedAccessible): Added `Type tb' argument.
8970         (DeclSpace.FamilyAccessible): Likewise.
8971         (DeclSpace.FindType): Call ResolveNestedType() for nested types.
8972         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
8973         EmitContext.
8974
8975         * delegate.cs (Delegate.Define): Store the EmitContext in the `ec'
8976         field.
8977
8978         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
8979         (Enum.Emit): Don't create a new EmitContext.
8980
8981 2004-10-18  Martin Baulig  <martin@ximian.com>
8982
8983         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
8984         `Type' directly, but call ResolveType() on it.
8985         (Catch.Resolve): Likewise.
8986         (Foreach.Resolve): Likewise.
8987
8988 2004-10-18  Martin Baulig  <martin@ximian.com>
8989
8990         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
8991         `Type' directly, but call ResolveType() on it.
8992         (Probe.DoResolve): Likewise.
8993         (ArrayCreation.LookupType): Likewise.
8994         (TypeOf.DoResolve): Likewise.
8995         (SizeOf.DoResolve): Likewise.
8996
8997 2004-10-18  Raja R Harinath  <rharinath@novell.com>
8998
8999         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
9000         the ResolveType.
9001
9002 2004-10-17  John Luke  <john.luke@gmail.com>
9003
9004         * class.cs (Operator.GetSignatureForError): use CSharpName
9005
9006         * parameter.cs (Parameter.GetSignatureForError): Returns
9007         correct name even if was not defined.
9008
9009 2004-10-13  Raja R Harinath  <rharinath@novell.com>
9010
9011         Fix #65816.
9012         * class.cs (TypeContainer.EmitContext): New property.
9013         (DefineNestedTypes): Create an emitcontext for each part.
9014         (MethodCore.DoDefineParameters): Use container's emitcontext.
9015         Pass type array to InternalParameters.
9016         (MemberBase.DoDefine): Use container's emitcontext.
9017         (FieldMember.Define): Likewise.
9018         (Event.Define): Likewise.
9019         (SetMethod.GetParameterInfo): Change argument to EmitContext.
9020         Pass type array to InternalParameters.
9021         (SetIndexerMethod.GetParameterInfo): Likewise.
9022         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
9023         * delegate.cs (Define): Pass emitcontext to
9024         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
9025         array to InternalParameters.
9026         * expression.cs (ParameterReference.DoResolveBase): Pass
9027         emitcontext to GetParameterInfo.
9028         (ComposedCast.DoResolveAsTypeStep): Remove check on
9029         ec.ResolvingTypeTree.
9030         * parameter.cs (Parameter.Resolve): Change argument to
9031         EmitContext.  Use ResolveAsTypeTerminal.
9032         (Parameter.GetSignature): Change argument to EmitContext.
9033         (Parameters.ComputeSignature): Likewise.
9034         (Parameters.ComputeParameterTypes): Likewise.
9035         (Parameters.GetParameterInfo): Likewise.
9036         (Parameters.ComputeAndDefineParameterTypes): Likewise.
9037         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
9038         * support.cs (InternalParameters..ctor): Remove variant that takes
9039         a DeclSpace.
9040         * typemanager.cs (system_intptr_expr): New.
9041         (InitExpressionTypes): Initialize it.
9042
9043 2004-10-12  Chris Toshok  <toshok@ximian.com>
9044
9045         * cs-parser.jay: fix location for try_statement and catch_clause.
9046
9047 2004-10-18  Martin Baulig  <martin@ximian.com>
9048
9049         * class.cs (FieldMember.Define): Don't access the TypeExpr's
9050         `Type' directly, but call ResolveType() on it.
9051         (MemberBase.DoDefine): Likewise.
9052
9053         * expression.cs (New.DoResolve): Don't access the TypeExpr's
9054         `Type' directly, but call ResolveType() on it.
9055         (ComposedCast.DoResolveAsTypeStep): Likewise.
9056
9057         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
9058         `Type' directly, but call ResolveType() on it.
9059
9060 2004-10-17  John Luke  <john.luke@gmail.com>
9061
9062         * class.cs (Operator.GetSignatureForError): use CSharpName
9063
9064         * parameter.cs (Parameter.GetSignatureForError): Returns
9065         correct name even if was not defined.
9066
9067 2004-10-13  Raja R Harinath  <rharinath@novell.com>
9068
9069         Fix #65816.
9070         * class.cs (TypeContainer.EmitContext): New property.
9071         (DefineNestedTypes): Create an emitcontext for each part.
9072         (MethodCore.DoDefineParameters): Use container's emitcontext.
9073         Pass type array to InternalParameters.
9074         (MemberBase.DoDefine): Use container's emitcontext.
9075         (FieldMember.Define): Likewise.
9076         (Event.Define): Likewise.
9077         (SetMethod.GetParameterInfo): Change argument to EmitContext.
9078         Pass type array to InternalParameters.
9079         (SetIndexerMethod.GetParameterInfo): Likewise.
9080         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
9081         * delegate.cs (Define): Pass emitcontext to
9082         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
9083         array to InternalParameters.
9084         * expression.cs (ParameterReference.DoResolveBase): Pass
9085         emitcontext to GetParameterInfo.
9086         (ComposedCast.DoResolveAsTypeStep): Remove check on
9087         ec.ResolvingTypeTree.
9088         * parameter.cs (Parameter.Resolve): Change argument to
9089         EmitContext.  Use ResolveAsTypeTerminal.
9090         (Parameter.GetSignature): Change argument to EmitContext.
9091         (Parameters.ComputeSignature): Likewise.
9092         (Parameters.ComputeParameterTypes): Likewise.
9093         (Parameters.GetParameterInfo): Likewise.
9094         (Parameters.ComputeAndDefineParameterTypes): Likewise.
9095         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
9096         * support.cs (InternalParameters..ctor): Remove variant that takes
9097         a DeclSpace.
9098         * typemanager.cs (system_intptr_expr): New.
9099         (InitExpressionTypes): Initialize it.
9100
9101 2004-10-12  Chris Toshok  <toshok@ximian.com>
9102
9103         * cs-parser.jay: fix location for try_statement and catch_clause.
9104
9105 2004-10-07  Raja R Harinath  <rharinath@novell.com>
9106
9107         More DeclSpace.ResolveType avoidance.
9108         * decl.cs (MemberCore.InUnsafe): New property.
9109         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
9110         with newly created EmitContext.
9111         (FieldMember.Define): Likewise.
9112         * delegate.cs (Delegate.Define): Likewise.
9113         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
9114         only if normal name-lookup fails.
9115         (TypeExpr.DoResolve): Enable error-checking.
9116         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
9117         (SizeOf.DoResolve): Likewise.
9118         (ComposedCast.DoResolveAsTypeStep): Likewise.
9119         (StackAlloc.DoResolve): Likewise.
9120         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
9121         (Block.Unsafe): New property.
9122         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
9123         (Unsafe): Set 'unsafe' flag of contained block.
9124         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
9125         (Fixed.Resolve): Likewise.
9126         (Catch.Resolve): Likewise.
9127         (Using.ResolveLocalVariableDecls): Likewise.
9128         (Foreach.Resolve): Likewise.
9129
9130 2004-10-05  John Luke <john.luke@gmail.com>
9131
9132         * cs-parser.jay: add location to error CS0175
9133
9134 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
9135
9136         * ecore.cs (Expression.Constantity): Add support for turning null
9137         into a constant.
9138
9139         * const.cs (Const.Define): Allow constants to be reference types
9140         as long as the value is Null.
9141
9142 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
9143
9144         * namespace.cs (NamespaceEntry.Using): No matter which warning
9145         level is set, check if this namespace name has already been added.
9146
9147 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
9148
9149         * expression.cs: reftype [!=]= null should always use br[true,false].
9150         # 67410
9151
9152 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
9153
9154         Fix #67108
9155         * attribute.cs: Enum conversion moved to 
9156         GetAttributeArgumentExpression to be applied to the all
9157         expressions.
9158
9159 2004-10-01  Raja R Harinath  <rharinath@novell.com>
9160
9161         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
9162         * class.c (TypeContainer.DefineType): Flag error if
9163         base types aren't accessible due to access permissions.
9164         * decl.cs (DeclSpace.ResolveType): Move logic to
9165         Expression.ResolveAsTypeTerminal.
9166         (DeclSpace.ResolveTypeExpr): Thin layer over
9167         Expression.ResolveAsTypeTerminal.
9168         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
9169         Refactor code into NestedAccess.  Use it.
9170         (DeclSpace.NestedAccess): New.
9171         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
9172         argument to silence errors.  Check access permissions.
9173         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
9174         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
9175         (Cast.DoResolve): Likewise.
9176         (New.DoResolve): Likewise.
9177         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
9178         (TypeOf.DoResolve): Likewise.
9179
9180         * expression.cs (Invocation.BetterConversion): Return the Type of
9181         the better conversion.  Implement section 14.4.2.3 more faithfully.
9182         (Invocation.BetterFunction): Make boolean.  Make correspondence to
9183         section 14.4.2.2 explicit.
9184         (Invocation.OverloadResolve): Update.
9185         (Invocation): Remove is_base field.
9186         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
9187         (Invocation.Emit): Likewise.
9188
9189 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
9190
9191         * cs-parser.jay: Reverted 642 warning fix.
9192
9193 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9194
9195         Fix bug #66615
9196         * decl.cs (FindMemberWithSameName): Indexer can have more than
9197         1 argument.
9198
9199 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9200
9201         * expression.cs (LocalVariableReference.DoResolveLValue):
9202         Do not report warning 219 for out values.
9203         (EmptyExpression.Null): New member to avoid extra allocations.
9204
9205 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9206
9207         * cs-parser.jay: Fix wrong warning 642 report.
9208
9209         * cs-tokenizer.cs (CheckNextToken): New helper;
9210         Inspect next character if is same as expected.
9211
9212 2004-09-23  Martin Baulig  <martin@ximian.com>
9213
9214         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
9215         (Convert.ImplicitReferenceConversionExists): Likewise.
9216
9217 2004-11-09  Raja R Harinath  <rharinath@novell.com>
9218
9219         * Makefile (DISTFILES): Comment out a few missing files.
9220
9221 2004-10-29  Raja R Harinath  <rharinath@novell.com>
9222
9223         * Makefile (bootstrap_libs,bootstrap_libfiles): New.
9224         (bootstrap-libs): New target.  Invokes the net_2_0_bootstrap profile.
9225         (gmcs.exe): Invoke bootstrap-libs.
9226         (clean-local): Clean the net_2_0_bootstrap profile too.
9227         (PROGRAM_INSTALL_DIR): New.
9228         (install-local): Use it.
9229
9230 2004-10-13  Martin Baulig  <martin@ximian.com>
9231
9232         * generic.cs (TypeManager.InflatedConstraints): New nested class.
9233         (TypeParameter.DefineType): If we're a method type parameter and
9234         that method is overriding something, "inflate" its constraints.
9235
9236 2004-10-12  Martin Baulig  <martin@ximian.com>
9237
9238         * expression.cs (MemberAccess.DoResolve): If we're a SimpleName
9239         and have type arguments, create and resolve a ConstructedType.
9240
9241 2004-10-12  Martin Baulig  <martin@ximian.com>
9242
9243         * decl.cs (MemberCache.FindMemberToOverride): Use
9244         TypeManager.IsEqual() to compare the parameters and Type.Equals()
9245         to compare the invocationType.
9246
9247         * typemanager.cs (TypeManager.IsEqual): Added support for arrays.
9248         When comparing two type parameters, only do the signature-only
9249         comparision for method type parameters.
9250
9251 2004-10-11  Martin Baulig  <martin@ximian.com>
9252
9253         * report.cs: Don't make --fatal abort on warnings, we have
9254         -warnaserror for that.
9255
9256 2004-10-11  Martin Baulig  <martin@ximian.com>
9257
9258         * typemanager.cs
9259         (TypeManager.IsEqualGenericType): Removed, use IsEqual() instead.
9260         (TypeManager.IsEqual): Call ourself recursively instead of using
9261         Type.IsEqual(). 
9262
9263 2004-10-11  Martin Baulig  <martin@ximian.com>
9264
9265         * class.cs (TypeContainer.DefineType): Only call TypeParameter.Define()
9266         on our own type parameters, not on the ones we inherit from a containing
9267         class.
9268
9269         * expression.cs (Invocation.InferType): Use `==', not `Equals()' for
9270         the comparision.
9271
9272         * generic.cs (TypeParameter.Define): We may only be called once.
9273
9274         * pending.cs (Pending.InterfaceMethod): Call TypeManager.Real_IsEqual()
9275         instead of TypeManager.IsEqual().
9276
9277 2004-09-28  Martin Baulig  <martin@ximian.com>
9278
9279         * generic.cs
9280         (GenericConstraints.EffectiveBaseClass): New public property.
9281         (TypeParameter.GenericConstraints): New public property.
9282         (ConstructedType.CheckConstraints): Improved.
9283
9284         * convert.cs (Convert.TypeParam_EffectiveBaseType): New private method.
9285         (Convert.TypeParameterConversion): New private method; use this in
9286         ImplicitReferenceConversion() and ImplicitReferenceConversionExists()
9287         for all conversions related to type parameters.
9288
9289 2004-09-24  Martin Baulig  <martin@ximian.com>
9290
9291         * convert.cs (Convert.ImplicitReferenceConversion): Added implicit
9292         type parameter conversions for type parameters which are known to
9293         be reference types.
9294
9295 2004-09-24  Martin Baulig  <martin@ximian.com>
9296
9297         * generic.cs (GenericConstraints): Added `IsReferenceType' and
9298         `IsValueType' properties.
9299
9300         * support.cs (ReflectionConstraints): Use
9301         Type.GetGenericParameterConstraints() instead of the old hack.
9302
9303 2004-09-24  Martin Baulig  <martin@ximian.com>
9304
9305         * generic.cs (GenericConstraints): Moved here and made it an
9306         abstract class.
9307
9308         * support.cs (GenericConstraints): Moved to generic.cs.
9309
9310 2004-09-24  Martin Baulig  <martin@ximian.com>
9311
9312         * support.cs
9313         (ReflectionConstraints): Un-nested this class and made it public.
9314
9315         * typemanager.cs
9316         (TypeManager.GetTypeParameterConstraints): New public method.
9317         (TypeManager.HasConstructorConstraint): Use the attributes.
9318
9319 2004-09-24  Martin Baulig  <martin@ximian.com>
9320
9321         * support.cs (GenericConstraints): Replaced `HasConstructor',
9322         `IsReferenceType' and `IsValueType' with `Attributes'.
9323         (ReflectionParameters.ReflectionConstraints): Removed the Create()
9324         method and made the .ctor public.
9325
9326         * generic.cs (Constraints.Attributes): New public property.
9327         (Constraints): Renamed `HasConstructor' -> `HasConstructorConstraint',
9328         `IsReferenceType' -> `HasReferenceTypeConstraint' and
9329         `IsValueType' -> `HasValueTypeConstraint'.
9330
9331 2004-09-23  Martin Baulig  <martin@ximian.com>
9332
9333         * generic.cs (Constraints): Reflect latest runtime changes.
9334
9335 2004-09-23  Martin Baulig  <martin@ximian.com>
9336
9337         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
9338         (Convert.ImplicitReferenceConversionExists): Likewise.
9339
9340 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9341
9342         * class.cs (Operator.Define): Add error 448 and 559 report.
9343         
9344 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9345
9346         * class.cs (MemberBase.IsTypePermitted): New protected
9347         method for checking error CS0610.
9348
9349 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9350
9351         * class.cs (TypeContainer.HasExplicitLayout): New property
9352         Returns whether container has StructLayout attribute set Explicit.
9353         (FieldMember): New abstract class for consts and fields.
9354         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
9355         (Field): Reuse FieldMember.
9356
9357         * const.cs (Const): Reuse FieldMember.
9358
9359         * rootcontext.cs: EmitConstants call moved to class.
9360
9361 2004-09-22  Martin Baulig  <martin@ximian.com>
9362
9363         Marek and me just fixed one of our oldest bugs: #28562 :-)
9364
9365         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
9366
9367         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
9368         we're an EnumConstant, just return that.
9369         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
9370         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
9371         to get the value which'll actually be written into the attribute.
9372         However, we have to use GetValue() to access the attribute's value
9373         in the compiler.        
9374
9375 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9376
9377         * constant.cs (Constant.IsNegative): New abstract property
9378         IsNegative.
9379
9380         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
9381         (StackAlloc.DoResolve): Reused IsNegative.
9382
9383 2004-09-22  Martin Baulig  <martin@ximian.com>
9384
9385         * typemanager.cs (TypeManager.LookupGenericTypeContainer): New
9386         public method; like LookupTypeContainer, but also works for
9387         generic instances.
9388
9389         * report.cs (Report.SymbolRelatedToPreviousError): Use
9390         TypeManager.LookupGenericTypeContainer().       
9391
9392 2004-09-22  Martin Baulig  <martin@ximian.com>
9393
9394         Thanks to Peter Sestoft for this bug report.
9395
9396         * expression.cs (Conditional): If both the `trueExpr' and the
9397         `falseExpr' is a NullLiteral, return a NullLiteral.
9398
9399 2004-09-22  Martin Baulig  <martin@ximian.com>
9400
9401         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
9402         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
9403         for the "get_Current" call.
9404
9405 2004-09-21  Martin Baulig  <martin@ximian.com>
9406
9407         * convert.cs (Convert.ImplicitReferenceConversion): When
9408         converting to an interface type, first check whether we're
9409         converting from a reference type.
9410
9411 2004-09-14  Martin Baulig  <martin@ximian.com>
9412
9413         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
9414
9415 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
9416
9417         Fixed bug #61902
9418         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
9419         called and is obsolete then this member suppress message
9420         when call is inside next [Obsolete] method or type.
9421
9422         * expression.cs: Use TestObsoleteMethodUsage member.
9423
9424 2004-09-14  Martin Baulig  <martin@ximian.com>
9425
9426         * genericparser.cs: Removed.
9427
9428 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
9429
9430         * class.cs (MethodCore.CheckBase): Fix bug #65757.
9431
9432 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
9433
9434         * attribute.cs (Attribute.Resolve): Add error 653 report.
9435
9436         * class.cs (Class.ApplyAttributeBuilder): Add error 641
9437         report.
9438         (Method.ApplyAttributeBuilder): Add error 685 report.
9439         (Operator.Define): Add error 564 report.
9440
9441         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
9442
9443         * expression.cs (Invocation.DoResolve): Add error
9444         245 and 250 report.
9445
9446         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
9447         error 674 report.
9448
9449 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9450
9451         * class.cs (ConstructorInitializer.Resolve):
9452         Wrong error number (515->516).
9453
9454 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9455
9456         * class.cs (Indexer.Define): Add error 631 report.
9457
9458 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9459
9460         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
9461
9462 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9463
9464         * expression.cs (Probe.DoResolve): Add error CS0241 report.
9465
9466 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
9467
9468         * cs-parser.jay: Added error CS0241 report.
9469
9470 2004-09-10  Raja R Harinath  <rharinath@novell.com>
9471
9472         * cs-parser.jay (fixed_statement): Introduce a scope for the
9473         declaration in the 'fixed' statement.
9474
9475 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9476
9477         * cs-parser.jay: Added CS0230 error report.
9478
9479 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9480
9481         * cs-parser.jay: Added errors CS0231 and CS0257 report.
9482
9483 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9484
9485         * expression.cs (Argument.Resolve): Added error CS0192 and
9486         CS0199 report.
9487
9488 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9489
9490         C# 2.0 #pragma warning feature
9491
9492         * cs-tokenizer.cs (PreProcessPragma): New method; 
9493         Handles #pragma directive.
9494
9495         * report.cs (WarningRegions): New class; Support
9496         class for #pragma warning directive. It tests whether
9497         warning is enabled for a given line.
9498
9499 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
9500
9501         * const.cs: Add more descriptive error report, tahnks to
9502         Sebastien. 
9503
9504 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
9505
9506         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
9507
9508 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
9509
9510         * expression.cs: Apply patch from Ben: Remove dead code from
9511         ArrayCreation, and remove the TurnintoConstant call in const.cs,
9512         as that code just threw an exception anwyays.
9513
9514         * const.cs: Remove the call to the turnintoconstant, for details
9515         see bug: #63144
9516         
9517         * literal.cs: The type of the null-literal is the null type;  So
9518         we use a placeholder type (literal.cs:System.Null, defined here)
9519         for it.
9520
9521         * expression.cs (Conditional.DoResolve): Remove some old code that
9522         is no longer needed, conversions have been fixed.
9523
9524         (ArrayCreationExpression.DoResolve): Return false if we fail to
9525         resolve the inner expression.
9526
9527 2004-09-07  Raja R Harinath  <rharinath@novell.com>
9528
9529         Fix test-290.cs.
9530         * cs-parser.jay (delegate_declaration): Record a delegate
9531         declaration as a type declaration.
9532         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
9533
9534 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
9535
9536         * parameter.cs: Do not crash if the type can not be resolved. 
9537
9538         * expression.cs: Report errors with unsafe pointers, fixes #64896
9539
9540 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
9541
9542         * expression.cs: Pointer arith always needs to do a conv.i
9543         if the operand is a long. fix 65320
9544
9545 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
9546
9547         Fixed cs0619-37.cs, cs0619-38.cs
9548
9549         * enum.cs (GetObsoleteAttribute): Removed.
9550
9551         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
9552         on Enum member is double staged. The first is tested member
9553         and then enum.
9554
9555 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
9556
9557         Fixed #56986, #63631, #65231
9558
9559         * class.cs: (TypeContainer.AddToMemberContainer): New method,
9560         adds member to name container.
9561         (TypeContainer.AddToTypeContainer): New method, adds type to
9562         name container.
9563         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
9564         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
9565         AddOperator): Simplified by reusing AddToMemberContainer.
9566         (TypeContainer.UserDefinedStaticConstructor): Changed to property
9567         instead of field.
9568         (Method.CheckForDuplications): Fixed implementation to test all
9569         possibilities.
9570         (MemberBase): Detection whether member is explicit interface
9571         implementation is now in constructor.
9572         (MemberBase.UpdateMemberName): Handles IndexerName.
9573         (Accessor): Changed to keep also location information.
9574         (AbstractPropertyEventMethod): Is derived from MemberCore.
9575         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
9576         will be emited or not.
9577         (PropertyBase.AreAccessorsDuplicateImplementation):
9578         Tests whether accessors are not in collision with some method.
9579         (Operator): Is derived from MethodCore to simplify common
9580         operations.
9581
9582         * decl.cs (Flags.TestMethodDuplication): Test for duplication
9583         must be performed.
9584         (DeclSpace.AddToContainer): Adds the member to defined_names
9585         table. It tests for duplications and enclosing name conflicts.
9586
9587         * enum.cs (EnumMember): Clean up to reuse the base structures
9588
9589 2004-09-03  Martin Baulig  <martin@ximian.com>
9590
9591         Merged latest changes into gmcs.  Please keep this comment in
9592         here, it makes it easier for me to see what changed in MCS since
9593         the last time I merged.
9594
9595 2004-09-03  Martin Baulig  <martin@ximian.com>
9596
9597         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
9598         into TypeContainer, to make partial classes work again.
9599
9600 2004-09-03  Martin Baulig  <martin@ximian.com>
9601
9602         * rootcontext.cs (RootContext.V2): Removed.
9603
9604 2004-03-23  Martin Baulig  <martin@ximian.com>
9605
9606         * expression.cs (Invocation.OverloadResolve): Added `bool
9607         may_fail' argument and use it instead of the Location.IsNull() hack.
9608
9609 2004-09-09  Martin Baulig  <martin@ximian.com>
9610
9611         * cs-parser.jay (namespace_declaration): Fixed CS0134 reporting.
9612
9613 2004-09-09  Martin Baulig  <martin@ximian.com>
9614
9615         * generic.cs (TypeParameter.DefineType): Added support for
9616         explicit interface methods.
9617
9618 2004-09-09  Martin Baulig  <martin@ximian.com>
9619
9620         * README.Changes: New document.  Started to list important changes
9621         between MCS and GMCS here.
9622
9623 2004-09-08  Martin Baulig  <martin@ximian.com>
9624
9625         * class.cs
9626         (TypeContainer.CheckRecursiveDefinition): New protected method.
9627         (TypeContainer.DefineType): Move the CS0146 check into
9628         CheckRecursiveDefinition().     
9629
9630 2004-09-06  Martin Baulig  <martin@ximian.com>
9631
9632         * generic.cs (ConstructedType.CheckConstraints): Allow builtin
9633         types for the constructor constraint.
9634
9635 2004-09-03  Martin Baulig  <martin@ximian.com>
9636
9637         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
9638         into TypeContainer, to make partial classes work again.
9639
9640 2004-09-03  Martin Baulig  <martin@ximian.com>
9641
9642         * rootcontext.cs (RootContext.V2): Removed.
9643
9644 2004-03-23  Martin Baulig  <martin@ximian.com>
9645
9646         * expression.cs (Invocation.OverloadResolve): Added `bool
9647         may_fail' argument and use it instead of the Location.IsNull() hack.
9648
9649 2004-09-03  Martin Baulig  <martin@ximian.com>
9650
9651         Merged latest changes into gmcs.  Please keep this comment in
9652         here, it makes it easier for me to see what changed in MCS since
9653         the last time I merged.
9654
9655 2004-09-03  Raja R Harinath  <rharinath@novell.com>
9656
9657         Fix #61128.
9658         * expression.cs (BetterConversion): Don't allow either conversion 
9659         to be null.  Remove redundant implicit conversion test when 'q ==
9660         null' -- when this function is invoked, we already know that the
9661         implicit conversion exists.
9662         (BetterFunction): Assume that 'best' is non-null.  Remove
9663         redundant reimplementation of IsApplicable when 'best' is null.
9664         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
9665         number of arguments.
9666         (IsAncestralType): Extract from OverloadResolve.
9667         (OverloadResolve): Make robust to the MethodGroupExpr being
9668         unsorted.  Implement all the logic of Section 14.5.5.1, and
9669         support overloading of methods from multiple applicable types.
9670         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
9671
9672         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
9673         (RealError, Warning): Append type of report to related symbol.
9674
9675 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
9676
9677         * enum.cs: Fixed CLS-Compliance checks for enum members.
9678         Error tests cs3008-8.cs, cs3014-8.cs
9679
9680 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
9681
9682         Fixed bug #62342, #63102
9683         * class.cs: ImplementIndexer uses member.IsExplicitImpl
9684         like ImplementMethod.
9685
9686 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
9687
9688         * attribute.cs (Attribute.GetAttributeArgumentExpression):
9689         Fixed bug #65170.
9690
9691 2004-09-02  Martin Baulig  <martin@ximian.com>
9692
9693         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
9694         TypeManager.GetArgumentTypes() rather than calling GetParameters()
9695         on the MethodBase.
9696
9697 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
9698
9699         C# 2.0 Static classes implemented
9700
9701         * class.cs (TypeContainer): instance_constructors,
9702         initialized_fields, initialized_static_fields,
9703         default_constructor, base_inteface_types are protected to be
9704         accessible from StaticClass.
9705         (TypeContainer.DefineDefaultConstructor): New virtual method
9706         for custom default constructor generating
9707         (StaticClass): New class to handle "Static classes" feature.
9708
9709         * cs-parser.jay: Handle static keyword on class like instance
9710         of StaticClass.
9711
9712         * driver.cs: Added "/langversion" command line switch with two
9713         options (iso-1, default).
9714
9715 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
9716
9717         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
9718
9719 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
9720
9721         * delegate.cs: Style.
9722
9723 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
9724
9725         * delegate.cs: Add seperate instance expr field for miguel.
9726
9727 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
9728
9729         * PointerArithmetic (Resolve): make sure we are not doing
9730         pointer arith on void*. Also, make sure we are resolved
9731         by not setting eclass until resolve.
9732
9733         All callers: Make sure that PointerArithmetic gets resolved.
9734
9735 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
9736
9737         * ArrayCreation (LookupType): If the type does not resolve 
9738         to an array, give an error.
9739
9740 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
9741
9742         * statement.cs (Try.Resolve): Fixed bug #64222
9743
9744 2004-08-27  Martin Baulig  <martin@ximian.com>
9745
9746         * class.cs
9747         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
9748         crash here.     
9749
9750 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
9751
9752         * ecore.cs (Constantify): Get underlying type via
9753         System.Enum.GetUnderlyingType to avoid StackOverflow on the
9754         Windows in special cases.
9755
9756 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
9757
9758         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
9759         for obtaining also private methods.
9760         (GetRemoveMethod): Used GetRemoveMethod (true)
9761         for obtaining also private methods.
9762
9763 2004-09-02  Martin Baulig  <martin@ximian.com>
9764
9765         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
9766         TypeManager.GetArgumentTypes() rather than calling GetParameters()
9767         on the MethodBase.
9768
9769 2004-08-27  Martin Baulig  <martin@ximian.com>
9770
9771         * class.cs
9772         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
9773         crash here.     
9774
9775 2004-08-25  Martin Baulig  <martin@ximian.com>
9776
9777         * support.cs (ReflectionParameters..ctor): If this is a generic
9778         method, retrieve and store its type parameters.
9779         (InternalParameters..ctor): Added `TypeParameter[]' argument.
9780         (ReflectionParameters.GenericConstraints): The argument specifies
9781         the type parameter, not the method parameter.
9782         (InternalParameters.GenericConstraints): Likewise.
9783
9784         * generic.cs (TypeParameter.DefineType): Correctly handle
9785         constraints wrt. generic methods in interfaces and their
9786         implementations.        
9787
9788 2004-08-24  Martin Baulig  <martin@ximian.com>
9789
9790         * generic.cs (TypeParameter.IsSubclassOf): New public method.
9791         (Constraints.IsSubclassOf): New internal method.
9792
9793         * typemanager.cs (TypeManager.FindMembers): Added special support
9794         for GenericTypeParameterBuilder's.      
9795         (TypeManager.IsSubclassOf, IsFamilyAccessible): Added support for
9796         type parameters.
9797
9798 2004-08-24  Martin Baulig  <martin@ximian.com>
9799
9800         * typemanager.cs
9801         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
9802         this for accessibility checks.
9803         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
9804         IsNestedFamilyAccessible.
9805         (TypeManager.IsSubclassOf): New method, do what the name actually
9806         says.   
9807
9808 2004-08-24  Martin Baulig  <martin@ximian.com>
9809
9810         * expression.cs (MemberAccess.DoResolve): When resolving ourselves
9811         as a SimpleName, include the generic arity.
9812
9813 2004-08-24  Martin Baulig  <martin@ximian.com>
9814
9815         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
9816         MethodAttributes.HideBySig for operators.
9817
9818 2004-08-23  Martin Baulig  <martin@ximian.com>
9819
9820         Back to the old error reporting system :-)
9821
9822         * report.cs (Message): Removed.
9823         (Report.MessageData, ErrorData, WarningData): Removed.
9824         (Report.Error, Warning): Back to the old system.
9825
9826 2004-08-23  Martin Baulig  <martin@ximian.com>
9827
9828         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
9829
9830         * class.cs (TypeContainer.ParentContainer): New public virtual
9831         method; replaces the explicit interface implementation.
9832         (ClassPart.ParentContainer): Override.
9833
9834 2004-08-23  Martin Baulig  <martin@ximian.com>
9835
9836         * statement.cs (Switch): Added support for constant switches; see
9837         #59428 or test-285.cs.
9838
9839 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
9840
9841         Fixed bug #62740.
9842         * statement.cs (GetEnumeratorFilter): Removed useless
9843         logic because C# specs is strict. GetEnumerator must be
9844         public.
9845
9846 2004-08-22  Martin Baulig  <martin@ximian.com>
9847
9848         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
9849         a switch and may break, reset the barrier.  Fixes #59867.
9850
9851 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
9852
9853         CLS-Compliance speed up (~5% for corlib)
9854
9855         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
9856         New method. Tests container for CLS-Compliant names
9857
9858         * class.cs (TypeContainer.VerifyClsName): New method.
9859         Checks whether container name is CLS Compliant.
9860         (Constructor): Implements IMethodData.
9861
9862         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
9863         low-case table for CLS Compliance test.
9864         (MemberCache.VerifyClsParameterConflict): New method.
9865         Checks method parameters for CS3006 error.
9866
9867         * enum.cs (EnumMember): Is derived from MemberCore.
9868         (Enum.VerifyClsName): Optimized for better performance.
9869
9870 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
9871
9872         * report.cs: Renamed Error_T to Error and changed all
9873         references.
9874
9875 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
9876
9877         * class.cs (TypeContainer.IndexerArrayList): New inner class
9878         container for indexers.
9879         (TypeContainer.DefaultIndexerName): New constant for default
9880         indexer name. Replaced all "Item" with this constant.
9881         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
9882
9883         * typemanager.cs (TypeManager.default_member_ctor): Cache here
9884         DefaultMemberAttribute constructor.
9885
9886 2004-08-05  Martin Baulig  <martin@ximian.com>
9887
9888         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
9889         Fix bug #59429.
9890
9891 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
9892
9893         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
9894         multi platforms problem.
9895
9896         * compiler.csproj: Included shared files.
9897
9898 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9899
9900         Fix bug 60333, 55971 in the more general way
9901         * attribute.cs (Attribute.GetAttributeArgumentExpression):
9902         Added arg_type argument for constant conversion.
9903         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
9904
9905 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9906
9907         Fix bug #59760
9908         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
9909         OperatorArrayList, MethodCoreArrayList for typecontainer
9910         containers. Changed class member types to these new types.
9911         (MethodArrayList.DefineMembers): Added test for CS0659.
9912
9913 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
9914
9915         * cfold.cs: Synchronize the folding with the code in expression.cs
9916         Binary.DoNumericPromotions for uint operands.
9917
9918         * attribute.cs: Revert patch from Raja, it introduced a regression
9919         while building Blam-1.2.1 (hard to isolate a test case).
9920
9921 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9922
9923         Fix for #55382
9924         * class.cs:
9925         (TypeContainer.Define): Renamed to DefineContainerMembers because of
9926         name collision.
9927         (MethodCore.parent_method): New member. The method we're overriding
9928         if this is an override method.
9929         (MethodCore.CheckBase): Moved from Method class and made common.
9930         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
9931         private.
9932         (MethodCore.CheckForDuplications): New abstract method. For custom
9933         member duplication search in a container
9934         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
9935         method and its return type.
9936         (Event.conflict_symbol): New member. Symbol with same name in the
9937         parent class.
9938
9939         * decl.cs:
9940         (MemberCache.FindMemberWithSameName): New method. The method
9941         is looking for conflict with inherited symbols.
9942
9943 2004-08-04  Martin Baulig  <martin@ximian.com>
9944
9945         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
9946
9947         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
9948
9949 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9950
9951         * report.cs (Message): New enum for better error, warning reference in
9952         the code.
9953         (MessageData): New inner abstract class. It generally handles printing of
9954         error and warning messages.
9955         Removed unused Error, Warning, Message methods.
9956
9957 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9958
9959         Fix for cs0592-8.cs test
9960         * attribute.cs
9961         (Attributable.ValidAttributeTargets): Made public.
9962         (Attribute.ExplicitTarget): New member for explicit target value.
9963         (Attribute.CheckTargets): Now we translate explicit attribute
9964         target to Target here.
9965
9966 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
9967
9968         * ecore.cs (MethodGroupExpr): new IsBase property.
9969
9970         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
9971
9972         * delegate.cs (DelegateCreation): store a MethodGroupExpr
9973         rather than an instance expr.
9974
9975         (DelegateCreation.Emit): Use the method group rather than
9976         the instance expression. Also, if you have base.Foo as the
9977         method for a delegate, make sure to emit ldftn, not ldftnvirt.
9978
9979         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
9980
9981         (NewDelegate.DoResolve): Only check for the existance of Invoke
9982         if the method is going to be needed. Use MethodGroupExpr.
9983
9984         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
9985
9986         * expression.cs: For pointer arith., make sure to use
9987         the size of the type, not the size of the pointer to
9988         the type.
9989
9990 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9991
9992         Fix for #60722
9993         * class.cs (Class): Added error CS0502 test.
9994
9995 2004-08-03  John Luke  <jluke@cfl.rr.com>
9996             Raja R Harinath  <rharinath@novell.com>
9997
9998         Fix for #60997.
9999         * attribute.cs (Attribute.complained_before): New flag.
10000         (Attribute.ResolveType, Attribute.Resolve),
10001         (Attribute.DefinePInvokeMethod): Set it.
10002         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
10003         
10004 2004-08-03  Martin Baulig  <martin@ximian.com>
10005
10006         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
10007         use a user-defined operator; we still need to do numeric
10008         promotions in case one argument is a builtin type and the other
10009         one has an implicit conversion to that type.  Fixes #62322.
10010
10011 2004-08-18  Martin Baulig  <martin@ximian.com>
10012
10013         * class.cs (Method.Define): Use the correct method name when
10014         creating the MethodBuilder for a generic method.
10015
10016 2004-08-17  Martin Baulig  <martin@ximian.com>
10017
10018         * generic.cs (Constraints): Support type parameter constraints.
10019
10020 2004-08-16  Martin Baulig  <martin@ximian.com>
10021
10022         * cs-tokenizer.cs (Tokenizer.TypeOfParsing): New public property.
10023         (Token.GENERIC_DIMENSION): New token; this is returned if we
10024         encounter an unbound generic type in a typeof() expression.
10025
10026         * cs-parser.jay (opt_type_argument_list): Added GENERIC_DIMENSION;
10027         this token is only generated while parsing a typeof() expression.
10028         (typeof_expression): Removed the old unbound_type hack.
10029
10030         * generic.cs (TypeArguments.IsUnbound): New public property.
10031
10032         * decl.cs (MemberName): Added support for unbound types.
10033
10034 2004-08-14  Martin Baulig  <martin@ximian.com>
10035
10036         * typemanager.cs
10037         (TypeManager.IsEqualGenericInstance): New static method.
10038         (TypeManager.IsSubclassOrNestedChildOf, IsSubclassOf): This is
10039         just used to check accessibility, so follow the rules of 26.1.6.        
10040
10041         * expression.cs (MemberAccess.ResolveAsTypeStep): Return a
10042         ConstructedType instead of a TypeExpression if we have type arguments.
10043
10044         * cs-parser.jay (typeof_expression): Support unbound generic types.
10045
10046         * ecore.cs (UnboundTypeExpression): New public class.
10047
10048 2004-08-12  Martin Baulig  <martin@ximian.com>
10049
10050         * typemanager.cs (TypeManager.IsNestedChildOf): Use
10051         TypeManager.IsEqual() rather than `=='.
10052
10053         * decl.cs (DeclSpace.CheckAccessLevel): Use `tb.FullName' for
10054         generic instances as well.
10055
10056 2004-08-12  Martin Baulig  <martin@ximian.com>
10057
10058         * expression.cs (Invocation.InferType): We can only infer method
10059         type parameters.  Fixes #62647.
10060
10061 2004-08-11  Martin Baulig  <martin@ximian.com>
10062
10063         * class.cs (TypeContainer.DefineType): Create the TypeBuilder
10064         before resolving the base classes.
10065
10066 2004-08-06 Gonzalo Paniagua Javier <gonzalo@ximian.com>
10067
10068         * Makefile: install .mdb file too.
10069
10070 2004-08-05  Martin Baulig  <martin@ximian.com>
10071
10072         * ecore.cs (FieldExpr.DoResolveLValue): If we're resolving a field
10073         initializer, the current type is just the TypeBuilder, not the
10074         instantiated generic type.
10075         (FieldExpr.IsFieldInitializer): New public property.
10076
10077 2004-08-04  Martin Baulig  <martin@ximian.com>
10078
10079         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
10080
10081         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
10082
10083 2004-08-03  Martin Baulig  <martin@ximian.com>
10084
10085         * class.cs (MethodData.Define): If we're an explicit
10086         implementation, remove the generic arity from the type name.
10087
10088 2004-08-03  Martin Baulig  <martin@ximian.com>
10089
10090         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
10091         use a user-defined operator; we still need to do numeric
10092         promotions in case one argument is a builtin type and the other
10093         one has an implicit conversion to that type.  Fixes #62322.
10094
10095 2004-08-02  Martin Baulig  <martin@ximian.com>
10096
10097         * class.cs (TypeContainer.ifaces): Make this a `Type[]', not a
10098         `TypeExpr[]' array.
10099         (TypeContainer.GetClassBases): Return the unexpanded list of
10100         interfaces; we expand them later.
10101         (TypeContainer.DefineType): After creating the TypeBuilder, call
10102         TypeManager.ExpandInterfaces() to get an expanded and resolved
10103         list of interfaces.
10104
10105         * ecore.cs (TypeExpr.GetInterfaces): Removed
10106
10107         * generics.cs (Constraints.InterfaceConstraints): Remove.
10108         (TypeParameter.DefineType): Call TypeManager.RegisterBuilder() to
10109         register the interface constraints.
10110
10111         * typemanager.cs
10112         (TypeManager.AddUserType): Removed the `ifaces' argument.
10113         (TypeManager.AddTypeParameter): Likewise.
10114         (TypeManager.AddUserInterface): Removed, was unused.
10115         (TypeManager.RegisterBuilder): Take a `Type[]' instead of a
10116         `TypeExpr[]' array for the interfaces.
10117         (TypeManager.ExpandInterfaces): Call this after the TypeBuilder
10118         has been defined, returns a list of the resolved interfaces types.
10119         (TypeManager.GetInterfaces): Return a `Type[]', not a `TypeExpr[]'.
10120         (TypeManager.GetExplicitInterfaces): Likewise.  
10121
10122 2004-08-02  Martin Baulig  <martin@ximian.com>
10123
10124         * expression.cs (Invocation.EmitCall): If we're invoking a method
10125         on a type parameter, use the new `Constrained' prefix opcode.
10126
10127 2004-08-02  Martin Baulig  <martin@ximian.com>
10128
10129         * statement.cs (LocalInfo.Flags): Added `IsThis'.
10130         (LocalInfo.IsThis): New public property.
10131         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
10132
10133 2004-08-01  Martin Baulig  <martin@ximian.com>
10134
10135         * class.cs (TypeContainer.GetClassBases): Don't set the default
10136         here since we may get called from GetPartialBases().
10137         (TypeContainer.DefineType): If GetClassBases() didn't return a
10138         parent, use the default one.
10139
10140 2004-07-30  Martin Baulig  <martin@ximian.com>
10141
10142         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
10143
10144         * class.cs (SourceMethod): New public class, derive from the
10145         symbol writer's ISourceMethod.
10146         (Method): Use the new symbol writer API.
10147
10148         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
10149         as argument and use the new symbol writer.
10150
10151         * location.cs
10152         (SourceFile): Implement the symbol writer's ISourceFile.
10153         (Location.SymbolDocument): Removed.
10154         (Location.SourceFile): New public property.
10155
10156         * symbolwriter.cs: Use the new symbol writer API.
10157
10158 2004-07-30  Raja R Harinath  <rharinath@novell.com>
10159
10160         * Makefile (install-local): Remove.  Functionality moved to
10161         executable.make.
10162
10163 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
10164
10165         * Makefile: Install mcs.exe.config file together with mcs.exe.
10166         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
10167         correct runtime version.
10168         
10169 2004-07-25  Martin Baulig  <martin@ximian.com>
10170
10171         * class.cs
10172         (TypeContainer.RegisterOrder): Removed, this was unused.
10173         (TypeContainer, interface_order): Removed.
10174         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
10175         TypeContainer as argument since we can also be called with a
10176         `PartialContainer' for a partial class/struct/interface.
10177         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
10178         of checking whether we're an `Interface' - we could be a
10179         `PartialContainer'.
10180         (PartialContainer.Register): Override; call
10181         AddClass()/AddStruct()/AddInterface() on our parent.
10182
10183         * cs-parser.jay (interface_member_declaration): Add things to the
10184         `current_container', not the `current_class'.
10185
10186         * rootcontext.cs (RegisterOrder): The overloaded version which
10187         takes an `Interface' was unused, removed.
10188
10189         * typemanager.cs (TypeManager.LookupInterface): Return a
10190         `TypeContainer', not an `Interface'.
10191         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
10192         contain a `PartialContainer' for an interface, so check it's
10193         `Kind' to figure out what it is.
10194
10195 2004-07-25  Martin Baulig  <martin@ximian.com>
10196
10197         * class.cs (Class.DefaultTypeAttributes): New public constant.
10198         (Struct.DefaultTypeAttributes): Likewise.
10199         (Interface.DefaultTypeAttributes): Likewise.
10200         (PartialContainer.TypeAttr): Override this and add the
10201         DefaultTypeAttributes.
10202
10203 2004-07-25  Martin Baulig  <martin@ximian.com>
10204
10205         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
10206         we can just use the `Parent' field instead.
10207
10208 2004-07-25  Martin Baulig  <martin@ximian.com>
10209
10210         * class.cs (TypeContainer.Emit): Renamed to EmitType().
10211
10212 2004-07-25  Martin Baulig  <martin@ximian.com>
10213
10214         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
10215         our parts before defining any methods.
10216         (TypeContainer.VerifyImplements): Make this virtual.
10217         (ClassPart.VerifyImplements): Override and call VerifyImplements()
10218         on our PartialContainer.
10219
10220 2004-07-25  Martin Baulig  <martin@ximian.com>
10221
10222         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
10223
10224         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
10225         argument, we can just use the `Parent' field instead.
10226
10227         * class.cs
10228         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
10229         (MemberBase.DoDefine): Likewise.
10230
10231 2004-07-24  Martin Baulig  <martin@ximian.com>
10232
10233         * decl.cs (MemberCore.Parent): New public field.
10234         (DeclSpace.Parent): Moved to MemberCore.
10235
10236         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
10237         (MemberBase.ctor): Added TypeContainer argument, pass it to our
10238         parent's .ctor.
10239         (FieldBase, Field, Operator): Likewise.
10240         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
10241         (EventField, Event): Likewise.
10242
10243 2004-07-23  Martin Baulig  <martin@ximian.com>
10244
10245         * class.cs (PartialContainer): New public class.
10246         (ClassPart): New public class.
10247         (TypeContainer): Added support for partial classes.
10248         (TypeContainer.GetClassBases): Splitted some of the functionality
10249         out into GetNormalBases() and GetPartialBases().
10250
10251         * cs-tokenizer.cs (Token.PARTIAL): New token.
10252         (Tokenizer.consume_identifier): Added some hacks to recognize
10253         `partial', but only if it's immediately followed by `class',
10254         `struct' or `interface'.
10255
10256         * cs-parser.jay: Added support for partial clases.
10257
10258 2004-07-23  Martin Baulig  <martin@ximian.com>
10259
10260         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
10261         a `DeclSpace' and also made it readonly.
10262         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
10263         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
10264         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
10265
10266         * cs-parser.jay: Pass the `current_class', not the
10267         `current_container' (at the moment, this is still the same thing)
10268         to a new Method, Property, Event, Indexer or Constructor.
10269
10270 2004-07-23  Martin Baulig  <martin@ximian.com>
10271
10272         * cs-parser.jay (CSharpParser): Added a new `current_class' field
10273         and removed the `current_interface' one.
10274         (struct_declaration, class_declaration, interface_declaration):
10275         Set `current_class' to the newly created class/struct/interface;
10276         set their `Bases' and call Register() before parsing their body.
10277
10278 2004-07-23  Martin Baulig  <martin@ximian.com>
10279
10280         * class.cs (Kind): New public enum.
10281         (TypeContainer): Made this class abstract.
10282         (TypeContainer.Kind): New public readonly field.
10283         (TypeContainer.CheckDef): New public method; moved here from
10284         cs-parser.jay.
10285         (TypeContainer.Register): New public abstract method.
10286         (TypeContainer.GetPendingImplementations): New public abstract
10287         method.
10288         (TypeContainer.GetClassBases): Removed the `is_class' and
10289         `is_iface' parameters.
10290         (TypeContainer.DefineNestedTypes): Formerly known as
10291         DoDefineType().
10292         (ClassOrStruct): Made this class abstract.
10293
10294         * tree.cs (RootTypes): New public type. 
10295
10296 2004-07-20  Martin Baulig  <martin@ximian.com>
10297
10298         * tree.cs (Tree.RecordNamespace): Removed.
10299         (Tree.Namespaces): Removed.
10300
10301         * rootcontext.cs (RootContext.IsNamespace): Removed.
10302
10303         * cs-parser.jay (namespace_declaration): Just create a new
10304         NamespaceEntry here.
10305
10306 2004-07-21  Lluis Sanchez Gual  <lluis@novell.com>
10307
10308         * Makefile: Install gmcs.exe.config file together with gmcs.exe.
10309         * gmcs.exe.config: Renamed from mcs.exe.config. Added supportedRuntime
10310         entry to make sure it runs in the correct runtime version.
10311         
10312 2004-07-18  Martin Baulig  <martin@ximian.com>
10313
10314         * generic.cs (ConstructedType.CheckConstraints): Improved
10315         constraints checking.
10316
10317 2004-07-18  Martin Baulig  <martin@ximian.com>
10318
10319         * expression.cs (Invocation.BetterMethod): Call
10320         TypeManager.TypeToCoreType() on all types and removed my previous
10321         hack; we're already doig the right thing here.
10322
10323 2004-07-17  Martin Baulig  <martin@ximian.com>
10324
10325         * decl.cs (MemberName.MakeName): Create the "class`1" names here.
10326
10327 2004-07-16  Martin Baulig  <martin@ximian.com>
10328
10329         * iterators.cs: Added generics support.
10330
10331 2004-07-16  Martin Baulig  <martin@ximian.com>
10332
10333         * iterators.cs: Rewrote this.  We're now using one single Proxy
10334         class for both the IEnumerable and the IEnumerator interface and
10335         `Iterator' derives from Class so we can use the high-level API.
10336
10337         * class.cs (TypeContainer.AddIterator): New method.
10338         (TypeContainer.DoDefineType): New protected virtual method, which
10339         is called from DefineType().
10340         (TypeContainer.DoDefineMembers): Call DefineType() and
10341         DefineMembers() on all our iterators.
10342         (TypeContainer.Emit): Call Emit() on all our iterators.
10343         (TypeContainer.CloseType): Call CloseType() on all our iterators.
10344
10345         * codegen.cs (EmitContext.CurrentIterator): New public field.
10346
10347 2004-07-15  Martin Baulig  <martin@ximian.com>
10348
10349         * typemanager.cs
10350         (TypeManager.not_supported_exception_type): New type.   
10351
10352 2004-07-14  Martin Baulig  <martin@ximian.com>
10353
10354         * typemanager.cs
10355         (TypeManager.generic_ienumerable_type): New type.
10356         (TypeManager.generic_ienumerator_type): New type.
10357
10358         * rootcontext.cs
10359         (RootContext.interfaces_first_stage): Added
10360         "System.Collections.Generic.IEnumerator`1" and
10361         "System.Collections.Generic.IEnumerable`1".     
10362
10363 2004-07-14  Martin Baulig  <martin@ximian.com>
10364
10365         * iterators.cs: Use real error numbers.
10366
10367 2004-07-14  Martin Baulig  <martin@ximian.com>
10368
10369         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
10370         requires this to be a System.Collection.IEnumerable and not a
10371         class implementing that interface.
10372         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
10373
10374 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
10375
10376         * class.cs: Fixed previous fix, it broke some error tests.
10377
10378 2004-07-12  Martin Baulig  <martin@ximian.com>
10379
10380         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
10381         Fixes #61293.
10382
10383 2004-07-14  Martin Baulig  <martin@ximian.com>
10384
10385         * decl.cs, expression.cs, generic.cs: Use a backqoute (`) and not
10386         an exclamation mark (!) for the generic arity to reflect the
10387         latest spec changes; ie. use "System.Collections.Generic.IList`1".
10388
10389 2004-07-13  Martin Baulig  <martin@ximian.com>
10390
10391         * cs-tokenizer.cs (Tokenizer.parse_less_than): Allow array rank
10392         specifiers being part of a type argument.
10393
10394 2004-07-13  Martin Baulig  <martin@ximian.com>
10395
10396         * expression.cs (MemberAccess.ResolveAsTypeStep): Use the full `!'
10397         name for generic types.
10398
10399 2004-07-13  Martin Baulig  <martin@ximian.com>
10400
10401         * assign.cs (Assign.DoResolve): Moved the CS0131 check up a little
10402         bit to fix #60119.
10403
10404 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
10405
10406         * assign.cs (LocalTemporary): Add new argument: is_address,If
10407         `is_address' is true, then the value that we store is the address
10408         to the real value, and not the value itself.
10409         
10410         * ecore.cs (PropertyExpr): use the new local temporary
10411         stuff to allow us to handle X.Y += z (where X is a struct)
10412
10413 2004-07-08  Martin Baulig  <martin@ximian.com>
10414
10415         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
10416         not always return, just like we're doing in Using.Resolve().
10417
10418 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
10419
10420         * cs-parser.jay (fixed_statement): flag this as Pinned.
10421
10422 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
10423
10424         * typemanager.cs (TypeManager): Removed MakePinned method, this
10425         mechanism is replaced with the .NET 2.x compatible mechanism of
10426         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
10427
10428         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
10429         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
10430         `IsFixed' property which has a different meaning.
10431
10432 2004-07-02  Raja R Harinath  <rharinath@novell.com>
10433
10434         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
10435         visible from inside a nested class, not just the names of the
10436         immediately enclosing class.
10437         Fix for bug #60730.
10438
10439 2004-06-24  Raja R Harinath  <rharinath@novell.com>
10440
10441         * expression.cs (BetterConversion): Remove buggy special-case
10442         handling of "implicit constant expression conversions".  At this
10443         point, we already know that the conversion is possible -- we're
10444         only checking to see which is better.
10445
10446 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10447
10448         * cs-parser.jay: Added error CS0210 test.
10449
10450 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10451
10452         * cs-parser.jay: Added error CS0134 test.
10453
10454 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10455
10456         Fix bug #52507
10457         * cs-parser.jay: Added error CS0145 test.
10458
10459 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10460
10461         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
10462
10463 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
10464         
10465         * expression.cs (StackAlloc.Resolve): The argument may not
10466         be a constant; deal with this case.
10467         
10468 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
10469
10470         * attribute.cs (IndexerName_GetIndexerName): Renamed to
10471         GetIndexerAttributeValue.
10472         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
10473
10474         * class.cs (Indexer.Define): Added error tests for CS0415,
10475         CS0609.
10476
10477 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
10478
10479         * attribute.cs (Attribute.Resolve): Keep field code in sync with
10480         property code.
10481
10482 2004-06-23  Martin Baulig  <martin@ximian.com>
10483
10484         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
10485         neither return nor throw, reset the barrier as well.  Fixes #60457.
10486
10487 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
10488
10489         * class.cs : EventAttributes is now set to None by default.
10490           This fixes bug #60459.
10491
10492 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
10493
10494         Fix bug #60219
10495         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
10496         Don't throw exception but return null (it's sufficient now).
10497
10498 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
10499
10500         * typemanager.cs (GetArgumentTypes): Faster implementation.
10501
10502 2004-06-18  Martin Baulig  <martin@ximian.com>
10503
10504         * attribute.cs (Attribute.Resolve): Check whether we're an
10505         EmptyCast which a Constant child.  Fixes #60333.
10506
10507 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
10508
10509         * statement.cs (EmitCollectionForeach): Account for the fact that
10510         not all valuetypes are in areas which we can take the address of.
10511         For these variables, we store to a temporary variable. Also, make
10512         sure that we dont emit a `callvirt' on a valuetype method.
10513
10514 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10515
10516         * expression.cs (StackAlloc.DoReSolve): Added test for
10517         negative parameter (CS0247).
10518
10519 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10520
10521         Fix bug #59792
10522         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
10523
10524 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10525
10526         Fix bug #59781
10527         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
10528         ulong.
10529
10530 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
10531
10532         Fix bug #58254 & cs1555.cs, cs1556.cs
10533         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
10534
10535 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
10536
10537         * cs-parser.jay: Added error CS1669 test for indexers.
10538
10539 2004-06-18  Martin Baulig  <martin@ximian.com>
10540
10541         * generics.cs (GenericMethod.ctor): Don't take an Attributes
10542         argument.  Fixes #60441.
10543
10544 2004-06-16  Ben Maurer  <bmaurer@ximian.com>
10545         * ecore.cs (MethodGroupExpr.Name): Revert Martin's patch.
10546         The name needs to have the actual name of the method in order
10547         for other tests (such as the one in OverloadResolve for Invoke
10548         on a delegate) to work. As well, it does not really help
10549         error reporting because the method group had multiple methods.
10550         * Makefile: Remove MCS_DEBUG, you can enable with the DEBUG_FLAGS.
10551         Make profiling work.
10552         
10553 2004-06-13  Martin Baulig  <martin@ximian.com>
10554
10555         * cs-parser.jay: Don't allow generic attributes.
10556
10557 2004-06-13  Martin Baulig  <martin@ximian.com>
10558
10559         * class.cs (MemberBase.DoDefineBase): New protected method.
10560         (MemberBase.DoDefine): Compute the `flags' in the new
10561         DoDefineBase() which must be called first.
10562         (Method.Define): Call DoDefineBase() first so we have the flags
10563         when defining the generic method.
10564
10565         * cs-parser.jay (interface_method_declaration): Support generic methods.
10566
10567 2004-06-13  Martin Baulig  <martin@ximian.com>
10568
10569         * decl.cs (TypeName): Removed.
10570         (MemberName): Removed TypeName and MemberNow; now we just have
10571         MemberName.
10572
10573         * cs-parser.jay: Don't distinguish between type arguments and type
10574         parameters in the grammar and simplified the rules a bit.  The
10575         reduce/reduce conflicts are now gone (except the one we inherited
10576         from mcs).
10577
10578 2004-06-11  Martin Baulig  <martin@ximian.com>
10579
10580         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
10581         call this twice: for params and varargs methods.
10582
10583 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
10584
10585         * class.cs:
10586         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
10587
10588 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
10589
10590         * attribute.cs (Attribute.GetValidTargets): Made public.
10591
10592         * class.cs: 
10593         (AbstractPropertyEventMethod): New class for better code sharing.
10594         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
10595         CS1667 report.
10596         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
10597
10598 2004-06-09  Martin Baulig  <martin@ximian.com>
10599
10600         * cs-parser.jay: Removed a reduce/reduce conflict.
10601
10602 2004-06-03  Martin Baulig  <martin@ximian.com>
10603
10604         * generic.cs (ConstructedType.GetMemberAccess): Renamed to
10605         GetSimpleName() and return a SimpleName.
10606
10607         * ecore.cs (SimpleName.Arguments): New public field.
10608         (SimpleName): Added overloaded ctor which takes an additional
10609         TypeArguments argument.
10610         (SimpleName.SimpleNameResolve): Added support for generic methods.
10611         (MethodGroupExpr.ResolveGeneric): New public method.  The code was
10612         formerly in MemberAccess.DoResolve(), but we also need it in
10613         SimpleNameResolve().
10614
10615         * expression.cs (MemberAccess.DoResolve): Use the new
10616         MethodGroupExpr.ResolveGeneric().       
10617
10618 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10619
10620         * decl.cs: If possible, use lookuptypedirect here. We can only do
10621         this if there is no `.' after the namespace. Avoids using
10622         LookupType, which does lots of slow processing.
10623         (FindNestedType) New method, does what it says :-).
10624         * namespace.cs: use LookupTypeDirect.
10625         * rootcontext.cs: use membercache, if possible.
10626         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
10627
10628 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10629
10630         * expression.cs:
10631         According to the spec, 
10632
10633         In a member access of the form E.I, if E is a single identifier,
10634         and if the meaning of E as a simple-name (§7.5.2) is a constant,
10635         field, property, localvariable, or parameter with the same type as
10636         the meaning of E as a type-name (§3.8), then both possible
10637         meanings of E are permitted.
10638
10639         We did not check that E as a simple-name had the same type as E as
10640         a type name.
10641
10642         This trivial check gives us 5-7% on bootstrap time.
10643
10644 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10645
10646         * expression.cs (Invocation.OverloadResolve): Avoid the
10647         use of hashtables and boxing here by allocating on demand.
10648
10649 2004-05-30  Martin Baulig  <martin@ximian.com>
10650
10651         * rootcontext.cs (RootContext.LookupType): Don't cache things if
10652         we're doing a silent lookup.  Don't try to lookup nested types in
10653         TypeManager.object_type (thanks to Ben Maurer).
10654
10655 2004-05-30  Martin Baulig  <martin@ximian.com>
10656
10657         Committing a patch from Ben Maurer.
10658
10659         * rootcontext.cs (RootContext.LookupType): Cache negative results.
10660
10661 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10662
10663         * convert.cs: add a trivial cache for overload operator resolution.
10664
10665 2004-05-31  Marek Safar  <marek.safar@seznam.cz>
10666
10667         * attribute.cs
10668         (AttributeTester.GetObsoleteAttribute): Returns instance of
10669         ObsoleteAttribute when type is obsolete.
10670
10671         * class.cs
10672         (TypeContainer.VerifyObsoleteAttribute): Override.
10673         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
10674         (MethodCode.VerifyObsoleteAttribute): Override.
10675         (MemberBase.VerifyObsoleteAttribute): Override.
10676
10677         * decl.cs
10678         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
10679         and report proper error.
10680
10681         *delegate.cs
10682         (Delegate.VerifyObsoleteAttribute): Override.
10683
10684         * ecore.cs
10685         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
10686         and report proper error.
10687         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
10688
10689         * enum.cs
10690         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
10691         and enum member.
10692
10693         * expression.cs
10694         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
10695         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
10696         Added test for ObsoleteAttribute.
10697
10698         * statement.cs
10699         (Catch): Derived from Statement.
10700
10701 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10702
10703         * decl.cs: If possible, use lookuptypedirect here. We can only do
10704         this if there is no `.' after the namespace. Avoids using
10705         LookupType, which does lots of slow processing.
10706         (FindNestedType) New method, does what it says :-).
10707         * namespace.cs: use LookupTypeDirect.
10708         * rootcontext.cs: use membercache, if possible.
10709         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
10710
10711 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10712
10713         * expression.cs:
10714         According to the spec, 
10715
10716         In a member access of the form E.I, if E is a single identifier,
10717         and if the meaning of E as a simple-name (§7.5.2) is a constant,
10718         field, property, localvariable, or parameter with the same type as
10719         the meaning of E as a type-name (§3.8), then both possible
10720         meanings of E are permitted.
10721
10722         We did not check that E as a simple-name had the same type as E as
10723         a type name.
10724
10725         This trivial check gives us 5-7% on bootstrap time.
10726
10727 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
10728
10729         Fixed bug #59071 & cs0160.cs
10730         * statement.cs (Try.Resolve): Check here whether order of catch
10731         clauses matches their dependencies.
10732
10733 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
10734
10735         Fixed bug #58624
10736         * ecore.cs (SimpleName.SimpleNameResolve): Added test for
10737         unsafe type.
10738
10739 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10740
10741         * expression.cs (Invocation.OverloadResolve): Avoid the
10742         use of hashtables and boxing here by allocating on demand.
10743
10744 2004-05-30  Martin Baulig  <martin@ximian.com>
10745
10746         * rootcontext.cs (RootContext.LookupType): Don't cache things if
10747         we're doing a silent lookup.  Don't try to lookup nested types in
10748         TypeManager.object_type (thanks to Ben Maurer).
10749
10750 2004-05-30  Martin Baulig  <martin@ximian.com>
10751
10752         Committing a patch from Ben Maurer.
10753
10754         * rootcontext.cs (RootContext.LookupType): Cache negative results.      
10755
10756 2004-05-29  Martin Baulig  <martin@ximian.com>
10757
10758         * class.cs (IMethodData.ShouldIgnore): New method.
10759
10760         * typemanager.cs (TypeManager.MethodFlags): Don't take a
10761         `Location' argument, we don't need it anywhere.  Use
10762         `IMethodData.ShouldIgnore ()' instead of
10763         `MethodData.GetMethodFlags ()'.
10764         (TypeManager.AddMethod): Removed.
10765         (TypeManager.AddMethod2): Renamed to AddMethod.
10766
10767 2004-05-29  Martin Baulig  <martin@ximian.com>
10768
10769         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
10770
10771         * convert.cs (Convert.ImplicitReferenceConversion): If we're
10772         converting from a class type S to an interface type and we already
10773         have an object on the stack, don't box it again.  Fixes #52578.
10774
10775 2004-05-29  Martin Baulig  <martin@ximian.com>
10776
10777         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
10778         Added support for `params' parameters.  Fixes #59267.
10779
10780 2004-05-29  Martin Baulig  <martin@ximian.com>
10781
10782         * literal.cs (NullPointer): Provide a private .ctor which sets
10783         `type' to TypeManager.object_type.  Fixes #59048.
10784
10785 2004-05-29  Martin Baulig  <martin@ximian.com>
10786
10787         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
10788         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
10789
10790         * ecore.cs (EventExpr.instance_expr): Make the field private.
10791
10792 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
10793
10794         Fixed bug #50080 & cs0214-2.cs
10795         * expression.cs (Cast.DoResolve): Check unsafe context here.
10796         
10797         * statement.cs (Resolve.DoResolve): Likewise.
10798
10799 2004-05-26  Martin Baulig  <martin@ximian.com>
10800
10801         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
10802
10803         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
10804         (RootContext.LookupType): Pass down the `silent' flag.
10805
10806 2004-05-25  Martin Baulig  <martin@ximian.com>
10807
10808         * expression.cs
10809         (MethodGroupExpr.IdenticalTypeName): New public property.
10810         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
10811         expression actually refers to a type.
10812
10813 2004-05-25  Martin Baulig  <martin@ximian.com>
10814
10815         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
10816         for #56176 and made it actually work.
10817
10818 2004-05-25  Martin Baulig  <martin@ximian.com>
10819
10820         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
10821         (FieldExpr, PropertyExpr): Override and implement
10822         CacheTemporaries.  Fixes #52279.
10823
10824 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
10825
10826         * location.cs: In the new compiler listing a file twice is a
10827         warning, not an error.
10828
10829 2004-05-24  Martin Baulig  <martin@ximian.com>
10830
10831         * enum.cs (Enum.DefineType): For the `BaseType' to be a
10832         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
10833
10834 2004-05-24  Martin Baulig  <martin@ximian.com>
10835
10836         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
10837         walking the `using' list.  Fixes #53921.
10838
10839 2004-05-24  Martin Baulig  <martin@ximian.com>
10840
10841         * const.cs (Const.LookupConstantValue): Added support for
10842         EmptyCast's; fixes #55251.
10843
10844 2004-05-24  Martin Baulig  <martin@ximian.com>
10845
10846         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
10847         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
10848         which does the CS0135 check.  The reason is that we first need to
10849         check whether the variable actually exists.
10850
10851 2004-05-24  Martin Baulig  <martin@ximian.com>
10852
10853         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
10854         than RootContext.LookupType() to find the explicit interface
10855         type.  Fixes #58584.
10856
10857 2004-05-24  Raja R Harinath  <rharinath@novell.com>
10858
10859         * Makefile: Simplify.  Use executable.make.
10860         * mcs.exe.sources: New file.  List of sources of mcs.exe.
10861
10862 2004-05-24  Anders Carlsson  <andersca@gnome.org>
10863
10864         * decl.cs:
10865         * enum.cs:
10866         Use the invariant culture when doing String.Compare for CLS case
10867         sensitivity.
10868         
10869 2004-05-23  Martin Baulig  <martin@ximian.com>
10870
10871         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
10872         don't have any dots.  Fixes #52622, added cs0246-8.cs.
10873
10874         * namespace.cs (NamespaceEntry.Lookup): Likewise.
10875
10876 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
10877
10878         * class.cs (MemberBase.Define): Reuse MemberType member for 
10879         resolved type. Other methods can use it too.
10880
10881 2004-05-23  Martin Baulig  <martin@ximian.com>
10882
10883         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
10884         the variable also exists in the current block (otherwise, we need
10885         to report a CS0103).  Fixes #58670.
10886
10887 2004-05-23  Martin Baulig  <martin@ximian.com>
10888
10889         * flowanalysis.cs (Reachability.Reachable): Compute this
10890         on-the-fly rather than storing it as a field.
10891
10892 2004-05-23  Martin Baulig  <martin@ximian.com>
10893
10894         * flowanalysis.cs (Reachability.And): Manually compute the
10895         resulting `barrier' from the reachability.      
10896        
10897 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
10898
10899         Fix bug #57835
10900         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
10901         instance of ObsoleteAttribute when symbol is obsolete.
10902
10903         * class.cs
10904         (IMethodData): Extended interface for ObsoleteAttribute support.
10905
10906 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
10907
10908         * attribute.cs: Fix bug #55970
10909
10910 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
10911
10912         Fix bug #52705
10913         * attribute.cs
10914         (GetObsoleteAttribute): New method. Creates the instance of
10915         ObsoleteAttribute.
10916         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
10917         ObsoleteAttribute when member is obsolete.
10918         (AttributeTester.Report_ObsoleteMessage): Common method for
10919         Obsolete error/warning reporting.
10920
10921         * class.cs
10922         (TypeContainer.base_classs_type): New member for storing parent type.
10923
10924         * decl.cs
10925         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
10926         for this MemberCore.
10927
10928 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10929
10930         * attribute.cs, const.cs: Fix bug #58590
10931
10932 2004-05-21  Martin Baulig  <martin@ximian.com>
10933
10934         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
10935         out parameters if the end of the method is unreachable.  Fixes
10936         #58098. 
10937
10938 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10939
10940         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
10941         Hari was right, why extra method.
10942
10943 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10944
10945         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
10946
10947 2004-05-20  Martin Baulig  <martin@ximian.com>
10948
10949         * delegate.cs: Convert this file to Unix mode - like the original
10950         version in mcs is.
10951
10952 2004-05-20  Martin Baulig  <martin@ximian.com>
10953
10954         * attribute.cs: Convert this file to Unix mode - like the original
10955         version in mcs is.
10956
10957 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
10958
10959        Fix bug #58688 (MCS does not report error when the same attribute
10960        is assigned twice)
10961
10962        * attribute.cs (Attribute.Emit): Distinction between null and default.
10963
10964 2004-05-19  Raja R Harinath  <rharinath@novell.com>
10965
10966        * cs-parser.jay (attribute): Create a GlobalAttribute for the case
10967        of a top-level attribute without an attribute target.
10968        * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
10969        Make non-static.
10970        (Attribute.Conditional_GetConditionName), 
10971        (Attribute.Obsolete_GetObsoleteMessage): Update.
10972        (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
10973        part of ScanForIndexerName.
10974        (Attribute.CanIgnoreInvalidAttribute): New function.
10975        (Attribute.ScanForIndexerName): Move to ...
10976        (Attributes.ScanForIndexerName): ... here.
10977        (Attributes.Attrs): Rename from now-misnamed AttributeSections.
10978        (Attributes.Search): New internal variant that can choose not to
10979        complain if types aren't resolved.  The original signature now
10980        complains.
10981        (Attributes.GetClsCompliantAttribute): Use internal variant, with
10982        complaints suppressed.
10983        (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
10984        only if it not useful.
10985        (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
10986        top-level for attributes that are shared between the assembly
10987        and a top-level class.
10988        * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
10989        * class.cs: Update to reflect changes.
10990        (DefineIndexers): Fuse loops.
10991        * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
10992        a couple more variants of attribute names.
10993
10994 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
10995
10996         Fix bug #52585 (Implemented explicit attribute declaration)
10997
10998         * attribute.cs:
10999         (Attributable.ValidAttributeTargets): New abstract method. It gets
11000         list of valid attribute targets for explicit target declaration.
11001         (Attribute.Target): It holds target itself.
11002         (AttributeSection): Removed.
11003         (Attribute.CheckTargets): New method. It checks whether attribute
11004         target is valid for the current element.
11005
11006         * class.cs:
11007         (EventProperty): New class. For events that are declared like
11008         property (with add and remove accessors).
11009         (EventField): New class. For events that are declared like field.
11010         class.cs
11011
11012         * cs-parser.jay: Implemented explicit attribute target declaration.
11013
11014         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
11015         Override ValidAttributeTargets.
11016
11017         * parameter.cs:
11018         (ReturnParameter): Class for applying custom attributes on 
11019         the return type.
11020         (ParameterAtribute): New class. Class for applying custom
11021         attributes on the parameter type.
11022
11023 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
11024
11025         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
11026         definitions. 
11027
11028         (Method): Allow UNSAFE here.
11029
11030         * modifiers.cs: Support unsafe reporting.
11031
11032 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
11033
11034         * decl.cs: Fix bug #58478.
11035
11036 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11037
11038         * statement.cs: When checking for unreachable code on an EmptyStatement,
11039         set the location. Fixes bug #58488.
11040
11041 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
11042
11043         * driver.cs: Add -pkg handling.
11044
11045         From Gonzalo: UseShelLExecute=false
11046
11047 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
11048
11049         * attribute.cs:
11050         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
11051         for attribute.
11052         (Attribute.IsClsCompliaceRequired): Moved to base for better
11053         accesibility.
11054         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
11055         when attribute is AttributeUsageAttribute.
11056         (Attribute.GetValidTargets): Simplified.
11057         (Attribute.GetAttributeUsage): New method returns AttributeUsage
11058         attribute for this type.
11059         (Attribute.ApplyAttributes): Method renamed to Emit and make
11060         non-static.
11061         (GlobalAttributeSection): New class for special handling of global
11062         attributes (assembly, module).
11063         (AttributeSection.Emit): New method.
11064
11065         * class.cs: Implemented Attributable abstract methods.
11066         (MethodCore.LabelParameters): Moved to Parameter class.
11067         (Accessor): Is back simple class.
11068         (PropertyMethod): Implemented Attributable abstract class.
11069         (DelegateMethod): Implemented Attributable abstract class.
11070         (Event): New constructor for disctintion between normal Event
11071         and Event with accessors.
11072
11073         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
11074
11075         * codegen.cs, const.cs, decl.cs, delegate.cs:
11076         (CommonAssemblyModulClass): Implemented Attributable abstract class
11077         and simplified.
11078
11079         * enum.cs: Implement IAttributeSupport interface.
11080         (EnumMember): New class for emum members. Implemented Attributable
11081         abstract class
11082
11083         * parameter.cs:
11084         (ParameterBase): Is abstract.
11085         (ReturnParameter): New class for easier [return:] attribute handling.
11086
11087         * typemanager.cs: Removed builder_to_attr.
11088
11089 2004-05-11  Raja R Harinath  <rharinath@novell.com>
11090
11091         Fix bug #57151.
11092         * attribute.cs (Attribute.GetPositionalValue): New function.
11093         * class.cs (TypeContainer.VerifyMembers): New function.
11094         (TypeContainer.Emit): Use it.
11095         (ClassOrStruct): New base class for Class and Struct.
11096         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
11097         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
11098         class.
11099         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
11100         then each non-static field should have a FieldOffset attribute.
11101         Otherwise, none of the fields should have a FieldOffset attribute.
11102         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
11103         and FieldOffset attributes.
11104         * typemanager.cs (TypeManager.struct_layout_attribute_type)
11105         (TypeManager.field_offset_attribute_type): New core types.
11106         (TypeManager.InitCoreTypes): Initialize them.
11107
11108 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
11109
11110         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
11111         Return correct type.
11112         From bug #58270.
11113
11114 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
11115
11116         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
11117         be implicitly converted to ulong.
11118         
11119         * expression.cs: The logic for allowing operator &, | and ^ worked
11120         was wrong, it worked before because we did not report an error in
11121         an else branch.  Fixes 57895.
11122
11123         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
11124         allow volatile fields to be reference types.
11125
11126 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
11127
11128         * driver.cs: Add support for /debug-
11129
11130 2004-05-07  Raja R Harinath  <rharinath@novell.com>
11131
11132         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
11133         Add a 'complain' parameter to silence errors.
11134         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
11135         silently overlooked type-resolutions.
11136         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
11137         to reflect changes.
11138         (Attributes.Search): New function.
11139         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
11140         (Attributes.GetAttributeFullName): Remove hack.
11141         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
11142         Update to reflect changes.
11143         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
11144         Use Attributes.Search instead of nested loops.
11145
11146 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
11147
11148         * decl.cs:
11149         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
11150         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
11151         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
11152
11153         * report.cs: (Report.Warning): Renamed to Warning_T because of
11154         parameter collision.
11155
11156 2004-05-05  Raja R Harinath  <rharinath@novell.com>
11157
11158         * expression.cs (MemberAccess.ResolveMemberAccess):
11159         Exit with non-zero status after Report.Error.
11160         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
11161         Likewise.
11162         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
11163
11164 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
11165
11166         * support.cs: Don't hang when the file is empty.
11167
11168 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
11169
11170         * support.cs: In SeekableStreamReader, compute the preamble size of the
11171           underlying stream. Position changes should take into account that initial
11172           count of bytes.
11173
11174 2004-05-03  Todd Berman  <tberman@sevenl.net>
11175
11176         * driver.cs: remove unused GetSysVersion function.
11177
11178 2004-05-03  Todd Berman  <tberman@sevenl.net>
11179
11180         * driver.cs: Remove the hack from saturday, as well as the hack
11181         from jackson (LoadAssemblyFromGac), also adds the CWD to the
11182         link_paths to get that bit proper.
11183
11184 2004-05-01  Todd Berman  <tberman@sevenl.net>
11185
11186         * driver.cs: Try a LoadFrom before a Load, this checks the current
11187         path. This is currently a bug in mono that is be fixed, however, this
11188         provides a workaround for now. This will be removed when the bug
11189         is fixed.
11190
11191 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
11192
11193         * CryptoConvert.cs: Updated to latest version. Fix issue with 
11194         incomplete key pairs (#57941).
11195
11196 2004-05-01  Todd Berman  <tberman@sevenl.net>
11197
11198         * driver.cs: Remove '.' from path_chars, now System.* loads properly
11199         from the GAC
11200
11201 2004-04-30  Jackson Harper  <jackson@ximian.com>
11202
11203         * codegen.cs: Open keys readonly.
11204         
11205 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11206
11207         * typemanager.cs: don't report cyclic struct layout when a struct
11208         contains 2 or more fields of the same type. Failed for Pango.AttrShape
11209         which has 2 Pango.Rectangle fields.
11210
11211 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11212
11213         * expression.cs: Handle IntPtr comparisons with IL code
11214         rather than a method call.
11215
11216 2004-04-29  Martin Baulig  <martin@ximian.com>
11217
11218         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
11219         the list of PropertyInfo's in class hierarchy and find the
11220         accessor.  Fixes #56013.
11221
11222 2004-04-29  Martin Baulig  <martin@ximian.com>
11223
11224         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
11225
11226 2004-04-29  Martin Baulig  <martin@ximian.com>
11227
11228         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
11229
11230         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
11231
11232 2004-04-29  Martin Baulig  <martin@ximian.com>
11233
11234         * class.cs (ConstructorInitializer.Resolve): Check whether the
11235         parent .ctor is accessible.  Fixes #52146.
11236
11237 2004-04-29  Martin Baulig  <martin@ximian.com>
11238
11239         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
11240
11241         * statement.cs (Using.EmitLocalVariableDecls): Use
11242         TypeManager.idisposable_type, not typeof (IDisposable).
11243         (Foreach.EmitCollectionForeach): Added support for valuetypes.
11244
11245 2004-04-29  Martin Baulig  <martin@ximian.com>
11246
11247         * class.cs (Event.Define): Don't emit the field and don't set
11248         RTSpecialName and SpecialName for events on interfaces.  Fixes
11249         #57703. 
11250
11251 2004-04-29  Raja R Harinath  <rharinath@novell.com>
11252
11253         Refactor Attribute.ApplyAttributes.
11254         * attribute.cs (Attributable): New base class for objects that can
11255         have Attributes applied on them.
11256         (Attribute): Make AttributeUsage fields public.
11257         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
11258         (Attribute.IsInternalCall): New property.
11259         (Attribute.UsageAttr): Convert to a public read-only property.
11260         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
11261         (Attribute.ResolveType, Attribute.Resolve)
11262         (Attribute.ScanForIndexerName): Update to reflect changes.
11263         (Attribute.CheckAttributeTarget): Re-format.
11264         (Attribute.ApplyAttributes): Refactor, to various
11265         Attributable.ApplyAttributeBuilder methods.
11266         * decl.cs (MemberCore): Make Attributable.
11267         * class.cs (Accessor): Make Attributable.
11268         (MethodData.ApplyAttributes): Use proper attribute types, not
11269         attribute names.
11270         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
11271         (TypeContainer.ApplyAttributeBuilder)
11272         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
11273         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
11274         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
11275         (Operator.ApplyAttributeBuilder): New factored-out methods.
11276         * const.cs (Const.ApplyAttributeBuilder): Likewise.
11277         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
11278         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
11279         * parameter.cs (ParameterBase): New Attributable base class
11280         that can also represent Return types.
11281         (Parameter): Update to the changes.
11282
11283 2004-04-29  Jackson Harper  <jackson@ximian.com>
11284
11285         * driver.cs: Prefer the corlib system version when looking for
11286         assemblies in the GAC. This is still a hack, but its a better hack
11287         now.
11288         
11289 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
11290
11291         * decl.cs, enum.cs: Improved error 3005 reporting.
11292   
11293         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
11294         (related_symbols): New private member for list of symbols
11295         related to reported error/warning.
11296         
11297         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
11298
11299 2004-04-29  Martin Baulig  <martin@ximian.com>
11300
11301         * ecore.cs (Expression.Constantify): If we're an enum and
11302         TypeManager.TypeToCoreType() doesn't give us another type, use
11303         t.UnderlyingSystemType.  Fixes #56178.  
11304
11305 2004-04-29  Martin Baulig  <martin@ximian.com>
11306
11307         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
11308         interfaces and for each interface, only add members directly
11309         declared in that interface.  Fixes #53255.
11310
11311 2004-04-28  Martin Baulig  <martin@ximian.com>
11312
11313         * expression.cs (ConditionalLogicalOperator): Use a temporary
11314         variable for `left' to avoid that we evaluate it more than once;
11315         bug #52588.
11316
11317 2004-04-28  Martin Baulig  <martin@ximian.com>
11318
11319         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
11320         `void[]' (CS1547).
11321
11322 2004-04-28  Martin Baulig  <martin@ximian.com>
11323
11324         * statement.cs (LocalInfo.Resolve): Check whether the type is not
11325         void (CS1547).
11326
11327         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
11328         whether the type is not void (CS1547).
11329
11330 2004-04-28  Martin Baulig  <martin@ximian.com>
11331
11332         * expression.cs (Unary.DoResolveLValue): Override this and report
11333         CS0131 for anything but Operator.Indirection.
11334
11335 2004-04-28  Martin Baulig  <martin@ximian.com>
11336
11337         Committing a patch from Ben Maurer; see bug #50820.
11338
11339         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
11340         check for classes.
11341
11342         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
11343         classes.        
11344
11345 2004-04-28  Martin Baulig  <martin@ximian.com>
11346
11347         Committing a patch from Ben Maurer; see bug #50820.
11348
11349         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
11350         check for classes.
11351
11352         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
11353         classes.        
11354
11355 2004-04-28  Martin Baulig  <martin@ximian.com>
11356
11357         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
11358         (Block.AddLabel): Call DoLookupLabel() to only search in the
11359         current block.
11360
11361 2004-04-28  Martin Baulig  <martin@ximian.com>
11362
11363         * cfold.cs (ConstantFold.BinaryFold): Added special support for
11364         comparing StringConstants and NullLiterals in Equality and Inequality.
11365
11366 2004-04-28  Jackson Harper  <jackson@ximian.com>
11367
11368         * driver.cs: Attempt to load referenced assemblies from the
11369         GAC. This is the quick and dirty version of this method that
11370         doesnt take into account versions and just takes the first
11371         canidate found. Will be good enough for now as we will not have more
11372         then one version installed into the GAC until I update this method.
11373
11374 2004-04-28  Martin Baulig  <martin@ximian.com>
11375
11376         * typemanager.cs (TypeManager.CheckStructCycles): New public
11377         static method to check for cycles in the struct layout.
11378
11379         * rootcontext.cs (RootContext.PopulateTypes): Call
11380         TypeManager.CheckStructCycles() for each TypeContainer.
11381         [Note: We only need to visit each type once.]
11382
11383 2004-04-28  Martin Baulig  <martin@ximian.com>
11384
11385         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
11386
11387         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
11388         success and added `out object value'.  Use a `bool resolved' field
11389         to check whether we've already been called rather than
11390         `ConstantValue != null' since this breaks for NullLiterals.
11391
11392 2004-04-28  Raja R Harinath  <rharinath@novell.com>
11393
11394         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
11395         setting of this flag, since the 'set' method may be non-public.
11396
11397 2004-04-28  Raja R Harinath  <rharinath@novell.com>
11398
11399         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
11400         check on current_vector.Block.
11401
11402 2004-04-27  Martin Baulig  <martin@ximian.com>
11403
11404         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
11405         a field initializer.  Fixes #56459.
11406
11407 2004-04-27  Martin Baulig  <martin@ximian.com>
11408
11409         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
11410         we're not attempting to use an indexer.  Fixes #52154.
11411
11412 2004-04-27  Martin Baulig  <martin@ximian.com>
11413
11414         * statement.cs (Return): Don't create a return label if we don't
11415         need it; reverts my change from January 20th.  Thanks to Ben
11416         Maurer for this.
11417
11418 2004-04-27  Martin Baulig  <martin@ximian.com>
11419
11420         According to the spec, `goto' can only leave a nested scope, but
11421         never enter it.
11422
11423         * statement.cs (Block.LookupLabel): Only lookup in the current
11424         block, don't recurse into parent or child blocks.
11425         (Block.AddLabel): Check in parent and child blocks, report
11426         CS0140/CS0158 if we find a duplicate.
11427         (Block): Removed this indexer for label lookups.
11428         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
11429         this already does the error reporting for us.
11430
11431         * flowanalysis.cs
11432         (FlowBranching.UsageVector.Block): New public variable; may be null.
11433         (FlowBranching.CreateSibling): Added `Block' argument.
11434         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
11435         label for the target of a `goto' and check whether we're not
11436         leaving a `finally'.
11437
11438 2004-04-27  Martin Baulig  <martin@ximian.com>
11439
11440         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
11441         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
11442         just for returns).
11443
11444 2004-04-27  Martin Baulig  <martin@ximian.com>
11445
11446         * statement.cs (Block.AddLabel): Also check for implicit blocks
11447         and added a CS0158 check.
11448
11449 2004-04-27  Martin Baulig  <martin@ximian.com>
11450
11451         * flowanalysis.cs (FlowBranchingLoop): New class.
11452         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
11453         UsageVector's instead of an ArrayList.
11454         (FlowBranching.Label): Likewise.
11455         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
11456         (FlowBranching.AddBreakVector): New method.
11457
11458 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
11459
11460         * attribute.cs: Small regression fix: only convert the type if we
11461         the type is different, fixes System.Drawing build.
11462
11463 2004-04-27  Martin Baulig  <martin@ximian.com>
11464
11465         * attribute.cs (Attribute.Resolve): If we have a constant value
11466         for a named field or property, implicity convert it to the correct
11467         type.
11468
11469 2004-04-27  Raja R Harinath  <rharinath@novell.com>
11470
11471         * statement.cs (Block.Block): Implicit blocks share
11472         'child_variable_names' fields with parent blocks.
11473         (Block.AddChildVariableNames): Remove.
11474         (Block.AddVariable): Mark variable as "used by a child block" in
11475         every surrounding block.
11476         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
11477         been used in a child block, complain about violation of "Invariant
11478         meaning in blocks" rule.
11479         * cs-parser.jay (declare_local_variables): Don't use
11480         AddChildVariableNames.
11481         (foreach_statement): Don't create an implicit block: 'foreach'
11482         introduces a scope.
11483
11484 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
11485
11486         * convert.cs (ImplicitNumericConversion): 0 is also positive when
11487         converting from 0L to ulong.  Fixes 57522.
11488
11489 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
11490
11491         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
11492         derived class hides via 'new' keyword field from base class (test-242.cs).
11493         TODO: Handle this in the more general way.
11494         
11495         * class.cs (CheckBase): Ditto.
11496
11497 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
11498
11499         * decl.cs (caching_flags): New member for storing cached values
11500         as bit flags.
11501         (MemberCore.Flags): New enum where bit flags for caching_flags
11502         are defined.
11503         (MemberCore.cls_compliance): Moved to caching_flags.
11504         (DeclSpace.Created): Moved to caching_flags.
11505
11506         * class.cs: Use caching_flags instead of DeclSpace.Created
11507         
11508 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
11509
11510         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
11511         if we are only a derived class, not a nested class.
11512
11513         * typemanager.cs: Same as above, but do this at the MemberLookup
11514         level (used by field and methods, properties are handled in
11515         PropertyExpr).   Allow for the qualified access if we are a nested
11516         method. 
11517
11518 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
11519
11520         * class.cs: Refactoring.
11521         (IMethodData): New inteface; Holds links to parent members
11522         to avoid member duplication (reduced memory allocation).
11523         (Method): Implemented IMethodData interface.
11524         (PropertyBase): New inner classes for get/set methods.
11525         (PropertyBase.PropertyMethod): Implemented IMethodData interface
11526         (Event): New inner classes for add/remove methods.
11527         (Event.DelegateMethod): Implemented IMethodData interface.
11528
11529         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
11530         EmitContext (related to class.cs refactoring).
11531
11532 2004-04-21  Raja R Harinath  <rharinath@novell.com>
11533
11534         * delegate.cs (Delegate.VerifyApplicability): If the number of
11535         arguments are the same as the number of parameters, first try to
11536         verify applicability ignoring  any 'params' modifier on the last
11537         parameter.
11538         Fixes #56442.
11539
11540 2004-04-08  Martin Baulig  <martin@ximian.com>
11541
11542         Merged latest changes into gmcs.  Please keep this comment in
11543         here, it makes it easier for me to see what changed in MCS since
11544         the last time I merged.
11545
11546 2004-04-16  Raja R Harinath  <rharinath@novell.com>
11547
11548         * class.cs (TypeContainer.AddIndexer): Use
11549         'ExplicitInterfaceName' to determine if interface name was
11550         explicitly specified.  'InterfaceType' is not initialized at this time.
11551         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
11552         Indexers array is already in the required order.  Initialize
11553         'IndexerName' only if there are normal indexers.
11554         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
11555         (TypeContainer.Emit): Emit DefaultMember attribute only if
11556         IndexerName is initialized.
11557         Fixes #56300.
11558
11559 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
11560
11561         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
11562         Fixes #57007
11563
11564 2004-04-15  Raja R Harinath  <rharinath@novell.com>
11565
11566         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
11567         attributes.
11568         Fix for #56456.
11569
11570         * attribute.cs (Attribute.Resolve): Check for duplicate named
11571         attributes.
11572         Fix for #56463.
11573
11574 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
11575
11576         * iterators.cs (MarkYield): track whether we are in an exception,
11577         and generate code accordingly.  Use a temporary value to store the
11578         result for our state.
11579
11580         I had ignored a bit the interaction of try/catch with iterators
11581         since their behavior was not entirely obvious, but now it is
11582         possible to verify that our behavior is the same as MS .NET 2.0
11583
11584         Fixes 54814
11585
11586 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
11587
11588         * iterators.cs: Avoid creating temporaries if there is no work to
11589         do. 
11590
11591         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
11592         Enumerations, use TypeManager.EnumToUnderlying and call
11593         recursively. 
11594
11595         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
11596         bug #57013
11597
11598         (This.Emit): Use EmitContext.EmitThis to emit our
11599         instance variable.
11600
11601         (This.EmitAssign): Ditto.
11602
11603         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
11604         codepaths, we will move all the functionality into
11605         Mono.CSharp.This 
11606
11607         (FieldExpr.EmitAssign): Ditto.
11608
11609         This fixes several hidden bugs that I uncovered while doing a code
11610         review of this today.
11611
11612         * codegen.cs (EmitThis): reworked so the semantics are more clear
11613         and also support value types "this" instances.
11614
11615         * iterators.cs: Changed so that for iterators in value types, we
11616         do not pass the value type as a parameter.  
11617
11618         Initialization of the enumerator helpers is now done in the caller
11619         instead of passing the parameters to the constructors and having
11620         the constructor set the fields.
11621
11622         The fields have now `assembly' visibility instead of private.
11623
11624 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
11625
11626         * expression.cs (Argument.Resolve): Check if fields passed as ref
11627         or out are contained in a MarshalByRefObject.
11628
11629         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
11630         another compiler type.
11631
11632 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
11633
11634         * class.cs (Indexer.Define): use the new name checking method.
11635         Also, return false on an error.
11636         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
11637         (is_identifier_[start/part]_character): make static.
11638
11639 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
11640
11641         * expression.cs (Binary.ResolveOperator): Do no append strings
11642         twice: since we can be invoked more than once (array evaluation)
11643         on the same concatenation, take care of this here.  Based on a fix
11644         from Ben (bug #56454)
11645
11646 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
11647
11648         * codegen.cs: Fix another case where CS1548 must be reported (when 
11649         delay-sign isn't specified and no private is available #56564). Fix
11650         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
11651         error when MCS is used on the MS runtime and we need to delay-sign 
11652         (which seems unsupported by AssemblyBuilder - see #56621).
11653
11654 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
11655
11656         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
11657         (TypeManager.ComputeNamespaces): Faster implementation for
11658         Microsoft runtime.
11659
11660         * compiler.csproj: Updated AssemblyName to mcs.
11661
11662 2004-05-11  Jackson Harper  <jackson@ximian.com>
11663
11664         * Makefile: Preserve MONO_PATH
11665         
11666 2004-05-11  Jackson Harper  <jackson@ximian.com>
11667
11668         * Makefile: Use mono and mcs to build gmcs
11669         
11670 2004-05-03  Miguel de Icaza  <miguel@ximian.com>
11671
11672         * codegen.cs: Add patch from Robert Shade
11673         <rshade@dvsconsulting.com>, use FileAccess.Read on the keyfile, to
11674         sync with mcs.
11675
11676 2004-05-02  Sebastien Pouliot  <sebastien@ximian.com>
11677
11678         * CryptoConvert.cs: Updated to latest version. Fix issue with 
11679         incomplete key pairs (#57941).
11680
11681 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
11682
11683         * codegen.cs: Fix another case where CS1548 must be reported (when 
11684         delay-sign isn't specified and no private is available #56564). Fix
11685         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
11686         error when MCS is used on the MS runtime and we need to delay-sign 
11687         (which seems unsupported by AssemblyBuilder - see #56621).
11688
11689 2004-04-29  Jackson Harper  <jackson@ximian.com>
11690
11691         * Makefile: Set MONO_PATH to use the bootstrap corlib
11692         * driver.cs: Check the GAC for referenced assemblies.
11693                 
11694 2004-04-29  Martin Baulig  <martin@ximian.com>
11695
11696         * Makefile (gmcs.exe): Set MONO_PATH to use `../class/lib/net_2_0'.
11697
11698 2004-04-07  Martin Baulig  <martin@ximian.com>
11699
11700         * expression.cs (Binary.ResolveOperator): Added special case for
11701         Equality/Inequality between a type parameter and a null literal.
11702
11703 2004-04-07  Martin Baulig  <martin@ximian.com>
11704
11705         * convert.cs: Check null literal -> type parameter conversions.
11706
11707 2004-04-07  Martin Baulig  <martin@ximian.com>
11708
11709         * generic.cs (ConstructedType.CheckConstraints): Enforce the
11710         `class' and `struct' constraints.
11711
11712 2004-04-07  Martin Baulig  <martin@ximian.com>
11713
11714         * generic.cs (SpecialConstraint): New public enum.
11715         (Constraints.Resolve): Added support for the `class' and `struct'
11716         constraints.
11717
11718         * cs-parser.jay (type_parameter_constraint): Added support for the
11719         `class' and `struct' constraints.
11720
11721 2004-04-07  Martin Baulig  <martin@ximian.com>
11722
11723         * support.cs (GenericConstraints): Replaced `Types' by
11724         `ClassConstraint' and `InterfaceConstraints'; added
11725         `HasClassConstraint'.   
11726
11727 2004-04-07  Martin Baulig  <martin@ximian.com>
11728
11729         * generic.cs
11730         (Constraints.InterfaceConstraints): New public property.
11731         (Constraints.Types): Make this property public
11732         (TypeParameter): Implement IMemberContainer.
11733         (TypeParameter.Define): Take a `GenericTypeParameterBuilder'
11734         instead of a TypeBuilder/MethodBuilder; pass the interface
11735         constraints to TypeManager.AddTypeParameter().
11736         (TypeParameter.DefineType): Just take an EmitContext and no
11737         TypeBuilder/MethodBuilder.  Use the new public API.
11738
11739         * typemanager.cs (TypeManager.AddTypeParameter): Added
11740         `TypeExpr[]' argument; add the interfaces to the
11741         `builder_to_ifaces' hash.
11742         (TypeManager.LookupMemberContainer): For
11743         GenericTypeParameterBuilders, get the TypeParameter from the
11744         `builder_to_type_param'.
11745         (TypeManager.FindMembers): For GenericTypeParameterBuilders, get
11746         the TypeParameter and call FindMembers on it.
11747
11748 2004-04-07  Martin Baulig  <martin@ximian.com>
11749
11750         * class.cs
11751         (MethodCore.GenericMethod): Moved this field here from Method.
11752         (MethodCore.IsDuplicateImplementation): Take the number of type
11753         parameters into account if we're a generic method.
11754
11755         * expression.cs (Invocation.InferTypeArguments): Don't return true
11756         if `arguments' is null; we still need to check whether we actually
11757         don't need to infer anything in this case.
11758         (MemberAccess): Merged the functionality from GenericMemberAccess
11759         into this class.
11760
11761         * generic.cs (GenericMemberAccess): Removed.
11762
11763 2004-04-05  Martin Baulig  <martin@ximian.com>
11764
11765         * decl.cs (MemberCore): For generic classes, interfaces and
11766         structs, `Name' now includes the number of type parameters
11767         ("Stack!1.Node!1").
11768         (DeclSpace.FindType): Removed the `num_type_args' argument; we now
11769         encode the number of type arguments in the type name.
11770
11771         * expression.cs (Expression.MemberLookup): Removed the
11772         `num_type_args' argument; we now encode the number of type
11773         arguments in the type name.
11774
11775         * ecore.cs (SimpleName): Encode the number of type arguments in
11776         the type name itself.
11777
11778         * generic.cs (ConstructedType): Likewise.
11779
11780         * tree.cs (Tree.RecordDecl): Take a `string' instead of a
11781         `MemberName'; we now include the number of type parameters in the
11782         type name.
11783
11784         * typemanager.cs (TypeManager.CheckGeneric): Removed.
11785         (TypeManager.MemberLookup): Removed the
11786         `num_type_args' argument; we now encode the number of type
11787         arguments in the type name.     
11788
11789 2004-04-03  Martin Baulig  <martin@ximian.com>
11790
11791         * decl.cs (MemberCore.ctor): Take a MemberName instead of a sting.
11792         (MemberCore.MemberName): Moved here from MemberBase.
11793         (DeclSpace.SetParameterInfo): Just take the constraints as an
11794         ArrayList; we already have the type parameters in our
11795         `MemberName'; also do the CS0080 reporting here.
11796
11797         * cs-parser.jay (struct_declaration): Use `member_name' instead of
11798         `IDENTIFIER opt_type_parameter_list'; when constructing our
11799         `MemberName', it'll already include our type parameters.
11800         (class_declaration, interface_declaration): Likewise.
11801         (delegate_declaration): Likewise.
11802         (MakeName): Take a MemberName and return a MemberName.
11803         The following two changes are required to avoid shift/reduce conflicts:
11804         (member_name): Don't include a TypeName anymore; ie. this is now
11805         just 'IDENTIFIER opt_type_parameter_list'.
11806         (property_declaration, event_declaration): Use a
11807         `namespace_or_type_name' instead of a `member_name'.            
11808
11809 2004-04-03  Martin Baulig  <martin@ximian.com>
11810
11811         * decl.cs (MemberName): Renamed to `TypeName' and created a new
11812         `MemberName' class.
11813         (TypeName): Formerly known as MemberName.
11814
11815         * namespace.cs (NamespaceEntry.UsingAlias): Take a `TypeName'
11816         instead of a `MemberName'.
11817
11818         * cs-parser.jay (namespace_or_type_name): Create a TypeName.
11819         (member_name): New rule; create a MemberName.
11820
11821 2004-04-02  Martin Baulig  <martin@ximian.com>
11822
11823         * namespace.cs (NamespaceEntry.VerifyUsing): Added error checking
11824         (CS0305 and CS0308).
11825
11826 2004-04-02  Martin Baulig  <martin@ximian.com>
11827
11828         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Added
11829         support for nested types.
11830
11831 2004-04-02  Martin Baulig  <martin@ximian.com>
11832
11833         * ecore.cs (IAlias): New public interface.
11834         (TypeExpr, TypeExpression): Implement IAlias.
11835         (TypeAliasExpression): New public class.
11836
11837         * namespace.cs (Namespace): Implement IAlias.
11838         (Namespace.Lookup): Return an IAlias instead on an object.
11839         (Namespace.DefineName): Take an IAlias instead of an object.
11840         (NamespaceEntry.AliasEntry.Resolve): Return an IAlias instead of
11841         an object.
11842         (NamespaceEntry.UsingAlias): Take a Membername instead of an
11843         Expression.
11844         (NamespaceEntry.LookupAlias): Return an IAlias instead on an
11845         object.
11846         (NamespaceEntry.Lookup): Likewise.
11847
11848         * rootcontext.cs (RootContext.LookupType): Return a TypeExpr
11849         instead of a Type.      
11850
11851         * decl.cs (DeclSpace): Implement IAlias.
11852         (DeclSpace.LookupAlias): Return an IAlias instead of a string.
11853
11854         * generic.cs (ConstructedType): Improved error checking.
11855
11856 2004-04-02  Martin Baulig  <martin@ximian.com>
11857
11858         * convert.cs: Added type parameter conversions.
11859
11860         * ecore.cs
11861         (UnboxCast.Emit): Emit an `unbox.any' for type params.
11862         (ClassCast.Emit): If the source type is a type parameter, box it.
11863         If the target type is a type parameter, emit an `unbox.any'
11864         instead of a `classcast'.1      
11865
11866 2004-04-01  Martin Baulig  <martin@ximian.com>
11867
11868         * cs-tokenizer.cs (parse_less_than): Allow Token.DOT.
11869
11870 2004-04-01  Martin Baulig  <martin@ximian.com>
11871
11872         * generic.cs (ConstructedType.CheckConstraints): Use
11873         Convert.ImplicitStandardConversionExists(); user-defined implicit
11874         conversions are not allowed according to the spec.
11875
11876 2004-03-30  Martin Baulig  <martin@ximian.com>
11877
11878         * expression.cs (New): Added support for type parameters.
11879
11880         * typemanager.cs
11881         (TypeManager.activator_type): New public static field.
11882         (TypeManager.activator_create_instance): Likewise.
11883
11884 2004-03-30  Martin Baulig  <martin@ximian.com>
11885
11886         * typemanager.cs (TypeManager.HasConstructorConstraint): New
11887         public method.
11888
11889 2004-03-30  Martin Baulig  <martin@ximian.com>
11890
11891         * generic.cs (ConstructedType.CheckConstraints): Actually follow
11892         the spec here: the argument type must be convertible to the
11893         constraints.
11894
11895 2004-03-30  Martin Baulig  <martin@ximian.com>
11896
11897         * generic.cs
11898         (TypeParameter.Define, TypeParameter.DefineMethod): Call
11899         TypeManager.AddTypeParameter().
11900         (ConstructedType.CheckConstraints): Re-enable this and actually
11901         check whether we have a constructor constraint.
11902
11903         * typemanager.cs
11904         (TypeManager.builder_to_type_param): New static field.
11905         (TypeManager.AddTypeParameter): New static method.
11906         (TypeManager.LookupTypeParameter): New public method.
11907
11908 2004-03-30  Martin Baulig  <martin@ximian.com>
11909
11910         * generic.cs (TypeParameter.DefineType): Return a boolean and use
11911         the new API to actually define the constructor constraint.
11912
11913         * typemanager.cs
11914         (TypeManager.new_constraint_attr_type): New static field.
11915         (TypeManager.InitCoreTypes): Initialize it.
11916
11917 2004-03-30  Martin Baulig  <martin@ximian.com>
11918
11919         * generic.cs (Constraints): Completed error checking, use correct
11920         error numbers.
11921
11922 2004-03-29  Martin Baulig  <martin@ximian.com>
11923
11924         * delegate.cs (Delegate.VerifyMethod): Infer type arguments.
11925
11926         * expression.cs (Invocation.InferTypeArguments): Added overloaded
11927         public version which takes a `ParameterData pd' instead of an
11928         `ArrayList args'.
11929
11930 2004-03-29  Martin Baulig  <martin@ximian.com>
11931
11932         * typemanager.cs (TypeManager.IsGenericMethod): Take a MethodBase,
11933         not a MethodInfo.       
11934
11935 2004-03-29  Martin Baulig  <martin@ximian.com>
11936
11937         * expression.cs (Argument.ResolveMethodGroup): If we're a
11938         ConstructedType, call GetMemberAccess() on it.  
11939
11940 2004-03-29  Martin Baulig  <martin@ximian.com>
11941
11942         * class.cs (MethodBase.CheckGenericOverride): New abstract method.
11943         (MethodCore.CheckGenericOverride): When overriding a generic
11944         method, check whether the constraints match.
11945
11946         * support.cs (GenericConstraints): New public interface.
11947         (ParameterData.GenericConstraints): New public method.
11948
11949         * parameter.cs (Parameter.Resolve): Check whether we're a generic
11950         method parameter and compute our constraints if appropriate.
11951         (Parameter.GenericConstraints): New public property.
11952
11953         * generic.cs (Constraints): Implement GenericConstraints.
11954
11955 2004-03-29  Martin Baulig  <martin@ximian.com>
11956
11957         * decl.cs (MemberCache.FindMemberToOverride): Use
11958         `paramTypes [j].Equals (cmpAttrs [j])' instead of `=='.
11959
11960 2004-03-29  Martin Baulig  <martin@ximian.com>
11961
11962         * generic.cs (GenericMethod.Define): Resolve our type parameters.
11963
11964 2004-03-29  Martin Baulig  <martin@ximian.com>
11965
11966         * cs-parser.jay: Report CS0080 instead of -200 ("Constraints are
11967         not allowed on non-generic declarations").
11968
11969 2004-03-29  Martin Baulig  <martin@ximian.com>
11970
11971         * expression.cs (Invocation.InferTypeArguments): Added overloaded
11972         public version of this method.
11973
11974         * class.cs (MethodCore.IsDuplicateImplementation): Use
11975         Invocation.InferTypeArguments() to check this.
11976
11977 2004-03-29  Martin Baulig  <martin@ximian.com>
11978
11979         * convert.cs: Use TypeManager.IsDelegateType() instead of
11980         comparing types correctly.
11981
11982 2004-03-29  Martin Baulig  <martin@ximian.com>
11983
11984         * convert.cs: Use TypeManager.IsSubclassOf() instead of comparing
11985         types directly to make it work for generic instances.
11986
11987         * typemanager.cs (TypeManager.IsSubclassOf): New static method.
11988
11989 2004-03-29  Martin Baulig  <martin@ximian.com>
11990
11991         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Added
11992         support for arrays.     
11993
11994 2004-03-24  Martin Baulig  <martin@ximian.com>
11995
11996         * decl.cs (DeclSpace.FindType): Also use
11997         TypeManager.CheckGeneric() for types from the using clauses.
11998
11999 2004-03-23  Martin Baulig  <martin@ximian.com>
12000
12001         * expression.cs (Invocation.OverloadResolve): Added `bool
12002         may_fail' argument and use it instead of the Location.IsNull() hack.
12003
12004 2004-03-23  Martin Baulig  <martin@ximian.com>
12005
12006         * expression.cs (Invocation.InferType): Use correct type inference
12007         rules here.     
12008
12009 2004-03-23  Martin Baulig  <martin@ximian.com>
12010
12011         * ecore.cs (MethodGroupExpr.Name): Use
12012         TypeManager.CSharpSignature() instead of just the name.
12013
12014         * expression.cs (Invocation.OverloadResolve): Provide better error
12015         reporting.
12016         (Invocation.DoResolve): OverloadResolve() never returns null
12017         without reporting an error, so removed the error -6 reporting here.
12018
12019 2004-03-23  Martin Baulig  <martin@ximian.com>
12020
12021         * typemanager.cs (TypeManager.GetMethodFlags): Fixed the FIXME for
12022         generic methods.
12023
12024         * cs-parser.jay (delegate_declaration): Support generic delegates.
12025
12026         * delegate.cs: Support generic delegates.
12027
12028 2004-03-22  Martin Baulig  <martin@ximian.com>
12029
12030         * expression.cs (Invocation.InferParamsTypeArguments): New static
12031         method; does type inference for params arguments.
12032
12033 2004-03-21  Martin Baulig  <martin@ximian.com>
12034
12035         * typemanager.cs (TypeManager.IsGenericMethod): New public static
12036         method; checks whether a method is a generic method.    
12037
12038         * expression.cs (Invocation.InferTypeArguments): New static method;
12039         infer type arguments for generic method invocation.
12040
12041         * ecore.cs (MethodGroupExpr.HasTypeArguments): New public
12042         property; we set this to true if we're resolving a generic method
12043         invocation and the user specified type arguments, ie. we're not
12044         doing type inference.
12045
12046 2004-03-20  Martin Baulig  <martin@ximian.com>
12047
12048         * class.cs (MethodData.DeclaringType): New public property.
12049         (MethodData.Define): Set DeclaringType here.
12050         (Operator.Define): Use OperatorMethod.MethodData.DeclaringType
12051         instead of OperatorMethodBuilder.DeclaringType.
12052
12053 2004-03-20  Martin Baulig  <martin@ximian.com>
12054
12055         * cs-tokenizer.cs (xtoken): Return a special
12056         Token.DEFAULT_OPEN_PARENS for "`default' followed by open parens".
12057
12058         * cs-parser.jay (default_value_expression): Switch to the new
12059         syntax (14.5.13).
12060
12061 2004-03-19  Martin Baulig  <martin@ximian.com>
12062
12063         * decl.cs (MemberName): New class.  We use this to "construct"
12064         namespace_or_type_name's.
12065
12066         * generics.cs (TypeArguments.GetDeclarations): New public method;
12067         returns the type arguments as a string[] and reports a CS0081 if
12068         one of them is not an identifier.
12069
12070         * class.cs (MemberBase): The .ctor now takes the name as a
12071         MemberName instead of a string.
12072         (MemberBase.ExplicitInterfaceName): Changed type from string to
12073         Expression.
12074         (MemberBase.DoDefine): If we're an explicit implementation, the
12075         InterfaceType may be a generic instance.
12076
12077         * cs-parser.jay (namespace_or_type_name): Return a MemberName.
12078         (namespace_name): Call MemberName.GetName () to transform the
12079         MemberName into a string and ensure we don't have any type
12080         arguments.
12081         (type_name): Call MemberName.GetTypeExpression() to transfrom the
12082         MemberName into an expression.
12083         (method_header): Use namespace_or_type_name instead of member_name.     
12084
12085 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
12086
12087         * rootcontext.cs: Add new types to the boot resolution.
12088
12089         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
12090         MulticastDelegate is not allowed.
12091
12092         * typemanager.cs: Add new types to lookup: System.TypedReference
12093         and ArgIterator.
12094
12095         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
12096         check for TypedReference or ArgIterator, they are not allowed. 
12097
12098         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
12099         makes us properly catch 1510 in some conditions (see bug 56016 for
12100         details). 
12101
12102 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
12103
12104         * CryptoConvert.cs: update from corlib version
12105         with endian fixes.
12106
12107 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
12108
12109         * class.cs (Indexer.Define): Check indexername declaration
12110
12111 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
12112
12113         * attribute.cs (IsClsCompliant): Fixed problem with handling
12114         all three states (compliant, not-compliant, undetected).
12115
12116 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
12117
12118         * attribute.cs (Attribute): Location is now public.
12119         (Resolve): Store resolved arguments (pos_values) in attribute class.
12120         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
12121         (GetClsCompliantAttributeValue): New method that gets
12122         CLSCompliantAttribute value.
12123         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
12124         if exists else null.
12125         (AttributeTester): New class for CLS-Compliant verification routines.
12126
12127         * class.cs (Emit): Add CLS-Compliant verification.
12128         (Method.GetSignatureForError): Implemented.
12129         (Constructor.GetSignatureForError): Implemented
12130         (Constructor.HasCompliantArgs): Returns if constructor has
12131         CLS-Compliant arguments.
12132         (Constructor.Emit): Override.
12133         (Construcor.IsIdentifierClsCompliant): New method; For constructors
12134         is needed to test only parameters.
12135         (FieldBase.GetSignatureForError): Implemented.
12136         (TypeContainer): New member for storing base interfaces.
12137         (TypeContainer.FindMembers): Search in base interfaces too.
12138
12139         * codegen.cs (GetClsComplianceAttribute): New method that gets
12140         assembly or module CLSCompliantAttribute value.
12141         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
12142         for assembly.
12143         (ModuleClass.Emit): Add error 3012 test.
12144
12145         * const.cs (Emit): Override and call base for CLS-Compliant tests.
12146
12147         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
12148         state for all decl types.
12149         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
12150         if CLS-Compliant tests are required.
12151         (IsClsCompliaceRequired): New method. Analyze whether code
12152         must be CLS-Compliant.
12153         (IsExposedFromAssembly): New method. Returns true when MemberCore
12154         is exposed from assembly.
12155         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
12156         value or gets cached value.
12157         (HasClsCompliantAttribute): New method. Returns true if MemberCore
12158         is explicitly marked with CLSCompliantAttribute.
12159         (IsIdentifierClsCompliant): New abstract method. This method is
12160         used to testing error 3005.
12161         (IsIdentifierAndParamClsCompliant): New method. Common helper method
12162         for identifier and parameters CLS-Compliant testing.
12163         (VerifyClsCompliance): New method. The main virtual method for
12164         CLS-Compliant verifications.
12165         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
12166         null. I don't know why is null (too many public members !).
12167         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
12168         and get value of first CLSCompliantAttribute that found.
12169
12170         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
12171         (VerifyClsCompliance): Override and add extra tests.
12172
12173         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
12174         clscheck- disable CLS-Compliant verification event if assembly is has
12175         CLSCompliantAttribute(true).
12176
12177         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
12178         ApllyAttribute is now called in emit section as in the other cases.
12179         Possible future Emit integration.
12180         (IsIdentifierClsCompliant): New override.
12181         (VerifyClsCompliance): New override.
12182         (GetEnumeratorName): Returns full enum name.
12183
12184         * parameter.cs (GetSignatureForError): Implemented.
12185
12186         * report.cs (WarningData): New struct for Warning message information.
12187         (LocationOfPreviousError): New method.
12188         (Warning): New method. Reports warning based on the warning table.
12189         (Error_T): New method. Reports error based on the error table.
12190
12191         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
12192         verifications are done here.
12193
12194         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
12195
12196         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
12197         CLSCompliantAttribute.
12198         (all_imported_types): New member holds all imported types from other
12199         assemblies.
12200         (LoadAllImportedTypes): New method fills static table with exported types
12201         from all referenced assemblies.
12202         (Modules): New property returns all assembly modules.
12203
12204 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
12205
12206         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
12207         throwing a parser error.
12208
12209         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
12210         which removes the hardcoded get_/set_ prefixes for properties, as
12211         IL allows for the properties to be named something else.  
12212
12213         Bug #56013
12214
12215         * expression.cs: Do not override operand before we know if it is
12216         non-null.  Fix 56207
12217
12218 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12219
12220         * typemanager.cs: support for pinned variables.
12221
12222 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12223
12224         * decl.cs, typemanager.cs: Avoid using an arraylist
12225         as a buffer if there is only one result set.
12226
12227 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12228
12229         * expression.cs: Make sure you cant call a static method
12230         with an instance expression, bug #56174.
12231
12232 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
12233
12234         * class.cs (IsDuplicateImplementation): Improve error reporting to
12235         flag 663 (method only differs in parameter modifier).
12236
12237         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
12238         in preprocessor directives.
12239
12240         * location.cs (LookupFile): Allow for the empty path.
12241
12242         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
12243         better approach for some of that patch, but its failing with the
12244         CharSet enumeration.  For now try/catch will do.
12245
12246         * typemanager.cs: Do not crash if a struct does not have fields.
12247         Fixes 56150.
12248
12249 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12250
12251         * expression.cs: cs0213, cant fix a fixed expression.
12252         fixes 50231.
12253
12254 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12255
12256         * cs-parser.jay: detect invalid embeded statements gracefully.
12257         bug #51113.
12258
12259 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12260
12261         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
12262         As a regex:
12263         s/
12264         the invocation type may not be a subclass of the tye of the item/
12265         The type of the item must be a subclass of the invocation item.
12266         /g
12267
12268         Fixes bug #50820.
12269
12270 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
12271
12272         * attribute.cs: Added methods to get a string and a bool from an
12273         attribute. Required to information from AssemblyKeyFileAttribute,
12274         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
12275         * codegen.cs: Modified AssemblyName creation to include support for
12276         strongnames. Catch additional exceptions to report them as CS1548.
12277         * compiler.csproj: Updated include CryptoConvert.cs.
12278         * compiler.csproj.user: Removed file - user specific configuration.
12279         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
12280         Mono.Security assembly. The original class is maintained and tested in
12281         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
12282         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
12283         like CSC 8.0 (C# v2) supports.
12284         * Makefile: Added CryptoConvert.cs to mcs sources.
12285         * rootcontext.cs: Added new options for strongnames.
12286
12287 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
12288
12289         * driver.cs: For --expect-error, report error code `2'
12290         if the program compiled with no errors, error code `1' if
12291         it compiled with an error other than the one expected.
12292
12293 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
12294
12295         * compiler.csproj: Updated for Visual Studio .NET 2003.
12296         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
12297         * compiler.sln: Updated for Visual Studio .NET 2003.
12298
12299 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
12300
12301         * expression.cs: Fix bug #47234. We basically need to apply the
12302         rule that we prefer the conversion of null to a reference type
12303         when faced with a conversion to 'object' (csc behaviour).
12304
12305 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12306
12307         * statement.cs: Shorter form for foreach, eliminates
12308         a local variable. r=Martin.
12309
12310 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12311
12312         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
12313         checks if we can use brtrue/brfalse to test for 0.
12314         * expression.cs: use the above in the test for using brtrue/brfalse.
12315         cleanup code a bit.
12316
12317 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12318
12319         * expression.cs: Rewrite string concat stuff. Benefits:
12320
12321         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
12322         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
12323         rather than a concat chain.
12324
12325         * typemanager.cs: Add lookups for more concat overloads.
12326
12327 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12328
12329         * expression.cs: Emit shorter il code for array init.
12330
12331         newarr
12332         dup
12333         // set 1
12334
12335         // set 2
12336
12337         newarr
12338         stloc.x
12339
12340         ldloc.x
12341         // set 1
12342
12343         ldloc.x
12344         // set 2
12345
12346 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
12347
12348         * statement.cs: Before, two switch blocks would be merged if the
12349         total size of the blocks (end_item - begin_item + 1) was less than
12350         two times the combined sizes of the blocks.
12351
12352         Now, it will only merge if after the merge at least half of the
12353         slots are filled.
12354
12355         fixes 55885.
12356
12357 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
12358
12359         * class.cs : csc build fix for GetMethods(). See bug #52503.
12360
12361 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
12362
12363         * expression.cs: Make sure fp comparisons work with NaN.
12364         This fixes bug #54303. Mig approved this patch a long
12365         time ago, but we were not able to test b/c the runtime
12366         had a related bug.
12367
12368 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
12369
12370         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
12371
12372 2004-03-19  Martin Baulig  <martin@ximian.com>
12373
12374         * class.cs (MemberCore.IsDuplicateImplementation): Check whether
12375         two overloads may unify for some type parameter substitutions and
12376         report a CS0408 if appropriate.
12377
12378 2004-03-19  Martin Baulig  <martin@ximian.com>
12379
12380         * class.cs (MemberCore.IsDuplicateImplementation): Report the
12381         error here and not in our caller.
12382
12383 2004-03-19  Martin Baulig  <martin@ximian.com>
12384
12385         * interface.cs: Completely killed this file.
12386         (Interface): We're now a TypeContainer and live in class.cs.
12387
12388         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
12389         argument; we're now also called for interfaces.
12390         (TypeContainer.DefineMembers): Allow this method being called
12391         multiple times.
12392         (TypeContainer.GetMethods): New public method; formerly known as
12393         Interface.GetMethod().  This is used by PendingImplementation.
12394         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
12395         it's now private and non-static.
12396         (Interface): Moved this here; it's now implemented similar to
12397         Class and Struct.
12398         (Method, Property, Event, Indexer): Added `bool is_interface'
12399         argument to their .ctor's.
12400         (MemberBase.IsInterface): New public field.
12401
12402         * cs-parser.jay: Create normal Method, Property, Event, Indexer
12403         instances instead of InterfaceMethod, InterfaceProperty, etc.
12404         (opt_interface_base): Removed; we now use `opt_class_base' instead.
12405         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
12406
12407 2004-03-19  Martin Baulig  <martin@ximian.com>
12408
12409         * class.cs (MethodCore.IsDuplicateImplementation): New private
12410         method which does the CS0111 checking.
12411         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
12412         Use IsDuplicateImplementation().
12413
12414 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
12415
12416         * decl.cs (FindMemberToOverride): New method to find the correct
12417         method or property to override in the base class.
12418         * class.cs
12419             - Make Method/Property use the above method to find the
12420               version in the base class.
12421             - Remove the InheritableMemberSignatureCompare as it is now
12422               dead code.
12423
12424         This patch makes large code bases much faster to compile, as it is
12425         O(n) rather than O(n^2) to do this validation.
12426
12427         Also, it fixes bug 52458 which is that nested classes are not
12428         taken into account when finding the base class member.
12429
12430         Reviewed/Approved by Martin.
12431
12432 2004-03-17  Martin Baulig  <martin@ximian.com>
12433
12434         * expression.cs (MemberAccess.DoResolve): Take the parent's number
12435         of type arguments into account; use the `real_num_type_args'
12436         approach like in DoResolveAsTypeStep().
12437
12438         * generic.cs (GenericMemberAccess.DoResolve): Make this work for
12439         nested types.
12440
12441 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
12442
12443         * interface.cs: In all interface classes removed redundant
12444         member initialization.
12445
12446 2004-03-16  Martin Baulig  <martin@ximian.com>
12447
12448         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
12449
12450 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
12451
12452         * decl.cs (DefineTypeAndParents): New helper method to define a
12453         type's containers before the type itself is defined;  This is a
12454         bug exposed by the recent changes to Windows.Forms when an
12455         implemented interface was defined inside a class that had not been
12456         built yet.   
12457
12458         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
12459
12460         (Check): Loop correctly to report errors modifiers
12461         (UNSAFE was not in the loop, since it was the same as TOP).
12462
12463         * interface.cs: Every interface member now takes a ModFlags,
12464         instead of a "is_new" bool, which we set on the base MemberCore. 
12465
12466         Every place where we called "UnsafeOk" in the interface, now we
12467         call the proper member (InterfaceMethod.UnsafeOK) instead to get
12468         the unsafe settings from the member declaration instead of the
12469         container interface. 
12470
12471         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
12472
12473         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
12474         `set_indexer_name' to the pending bits (one per type).
12475
12476         We fixed a bug today that was picking the wrong method to
12477         override, since for properties the existing InterfaceMethod code
12478         basically ignored the method name.  Now we make sure that the
12479         method name is one of the valid indexer names.
12480
12481 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
12482  
12483         * support.cs (SeekableStreamReader): Keep track of stream byte
12484         positions and don't mix them with character offsets to the buffer.
12485
12486         Patch from Gustavo Giráldez
12487
12488 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
12489
12490         * interface.cs (InterfaceSetGetBase): Removed double member
12491         initialization, base class does it as well.
12492
12493 2004-03-13  Martin Baulig  <martin@ximian.com>
12494
12495         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
12496         when compiling corlib.
12497
12498 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
12499
12500         * convert.cs (ExplicitConversion): We were reporting an error on
12501         certain conversions (object_type source to a value type, when the
12502         expression was `null') before we had a chance to pass it through
12503         the user defined conversions.
12504
12505         * driver.cs: Replace / and \ in resource specifications to dots.
12506         Fixes 50752
12507
12508         * class.cs: Add check for duplicate operators.  Fixes 52477
12509
12510 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
12511
12512         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
12513         that are in the middle of the statements, not only at the end.
12514         Fixes #54987
12515
12516         * class.cs (TypeContainer.AddField): No longer set the
12517         `HaveStaticConstructor' flag, now we call it
12518         `UserDefineStaticConstructor' to diferentiate the slightly
12519         semantic difference.
12520
12521         The situation is that we were not adding BeforeFieldInit (from
12522         Modifiers.TypeAttr) to classes that could have it.
12523         BeforeFieldInit should be set to classes that have no static
12524         constructor. 
12525
12526         See:
12527
12528         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
12529
12530         And most importantly Zoltan's comment:
12531
12532         http://bugzilla.ximian.com/show_bug.cgi?id=44229
12533
12534         "I think beforefieldinit means 'it's ok to initialize the type sometime 
12535          before its static fields are used', i.e. initialization does not need
12536          to be triggered by the first access to the type. Setting this flag
12537          helps the JIT to compile better code, since it can run the static
12538          constructor at JIT time, and does not need to generate code to call it
12539          (possibly lots of times) at runtime. Unfortunately, mcs does not set
12540          this flag for lots of classes like String. 
12541          
12542          csc sets this flag if the type does not have an explicit static 
12543          constructor. The reasoning seems to be that if there are only static
12544          initalizers for a type, and no static constructor, then the programmer
12545          does not care when this initialization happens, so beforefieldinit
12546          can be used.
12547          
12548          This bug prevents the AOT compiler from being usable, since it 
12549          generates so many calls to mono_runtime_class_init that the AOT code
12550          is much slower than the JITted code. The JITted code is faster, 
12551          because it does not generate these calls if the vtable is type is
12552          already initialized, which is true in the majority of cases. But the
12553          AOT compiler can't do this."
12554
12555 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
12556
12557         * class.cs (MethodData.Emit): Refactor the code so symbolic
12558         information is generated for destructors;  For some reasons we
12559         were taking a code path that did not generate symbolic information
12560         before. 
12561
12562 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
12563
12564         * class.cs: Create a Constructor.CheckBase method that
12565         takes care of all validation type code. The method
12566         contains some code that was moved from Define.
12567
12568         It also includes new code that checks for duplicate ctors.
12569         This fixes bug #55148.
12570
12571 2004-03-09  Joshua Tauberer <tauberer@for.net>
12572
12573         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
12574         a { ... }-style array creation invokes EmitStaticInitializers
12575         which is not good for reference-type arrays.  String, decimal
12576         and now null constants (NullCast) are not counted toward
12577         static initializers.
12578
12579 2004-03-05  Martin Baulig  <martin@ximian.com>
12580
12581         * location.cs (SourceFile.HasLineDirective): New public field;
12582         specifies whether the file contains or is referenced by a "#line"
12583         directive.
12584         (Location.DefineSymbolDocuments): Ignore source files which
12585         either contain or are referenced by a "#line" directive.        
12586
12587 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
12588
12589         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
12590         direct access to our parent, so check the method inline there.
12591
12592 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
12593
12594         * expression.cs (Invocation.EmitCall): Miguel's last commit
12595         caused a regression. If you had:
12596
12597             T t = null;
12598             t.Foo ();
12599
12600         In Foo the implict this would be null.
12601
12602 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
12603
12604         * expression.cs (Invocation.EmitCall): If the method is not
12605         virtual, do not emit a CallVirt to it, use Call.
12606
12607         * typemanager.cs (GetFullNameSignature): Improve the method to
12608         cope with ".ctor" and replace it with the type name.
12609
12610         * class.cs (ConstructorInitializer.Resolve): Now the method takes
12611         as an argument the ConstructorBuilder where it is being defined,
12612         to catch the recursive constructor invocations.
12613
12614 2004-03-16  Martin Baulig  <martin@ximian.com>
12615
12616         * expression.cs (MemberAccess.DoResolve): If `expr' resolved to a
12617         ConstructedType, call ResolveType() on it to get the type rather
12618         than just using `expr.Type'.
12619
12620 2004-03-16  Martin Baulig  <martin@ximian.com>
12621
12622         * generics.cs (ConstructedType.GetMemberAccess): Take the
12623         EmitContext instead on the TypeExpr and use
12624         ec.TypeContainer.CurrentType/ec.ContainerType.
12625
12626 2004-03-16  Martin Baulig  <martin@ximian.com>
12627
12628         * ecore.cs (SimpleName.DoResolveAsTypeStep): Lookup type
12629         parameters before aliases.
12630
12631 2004-03-16  Martin Baulig  <martin@ximian.com>
12632
12633         * typemanager.cs (TypeManager.MayBecomeEqualGenericInstances):
12634         New oublic function; checks whether two generic instances may become
12635         equal under some instantiations (26.3.1).
12636
12637         * class.cs (TypeContainer.Define): Call
12638         TypeManager.MayBecomeEqualGenericInstances() and report CS0695 on
12639         error.
12640
12641 2004-03-16  Martin Baulig  <martin@ximian.com>
12642
12643         * class.cs (TypeContainer.GetClassBases): Moved
12644         Error_TypeParameterAsBase() here and also check whether the base
12645         class is not an attribute.
12646
12647 2004-03-16  Martin Baulig  <martin@ximian.com>
12648
12649         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
12650
12651 2004-03-16  Martin Baulig  <martin@ximian.com>
12652
12653         * class.cs (Error_TypeParameterAsBase): Use correct error number
12654         here (CS0689).  
12655
12656 2004-03-16  Martin Baulig  <martin@ximian.com>
12657
12658         * decl.cs (DeclSpace.ResolveTypeExpr): Added more error checking
12659         for generics.
12660
12661         * generics.cs (ConstructedType.DoResolveAsTypeStep): Added better
12662         error reporting.
12663
12664 2004-03-15  Martin Baulig  <martin@ximian.com>
12665
12666         * typemanager.cs (TypeManager.GetFullName): New public method.
12667         (TypeManager.MemberLookup): Added `int_num_type_arguments'
12668         argument; only return members with the correct number of type
12669         arguments.
12670         (TypeManager.CheckGeneric): Allow -1 to bypass the check.
12671         (TypeManager.FilterWithClosure): Call CheckGeneric() to check
12672         whether the number of type arguments matches.
12673
12674         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Allow `expr'
12675         not being a ConstructedType; we can now do "typeof (Foo.Bar<U>)".
12676
12677         * expression.cs (MemberAccess): Added public `NumTypeArguments'
12678         field; it's set by the protected .ctor when we're actually a
12679         GenericMemberAccess.
12680         (MemberAccess.ResolveAsTypeStep): Compute the total number of type
12681         arguments and pass it to MemberLookupFinal ().
12682
12683         * ecore.cs (Expression.MemberLookup): Added `int
12684         num_type_arguments' argument; only return members with the correct
12685         number of type arguments.
12686         (Expression.MemberLookupFailed): Check whether the MemberLookup
12687         failed because we did not have the correct number of type
12688         arguments; report CS0305 in this case.
12689
12690         * decl.cs (DeclSpace.ResolveTypeExpr): Don't report an error if
12691         `e.ResolveAsTypeTerminal()' already did so.
12692
12693 2004-03-15  Martin Baulig  <martin@ximian.com>
12694
12695         * ecore.cs (Expression.ResolveLValue): Allow e.type being null if
12696         we're a ConstructedType; in this case, the caller must report an
12697         error (for instance CS0131).
12698
12699         * generic.cs (TypeArguments): Added Location argument to the .ctor.
12700         (TypeArguments.Resolve): Actually report errors here.
12701
12702 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
12703
12704         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
12705         `set_indexer_name' to the pending bits (one per type).
12706
12707         We fixed a bug today that was picking the wrong method to
12708         override, since for properties the existing InterfaceMethod code
12709         basically ignored the method name.  Now we make sure that the
12710         method name is one of the valid indexer names.
12711
12712 2004-03-15  Martin Baulig  <martin@ximian.com>
12713
12714         * typemanager.cs (TypeManager.IndexerPropertyName): Added support
12715         for generic instances.
12716
12717 2004-03-13  Martin Baulig  <martin@ximian.com>
12718
12719         * class.cs (TypeContainer.DefineType): Call
12720         TypeManager.AddUserType() immediately after creating the
12721         TypeBuilder; pass all type parameters when creating the
12722         CurrentType.
12723
12724         * decl.cs (DeclSpace.FindNestedType): New public method.
12725         (DeclSpace.FindType): Added `int num_type_args' argument; only
12726         return types with the correct number of type parameters.
12727         (DeclSpace.CountTypeParams): New public property.
12728
12729         * ecore.cs (SimpleName.ctor): Added overloaded version which takes
12730         the number of type parameters; defaults to zero.
12731
12732         * generic.cs (TypeArguments.Count): New public property.
12733         (ConstructedType.DoResolveAsTypeStep): First call
12734         ds.FindNestedType() to find out whether we're nested in the
12735         current generic type; in this case, we inherit all type parameters
12736         from the current class.
12737
12738         * rootcontext.cs (RootContext.NamespaceLookup): Added `int
12739         num_type_args' argument.
12740         (RootContext.LookupType): Added overloaded version which takes the
12741         number of type arguments; only return types with the correct
12742         number of type arguments.
12743
12744         * typemanager.cs (TypeManager.CheckGeneric): New public function;
12745         checks whether `Type t' has `int num_type_args'.
12746
12747 2004-03-13  Martin Baulig  <martin@ximian.com>
12748
12749         * generic.cs (GenericMethod.DefineType): New method; calls
12750         DefineType() on all the type parameters.
12751
12752         * class.cs (MethodData.ctor): Added `GenericMethod generic' argument.
12753         (MethodData.Define): If we're a generic method, call
12754         GenericMethod.DefineType() to define the type parameters.       
12755
12756 2004-03-10  Martin Baulig  <martin@ximian.com>
12757
12758         * pending.cs (Pending.InterfaceMethod): Use TypeManager.IsEqual()
12759         instead of IsAssignableFrom.    
12760
12761 2004-03-10  Martin Baulig  <martin@ximian.com>
12762
12763         * ecore.cs (FieldExpr.ctor): Use TypeManager.TypeToCoreType().
12764
12765         * support.cs (ParameterData.HasArrayParameter): New property.
12766         (ReflectionParameters.ctor): Take a MethodBase instead of a
12767         ParameterInfo[].  If we have any type parameters, get the generic
12768         method definition and ask it whether we have variable arguments.
12769
12770 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
12771
12772         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
12773         routines to check if a type is an enumerable/enumerator allow
12774         classes that implement the IEnumerable or IEnumerator interfaces.
12775
12776         * class.cs (Property, Operator): Implement IIteratorContainer, and
12777         implement SetYields.
12778
12779         (Property.Define): Do the block swapping for get_methods in the
12780         context of iterators.   We need to check if Properties also
12781         include indexers or not.
12782
12783         (Operator): Assign the Block before invoking the
12784         OperatorMethod.Define, so we can trigger the Iterator code
12785         replacement. 
12786
12787         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
12788         Property and Operator classes are not created when we parse the
12789         declarator but until we have the block completed, so we use a
12790         singleton SimpleIteratorContainer.Simple to flag whether the
12791         SetYields has been invoked.
12792
12793         We propagate this setting then to the Property or the Operator to
12794         allow the `yield' to function.
12795
12796 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
12797
12798         * codegen.cs: Implemented attribute support for modules.
12799         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
12800         Assembly/Module functionality.
12801
12802         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
12803         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
12804         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
12805
12806 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
12807
12808         * interface.cs (FindMembers): The operation is performed on all base
12809         interfaces and not only on the first. It is required for future CLS Compliance patch.
12810
12811 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
12812
12813         * statement.cs, codegen.cs:
12814         This patch deals with patterns such as:
12815
12816         public class List : IEnumerable {
12817
12818                 public MyEnumerator GetEnumerator () {
12819                         return new MyEnumerator(this);
12820                 }
12821
12822                 IEnumerator IEnumerable.GetEnumerator () {
12823                         ...
12824                 }
12825                 
12826                 public struct MyEnumerator : IEnumerator {
12827                         ...
12828                 }
12829         }
12830
12831         Before, there were a few things we did wrong:
12832         1) we would emit callvirt on a struct, which is illegal
12833         2) we emited ldarg when we needed to emit ldarga
12834         3) we would mistakenly call the interface methods on an enumerator
12835         type that derived from IEnumerator and was in another assembly. For example:
12836
12837         public class MyEnumerator : IEnumerator
12838
12839         Would have the interface methods called, even if there were public impls of the
12840         method. In a struct, this lead to invalid IL code.
12841
12842 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
12843
12844         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
12845           renamed to Emit.
12846
12847         * delegate.cs (Define): Fixed crash when delegate type is undefined.
12848
12849 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
12850
12851         * cs-parser.jay: Fix small regression: we were not testing V2
12852         compiler features correctly.
12853
12854         * interface.cs: If the emit context is null, then create one
12855
12856 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
12857
12858         * decl.cs (GetSignatureForError): New virtual method to get full name
12859           for error messages.
12860
12861         * attribute.cs (IAttributeSupport): New interface for attribute setting.
12862           Now it is possible to rewrite ApplyAttributes method to be less if/else.
12863
12864         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
12865           Duplicated members and code in these classes has been removed.
12866           Better encapsulation in these classes.
12867
12868 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
12869
12870         * assign.cs (Assign.DoResolve): When dealing with compound
12871         assignments, there is a new rule in ECMA C# 2.4 (might have been
12872         there before, but it is documented here) that states that in:
12873
12874         a op= b;
12875
12876         If b is of type int, and the `op' is a shift-operator, then the
12877         above is evaluated as:
12878
12879         a = (int) a op b 
12880
12881         * expression.cs (Binary.ResolveOperator): Instead of testing for
12882         int/uint/long/ulong, try to implicitly convert to any of those
12883         types and use that in pointer arithmetic.
12884
12885         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
12886         method to print information for from the type, not from the
12887         null-method we were given.
12888
12889 2004-02-01  Duncan Mak  <duncan@ximian.com>
12890
12891         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
12892         parsing for cmd, fixes bug #53694.
12893
12894 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
12895
12896         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
12897         in the member name duplication tests. Property and operator name duplication
12898         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
12899
12900 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
12901
12902         * interface.cs (PopulateMethod): Fixed crash when interface method
12903         returns not existing type (error test cs0246-3.cs).
12904
12905 2004-02-02  Ravi Pratap M <ravi@ximian.com>
12906
12907         * cs-parser.jay (interface_accessors): Re-write actions to also
12908         store attributes attached to get and set methods. Fix spelling
12909         while at it.
12910
12911         (inteface_property_declaration): Modify accordingly.
12912
12913         (InterfaceAccessorInfo): New helper class to store information to pass
12914         around between rules that use interface_accessors.
12915
12916         * interface.cs (Emit): Apply attributes on the get and set
12917         accessors of properties and indexers too.
12918
12919         * attribute.cs (ApplyAttributes): Modify accordingly to use the
12920         right MethodBuilder when applying attributes to the get and set accessors.
12921
12922 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
12923
12924         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
12925
12926 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
12927
12928         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
12929
12930 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
12931
12932         * cs-parser.jay: Remove YIELD token, instead use the new grammar
12933         changes that treat `yield' specially when present before `break'
12934         or `return' tokens.
12935
12936         * cs-tokenizer.cs: yield is no longer a keyword.
12937
12938 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
12939
12940         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
12941         setting for default constructors.
12942         For default constructors are almost every time set wrong Modifier. The
12943         generated IL code has been alright. But inside mcs this values was
12944         wrong and this was reason why several of my CLS Compliance tests
12945         failed.
12946
12947 2004-02-27  Martin Baulig  <martin@ximian.com>
12948
12949         * generics.cs (ConstructedType.ResolveType): Make the nested type
12950         stuff actually work.
12951
12952 2004-02-25  Martin Baulig  <martin@ximian.com>
12953
12954         * decl.cs (DeclSpace.CurrentTypeParameters): New protected
12955         property; returns the type parameters just from the current type,
12956         ie. with the ones from outer classes.
12957         (DeclSpace.LookupGeneric): First search in the current class, then
12958         in outer classes.
12959         (DeclSpace.initialize_type_params): When hiding a type parameter
12960         from an outer class, put it into the `type_param_list' anyways.
12961
12962         * expression.cs (MemberAccess.expr): Made this field protected.
12963
12964         * class.cs (TypeContainer.Define): The `CurrentType' just contains
12965         the type parameters from the current class.
12966
12967         * generic.cs (ConstructedType.ResolveType): Support nested generic
12968         types by taking the type parameters which we inherit from outer
12969         classes into account.
12970         (GenericMemberAccess.ResolveAsTypeStep): Override this and added
12971         support for nested generic types.
12972
12973 2004-02-23  Martin Baulig  <martin@ximian.com>
12974
12975         * decl.cs (DeclSpace.IsGeneric): Make this a property instead of a
12976         field and check whether we're nested inside a generic type.
12977         (DeclSpace.ResolveType): If we're resolving to a generic type
12978         definition, create a ConstructedType and return its resolved type.
12979         (DeclSpace.initialize_type_params): New private method;
12980         initializes the `type_param_list' field from the type parameters
12981         from this and all enclosing classes.
12982         (DeclSpace.TypeParameters): Call initialize_type_params() unless
12983         we're already initialized.
12984
12985 2004-02-23  Martin Baulig  <martin@ximian.com>
12986
12987         * class.cs (Method.Define): Create the generic method before
12988         calling DoDefine().
12989         (Memberbase.DoDefine): Added DeclSpace argument (in addition to
12990         the TypeContainer one); we use this for generic methods.
12991
12992         * decl.cs (CheckAccessLevel): If we're a GenericMethod, use our
12993         parent's TypeBuilder.
12994
12995 2004-02-18  Martin Baulig  <martin@ximian.com>
12996
12997         * ecore.cs (FieldExpr.DoResolveLValue): Use TypeManager.IsEqual()
12998         to check for equality.
12999
13000 2004-02-05  Martin Baulig  <martin@ximian.com>
13001
13002         * ecore.cs (FieldExpr.DoResolveLValue): If we have an
13003         `ec.TypeContainer.CurrentType', use it instead of
13004         `ec.ContainerType' to check whether we're in the type's ctor.
13005
13006 2004-01-29  Martin Baulig  <martin@ximian.com>
13007
13008         * expression.cs (Invocation.DoResolve): If we're a
13009         `ConstructedType', then we're actually a generic method, so
13010         rewrite the expr as a GenericMemberAccess.
13011
13012         * cs-parser.jay (member_name): Don't use `namespace_or_type_name'
13013         here; manually parse it into a string.
13014
13015 2004-01-28  Martin Baulig  <martin@ximian.com>
13016
13017         * typemanager.cs (TypeManager.IsEqual): New static method.
13018         (TypeManager.FilterWithClosure): Call TypeManager.IsEqual() to
13019         check for equality instead of using `=='.
13020
13021 2004-01-26  Martin Baulig  <martin@ximian.com>
13022
13023         * decl.cs (DeclSpace.CurrentType): New public field.
13024
13025         * expression.cs (This.ResolveBase): If we have an
13026         `ec.TypeContainer.CurrentType', use it instead of
13027         `ec.ContainerType'.
13028
13029         * class.cs (TypeContainer.DefineType): If we're a generic type,
13030         create the `CurrentType' (unresolved).
13031         (TypeContainer.GenericType): New private field.
13032         (TypeContainer.DefineMembers): If we have a `CurrentType', resolve
13033         it and store it in `GenericType' before creating the MemberCache.
13034         (TypeContainer.GetMembers): If we have a `GenericType', call
13035         TypeManager.FindMembers() on it.
13036
13037         * interface.cs (Interface.GenericType): New private field.
13038         (Interface.DefineType): If we're a generic type, create the
13039         `CurrentType' (unresolved).
13040         (Interface.DefineMembers): If we have a `CurrentType', resolve it
13041         and store it in `GenericType' before creating the MemberCache.
13042         (Interface.GetMembers): If we have a `GenericType', call
13043         TypeManager.FindMembers() on it.
13044
13045 2004-01-22  Martin Baulig  <martin@ximian.com>
13046
13047         * cs-parser.jay (namespace_or_type_name): Return an Expression,
13048         not a QualifiedIdentifier.  This is what `type_name_expression'
13049         was previously doing.
13050         (type_name_expression): Removed; the code is now in
13051         `namespace_or_type_name'.
13052         (qualified_identifier): Removed, use `namespace_or_type_name'
13053         instead.
13054         (QualifiedIdentifier): Removed this class.      
13055
13056 2004-01-22  Martin Baulig  <martin@ximian.com>
13057
13058         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
13059         not a string as alias name.
13060
13061 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
13062
13063         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
13064         #52730 bug, and instead compute correctly the need to use a
13065         temporary variable when requesting an address based on the
13066         static/instace modified of the field and the constructor.
13067  
13068 2004-01-21  Martin Baulig  <martin@ximian.com>
13069
13070         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
13071         class and namespace before looking up aliases.  Fixes #52517.
13072
13073 2004-01-21  Martin Baulig  <martin@ximian.com>
13074
13075         * flowanalysis.cs (UsageVector.Merge): Allow variables being
13076         assinged in a 'try'; fixes exception4.cs.
13077
13078 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13079         * class.cs : Implemented parameter-less constructor for TypeContainer
13080
13081         * decl.cs: Attributes are now stored here. New property OptAttributes
13082
13083         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
13084
13085         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
13086
13087 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13088
13089         * typemanager.cs (CSharpSignature): Now reports also inner class name.
13090           (CSharpSignature): New method for indexer and property signature.
13091
13092 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13093
13094         * pending.cs (IsVirtualFilter): Faster implementation.
13095
13096 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13097
13098         * typemanager.cs: Avoid inclusion of same assembly more than once.
13099
13100 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13101
13102         * cs-parser.jay: Fixed problem where the last assembly attribute
13103           has been applied also to following declaration (class, struct, etc.)
13104           
13105 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
13106
13107         * class.cs: Added error CS0538, CS0539 reporting.
13108         Fixed crash on Microsoft runtime when field type is void.
13109
13110         * cs-parser.jay: Added error CS0537 reporting.
13111
13112         * pending.cs: Added error CS0535 reporting.
13113         Improved error report for errors CS0536, CS0534.
13114
13115 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
13116
13117         Merge a few bits from the Anonymous Method MCS tree.
13118
13119         * statement.cs (ToplevelBlock): New class for toplevel methods,
13120         will hold anonymous methods, lifted variables.
13121
13122         * cs-parser.jay: Create toplevel blocks for delegates and for
13123         regular blocks of code. 
13124
13125 2004-01-20  Martin Baulig  <martin@ximian.com>
13126
13127         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
13128         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
13129         and `NeedExplicitReturn'; added `IsLastStatement'.
13130         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
13131         have a `ReturnLabel' or we're not unreachable.
13132
13133         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
13134         child's reachability; don't just override ours with it.  Fixes
13135         #58058 (lluis's example).
13136         (FlowBranching): Added public InTryOrCatch(), InCatch(),
13137         InFinally(), InLoop(), InSwitch() and
13138         BreakCrossesTryCatchBoundary() methods.
13139
13140         * statement.cs (Return): Do all error checking in Resolve().
13141         Unless we are the last statement in a top-level block, always
13142         create a return label and jump to it.
13143         (Break, Continue): Do all error checking in Resolve(); also make
13144         sure we aren't leaving a `finally'.
13145         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
13146         statement in a top-level block.
13147         (Block.Flags): Added `IsDestructor'.
13148         (Block.IsDestructor): New public property.
13149
13150 2004-01-20  Martin Baulig  <martin@ximian.com>
13151
13152         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
13153
13154 2004-01-20  Martin Baulig  <martin@ximian.com>
13155
13156         * statement.cs (Statement.ResolveUnreachable): New public method.
13157         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
13158         (Block.Resolve): Resolve unreachable statements.
13159
13160 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
13161
13162         * expression.cs: We need to fix the case where we do
13163         not have a temp variable here.
13164
13165         * assign.cs: Only expression compound assignments need
13166         temporary variables.
13167
13168 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
13169
13170         * flowanalysis.cs: Reduce memory allocation in a few ways:
13171           - A block with no variables should not allocate a bit
13172             vector for itself.
13173           - A method with no out parameters does not need any tracking
13174             for assignment of the parameters, so we need not allocate
13175             any data for it.
13176           - The arrays:
13177                 public readonly Type[] VariableTypes;
13178                 public readonly string[] VariableNames;
13179             Are redundant. The data is already stored in the variable
13180             map, so we need not allocate another array for it.
13181           - We need to add alot of checks for if (params | locals) == null
13182             due to the first two changes.
13183
13184 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
13185
13186         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
13187         implement IMemoryLocation, we store a copy on a local variable and
13188         take the address of it.  Patch from Benjamin Jemlich
13189
13190         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
13191         to use a special "type_name_expression" rule which reduces the
13192         number of "QualifiedIdentifier" classes created, and instead
13193         directly creates MemberAccess expressions.
13194
13195 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
13196
13197         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
13198         that fixes #52853.  Null literal assignment to ValueType
13199
13200         * class.cs (MethodData.Emit): Instead of checking the name of the
13201         method to determine if its a destructor, create a new derived
13202         class from Method called Destructor, and test for that.  
13203
13204         * cs-parser.jay: Create a Destructor object instead of a Method.  
13205
13206         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
13207
13208         Fixes: 52933
13209
13210 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
13211
13212         * expression.cs (Binary.ResolveOperator): Perform an implicit
13213         conversion from MethodGroups to their delegate types on the
13214         Addition operation.
13215
13216         * delegate.cs: Introduce a new class DelegateCreation that is the
13217         base class for `NewDelegate' and `ImplicitDelegateCreation',
13218         factor some code in here.
13219
13220         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
13221         conversion from MethodGroups to compatible delegate types. 
13222
13223         * ecore.cs (Expression.Resolve): Do not flag error 654
13224         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
13225         we allow conversions from MethodGroups to delegate types now.
13226
13227         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
13228         assignments in v2 either.
13229
13230 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
13231
13232         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
13233         static read-only fields in ctors.
13234
13235         Applied patch from Benjamin Jemlich 
13236
13237         * expression.cs (UnaryMutator): Avoid leaking local variables. 
13238
13239 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
13240
13241         * cs-tokenizer.cs (IsCastToken): Allow the various native types
13242         here to return true, as they can be used like this:
13243
13244                 (XXX) int.MEMBER ()
13245
13246         Fixed 49836 and all the other dups
13247
13248 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
13249
13250         * driver.cs: Implement /win32res and /win32icon.
13251
13252 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
13253
13254         * cs-parser.jay: Add a rule to improve error handling for the
13255         common mistake of placing modifiers after the type.
13256
13257 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
13258
13259         * cs-parser.jay (interface_event_declaration): Catch
13260         initialization of events on interfaces, and report cs0068
13261
13262         * cs-parser.jay (interface_event_declaration): Catch
13263         initialization of events. 
13264
13265         * ecore.cs: Better report missing constructors.
13266
13267         * expression.cs (Binary.ResolveOperator): My previous bug fix had
13268         the error reporting done in the wrong place.  Fix.
13269
13270         * expression.cs (Binary.ResolveOperator): Catch the 
13271         operator + (E x, E y) error earlier, and later allow for implicit
13272         conversions in operator +/- (E e, U x) from U to the underlying
13273         type of E.
13274
13275         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
13276         52596, if the container class is abstract, the default constructor
13277         is protected otherwise its public (before, we were always public).
13278
13279         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
13280         fixed statement.
13281
13282         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
13283         Jemlich that fixes bug #52597, MCS was generating invalid code for
13284         idisposable structs.   Thanks to Ben for following up with this
13285         bug as well.
13286
13287 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
13288
13289         * driver.cs: Allow assemblies without code to be generated, fixes
13290         52230.
13291
13292 2004-01-07  Nick Drochak <ndrochak@gol.com>
13293
13294         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
13295
13296 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
13297
13298         * cs-parser.jay: Add rules to improve error reporting if fields or
13299         methods are declared at the namespace level (error 116)
13300
13301         * Add rules to catch event add/remove
13302
13303 2004-01-04  David Sheldon <dave-mono@earth.li>
13304
13305   * expression.cs: Added matching ")" to error message for 
13306   CS0077
13307
13308 2004-01-03 Todd Berman <tberman@gentoo.org>
13309
13310         * ecore.cs, attribute.cs:
13311         Applying fix from #52429.
13312
13313 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13314
13315         * ecore.cs, expression.cs, statement.cs:
13316         Total rewrite of how we handle branching. We
13317         now handle complex boolean expressions with fewer
13318         jumps. As well if (x == 0) no longer emits a ceq.
13319
13320         if (x is Foo) is much faster now, because we generate
13321         better code.
13322
13323         Overall, we get a pretty big improvement on our benchmark
13324         tests. The code we generate is smaller and more readable.
13325
13326         I did a full two-stage bootstrap. The patch was reviewed
13327         by Martin and Miguel.
13328
13329 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13330
13331         * cs-parser.jay: Make primary_expression not take a QI.
13332         we dont need this because the member_access rule covers
13333         us here. So we replace the rule with just IDENTIFIER.
13334
13335         This has two good effects. First, we remove a s/r conflict.
13336         Second, we allocate many fewer QualifiedIdentifier objects.
13337
13338 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13339
13340         * attribute.cs: Handle MarshalAs attributes as pseudo, and
13341         set the correct information via SRE. This prevents
13342         hanging on the MS runtime. Fixes #29374.
13343
13344 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13345
13346         * convert.cs: correctly handle conversions to value types
13347         from Enum and ValueType as unboxing conversions.
13348
13349         Fixes bug #52569. Patch by Benjamin Jemlich.
13350
13351 2004-01-02  Ravi Pratap  <ravi@ximian.com>
13352
13353         * expression.cs (BetterConversion): Prefer int -> uint
13354         over int -> ulong (csc's behaviour). This fixed bug #52046.
13355
13356 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13357
13358         * decl.cs (MemberCache.FindMembers): now returns a
13359         MemberInfo [].
13360
13361         * typemanager.cs: In general, go with with ^^.
13362         (CopyNewMethods): take an IList.
13363         (RealMemberLookup): Only allocate an arraylist
13364         if we copy from two sets of methods.
13365
13366         This change basically does two things:
13367         1) Fewer array lists allocated due to CopyNewMethods.
13368         2) the explicit cast in MemberList costed ALOT.
13369
13370 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
13371
13372         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
13373         a hashtable to avoid needless string allocations when an identifier is
13374         used more than once (the common case).
13375
13376 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
13377
13378         * pending.cs: MS's TypeBuilder.GetInterfaces ()
13379         is broken, it will not return anything. So, we
13380         have to use the information we have in mcs to
13381         do the task.
13382
13383         * typemanager.cs: Add a cache for GetInterfaces,
13384         since this will now be used more often (due to ^^)
13385
13386         (GetExplicitInterfaces) New method that gets the
13387         declared, not effective, interfaces on a type
13388         builder (eg, if you have interface IFoo, interface
13389         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
13390         { IBar }.
13391
13392         This patch makes MCS able to bootstrap itself on
13393         Windows again.
13394
13395 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
13396
13397         * expression.cs: Remove the Nop's that Miguel put
13398         in by mistake.
13399
13400 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13401
13402         * report.cs, codegen.cs: Give the real stack trace to
13403         the error when an exception is thrown.
13404
13405 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13406
13407         * decl.cs: only allocate hashtables for ifaces if 
13408         it is an iface!
13409
13410 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13411
13412         * expression.cs: fix the error from cs0121-2.cs
13413         (a parent interface has two child interfaces that
13414         have a function with the same name and 0 params
13415         and the function is called through the parent).
13416
13417 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13418
13419         * class.cs, rootcontext.cs, typmanager.cs: do not
13420         leak pointers.
13421
13422 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
13423
13424         * codegen.cs: remove stack for the ec flow branching.
13425         It is already a linked list, so no need.
13426
13427 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
13428
13429         * Makefile: Allow custom profiler here.
13430
13431 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
13432
13433         * typemanager.cs (LookupType):
13434           - Use a static char [], because split takes
13435             a param array for args, so it was allocating
13436             every time.
13437           - Do not store true in a hashtable, it boxes.
13438
13439 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
13440
13441         * flowanalysis.cs: bytify common enums.
13442
13443 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13444
13445         * modifiers.cs: Add a new set of flags for the
13446         flags allowed on explicit interface impls.
13447         * cs-parser.jay: catch the use of modifiers in
13448         interfaces correctly.
13449         * class.cs: catch private void IFoo.Blah ().
13450
13451         All related to bug #50572.
13452
13453 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13454
13455         * decl.cs: Rewrite the consistant accessability checking.
13456         Accessability is not linear, it must be implemented in
13457         a tableish way. Fixes #49704.
13458
13459 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13460
13461         * expression.cs: Handle negation in a checked context.
13462         We must use subtraction from zero. Fixes #38674.
13463
13464 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13465
13466         * class.cs: Ignore static void main in DLLs.
13467         * rootcontext.cs: Handle the target type here,
13468         since we are have to access it from class.cs
13469         * driver.cs: account for the above.
13470
13471 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13472
13473         * report.cs: Give line numbers and files if available.
13474
13475 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
13476
13477         * driver.cs: Implement /addmodule.
13478
13479         * typemanager.cs:  Change 'modules' field so it now contains Modules not
13480         ModuleBuilders.
13481
13482 2003-12-20  Martin Baulig  <martin@ximian.com>
13483
13484         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
13485         (FieldBase.IsAssigned): Removed this field.
13486         (FieldBase.SetAssigned): New public method.
13487         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
13488
13489 2003-12-20  Martin Baulig  <martin@ximian.com>
13490
13491         * expression.cs (LocalVariableReference.DoResolve): Don't set
13492         `vi.Used' if we're called from DoResolveLValue().
13493
13494         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
13495         returns the usage vector it just merged into the current one -
13496         pass this one to UsageWarning().
13497         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
13498         of the `EmitContext', don't call this recursively on our children.
13499
13500 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
13501
13502         * driver.cs: Implement /target:module.
13503
13504 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
13505
13506         * support.cs (CharArrayHashtable): New helper class.
13507
13508         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
13509         char arrays, not strings, so we can avoid creating a string in
13510         consume_identifier if the identifier is a keyword.
13511
13512 2003-12-16  Martin Baulig  <martin@ximian.com>
13513
13514         * statement.cs (LocalInfo.Assigned): Removed this property.
13515         (LocalInfo.Flags): Removed `Assigned'.
13516         (LocalInfo.IsAssigned): New public method; takes the EmitContext
13517         and uses flow analysis.
13518         (Block.UsageWarning): Made this method private.
13519         (Block.Resolve): Call UsageWarning() if appropriate.
13520
13521         * expression.cs (LocalVariableReference.DoResolve): Always set
13522         LocalInfo.Used here.
13523
13524 2003-12-13  Martin Baulig  <martin@ximian.com>
13525
13526         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
13527         any value here; we're now using flow analysis to figure out
13528         whether a statement/block returns a value.
13529
13530 2003-12-13  Martin Baulig  <martin@ximian.com>
13531
13532         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
13533         working again.
13534         (FlowBranching.MergeFinally): Don't call
13535         `branching.CheckOutParameters()' here, this is called in
13536         MergeTopBlock().
13537         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
13538         when adding the `finally' vector.       
13539
13540 2003-12-13  Martin Baulig  <martin@ximian.com>
13541
13542         * flowanalysis.cs
13543         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
13544         actually work and also fix #48962.
13545
13546 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
13547
13548         * decl.cs: Do not check System.Object for nested types,
13549         since we know it does not have any. Big bang for buck:
13550
13551         BEFORE:
13552            Run 1:   8.35 seconds
13553            Run 2:   8.32 seconds
13554            corlib:  17.99 seconds
13555         AFTER:
13556            Run 1:   8.17 seconds
13557            Run 2:   8.17 seconds
13558            corlib:  17.39 seconds
13559
13560 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
13561
13562         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
13563         time we are returning 0 members, so we save alot here.
13564
13565 2003-12-11  Martin Baulig  <martin@ximian.com>
13566
13567         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
13568         `MergeChild()', also just take the `FlowBranching' as argument;
13569         call Merge() on it and return the result.
13570         (FlowBranching.Merge): We don't need to do anything if we just
13571         have one sibling.
13572
13573 2003-12-11  Martin Baulig  <martin@ximian.com>
13574
13575         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
13576         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
13577         Maurer for this idea.
13578
13579 2003-12-11  Martin Baulig  <martin@ximian.com>
13580
13581         * flowanalysis.cs (MergeResult): This class is now gone; we now
13582         use the `UsageVector' for this.  The reason for this is that if a
13583         branching just has one sibling, we don't need to "merge" them at
13584         all - that's the next step to do.
13585         (FlowBranching.Merge): We now return a `UsageVector' instead of a
13586         `MergeResult'.
13587
13588 2003-12-11  Martin Baulig  <martin@ximian.com>
13589
13590         Reworked flow analyis and made it more precise and bug-free.  The
13591         most important change is that we're now using a special `Reachability'
13592         class instead of having "magic" meanings of `FlowReturns'.  I'll
13593         do some more cleanups and optimizations and also add some more
13594         documentation this week.
13595
13596         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
13597         largely reworked this class.
13598         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
13599         the new `Reachability' class instead of having "magic" values here.
13600         (FlowBranching): We're now using an instance of `Reachability'
13601         instead of having separate `Returns', `Breaks' etc. fields.
13602
13603         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
13604         based on flow analysis; ignore the return value of block.Emit ().
13605
13606 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
13607
13608         * driver.cs typemanager.cs: Find the mono extensions to corlib even
13609         if they are private.
13610
13611 2003-12-09  Martin Baulig  <martin@ximian.com>
13612
13613         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
13614         call them directly on the UsageVector.
13615
13616 2003-12-09  Martin Baulig  <martin@ximian.com>
13617
13618         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
13619         Changed return type from `FlowReturns' to `Reachability'.
13620
13621 2003-12-09  Martin Baulig  <martin@ximian.com>
13622
13623         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
13624         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
13625         `Reachable' fields with a single `Reachability' one.
13626
13627 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13628
13629         * class.cs (FindMembers): Remove foreach's.
13630
13631         Bootstrap times:
13632
13633         BEFORE
13634                 Run 1:   8.74 seconds
13635                 Run 2:   8.71 seconds
13636
13637         AFTER
13638                 Run 1:   8.64 seconds
13639                 Run 2:   8.58 seconds
13640
13641
13642 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13643
13644         * cs-parser.jay:
13645         * gen-treedump.cs:
13646         * statement.cs:
13647         This patch does a few things:
13648                 1. EmptyStatement is now a singleton, so it is never reallocated.
13649                 2. All blah is EmptyStatement constructs have been changed to
13650                    blah == EmptyStatement.Value, which is much faster and valid
13651                    now that EmptyStatement is a singleton.
13652                 3. When resolving a block, rather than allocating a new array for
13653                    the non-empty statements, empty statements are replaced with
13654                    EmptyStatement.Value
13655                 4. Some recursive functions have been made non-recursive.
13656         Mainly the performance impact is from (3), however (1) and (2) are needed for
13657         this to work. (4) does not make a big difference in normal situations, however
13658         it makes the profile look saner.
13659
13660         Bootstrap times:
13661
13662         BEFORE
13663         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
13664         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
13665         Total memory allocated: 56397 KB
13666
13667         AFTER
13668         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
13669         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
13670         Total memory allocated: 55666 KB
13671
13672 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13673
13674         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
13675         than the hashtable in a hashtable version
13676
13677         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
13678         we always end up concating a string. This results in a huge perf
13679         loss, because many strings have to be tracked by the GC. In this
13680         patch, we first use a hashtable that works with two keys, so that
13681         the strings do not need to be concat'ed.
13682
13683         Bootstrap times:
13684         BEFORE
13685                 Run 1:   8.74 seconds
13686                 Run 2:   8.71 seconds
13687
13688         AFTER
13689                 Run 1:   8.65 seconds
13690                 Run 2:   8.56 seconds
13691
13692 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13693
13694         * Makefile: Add a new target `do-time' that does a quick and simple
13695         profile, leaving easy to parse output.
13696
13697 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
13698
13699         * codegen.cs (Init): Create the dynamic assembly with 
13700         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
13701
13702 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13703
13704         * support.cs: Make the PtrHashtable use only one
13705         instance of its comparer.
13706
13707 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
13708
13709         * typemanager.cs: Fix lookup of GetNamespaces.
13710
13711 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
13712
13713         * expression.cs: Removed redundant line.
13714
13715         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
13716         ArrayLists, use for loops with bounds.  
13717
13718         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
13719         arraylist.
13720
13721         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
13722         arraylists, use for loop with bounds.
13723
13724         The above three changes give us a 0.071 second performance
13725         improvement out of 3.294 seconds down to 3.223.  On my machine
13726         the above changes reduced the memory usage by 1,387 KB during
13727         compiler bootstrap.
13728
13729         * cs-parser.jay (QualifiedIdentifier): New class used to represent
13730         QualifiedIdentifiers.  Before we created a new string through
13731         concatenation, and mostly later on, the result would be
13732         manipulated by DecomposeQI through string manipulation.
13733
13734         This reduced the compiler memory usage for bootstrapping from
13735         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
13736         compile times in 0.05 seconds.
13737
13738 2003-11-28  Dick Porter  <dick@ximian.com>
13739
13740         * support.cs: Do string compares with the Invariant culture.
13741
13742         * rootcontext.cs: 
13743         * gen-treedump.cs: 
13744         * expression.cs: 
13745         * driver.cs: 
13746         * decl.cs: 
13747         * codegen.cs: 
13748         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
13749         the comparison is done with the Invariant culture.
13750
13751 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
13752
13753         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
13754         GetEnumerator method.
13755
13756         (ProbeCollectionType): Iterate starting at the most specific type
13757         upwards looking for a GetEnumerator
13758
13759         * expression.cs: Shift count can be up to 31 for int/uint and 63
13760         for long/ulong.
13761
13762 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
13763
13764         * statement.cs (Block.LookupLabel): Also look for the label on the
13765         children blocks.  Use a hash table to keep track of visited
13766         nodes. 
13767
13768         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
13769         we actually did transform the other operand, otherwise fall back
13770         to the common codepath that casts to long.
13771
13772         * cs-tokenizer.cs: Use the same code pattern as the int case.
13773         Maybe I should do the parsing myself, and avoid depending on the
13774         Parse routines to get this done.
13775
13776 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
13777
13778         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
13779         which fixes bug 51347.  This time test it.
13780
13781         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
13782         attributes for example can not tell the difference between these.
13783         The difference was only a syntax feature of the language. 
13784
13785         * attribute.cs: Apply attributes to delegates.
13786
13787         * delegate.cs: Call the apply attributes method.
13788
13789 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
13790
13791         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
13792         comparing 0 vs Byte.MinValue, not the value
13793
13794         (ImplicitConversionRequired): When reporting a conversion error,
13795         use error 31 to print out the constant error instead of the
13796         simpler 29.
13797
13798         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
13799         which fixes bug 51347.
13800
13801 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
13802
13803         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
13804         which fixes the -warnaserror command line option.
13805
13806 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
13807
13808         * cfold.cs (DoNumericPromotions): During constant folding of
13809         additions on UIntConstant, special case intconstants with
13810         IntConstants like we do on the expression binary operator. 
13811
13812 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
13813
13814         * convert.cs (ImplicitReferenceConversion): We were missing a case
13815         (System.Enum are not value types or class types, so we need to
13816         classify them separatedly).
13817
13818         * driver.cs: We do not support error 2007.
13819
13820 2003-11-12 Jackson Harper <jackson@ximian.com>
13821
13822         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
13823         system directory. Also use the full file name so users can
13824         libraries names mscorlib-o-tron.dll in a non system dir.
13825         
13826 2004-01-04  David Sheldon <dave-mono@earth.li>
13827
13828         * expression.cs: Added matching ")" to error message for CS0077.
13829
13830 2003-12-19  Martin Baulig  <martin@ximian.com>
13831
13832         * typemanager.cs (TypeManager.IsEqualGenericType): New public
13833         static method; see documentation in the method.
13834         (TypeManager.IsSubclassOrNestedChild): Allow IsEqualGenericType().
13835
13836         * convert.cs (Convert.ImplicitReferenceConversion,
13837         Convert.ImplicitReferenceConversionExists): Add support for
13838         generic type declarations; see gen-36.cs.
13839
13840 2003-12-19  Martin Baulig  <martin@ximian.com>
13841
13842         * pending.cs (Pending.InterfaceMethod): Use
13843         `Type.IsAssignableFrom()' instead of `=='.
13844
13845 2003-12-18  Martin Baulig  <martin@ximian.com>
13846
13847         * decl.cs (DeclSpace.AsAccessible): Check for array, pointer and
13848         byref types first.
13849
13850         * convert.cs (Convert.ImplicitStandardConversionExists): Use
13851         `expr_type.Equals (target_type)' instead of `=='.
13852
13853 2003-12-08  Martin Baulig  <martin@ximian.com>
13854
13855         * generics.cs (Constraints.Types): Removed.
13856         (Constraints.Resolve): Just resolve everything to TypeExpr's, not
13857         to Type's.
13858         (Constraints.ResolveTypes): New public method; resolves the
13859         TypeExpr's to Type's.
13860         (TypeParameter.Define): TypeBuilder.DefineGenericParameter() no
13861         longer takes the constraints.
13862         (TypeParameter.DefineMethod): Likewise.
13863         (TypeParameter.DefineType): New public method.  Calls
13864         `TypeBuilder/MethodBuilder.SetGenericParameterConstraints()' to set
13865         the constraints.
13866
13867 2003-12-08  Martin Baulig  <martin@ximian.com>
13868
13869         * convert.cs (Convert.ImplicitConversionStandard): Use
13870         `expr_type.Equals (target_type)' instead of `=='.
13871
13872 2003-12-08  Martin Baulig  <martin@ximian.com>
13873
13874         * typemanager.cs (TypeManager.GetReferenceType): Call
13875         `Type.MakeByRefType ()'.
13876
13877 2003-12-08  Martin Baulig  <martin@ximian.com>
13878
13879         * cs-parser.jay, cs-tokenizer.cs: `where' is not a keyword, it
13880         just has some special meaning in some situations.  For instance,
13881         it is allowed to use `where' as the name of a variable etc.
13882
13883 2003-12-04  Martin Baulig  <martin@ximian.com>
13884
13885         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
13886         `Type.MakeArrayType()' for array types.
13887
13888 2003-11-18  Miguel de Icaza  <miguel@ximian.com>
13889
13890         * expression.cs (Invocation.VerifyArgumentsCompat): Remove
13891         debugging message.
13892
13893         (SizeOf.DoResolve): assign the `type_queried' field.  This gets
13894         corlib to compile.
13895
13896 2003-11-16  Martin Baulig  <martin@ximian.com>
13897
13898         * codegen.cs (EmitContext.IsGeneric): Removed.
13899
13900         * ecore.cs (SimpleName.ResolveAsTypeStep): Always call
13901         ResolveGeneric() on the DeclSpace.
13902
13903 2003-11-16  Martin Baulig  <martin@ximian.com>
13904
13905         * generic.cs (TypeArguments.Resolve):
13906         `Expression.ResolveAsTypeTerminal()' returns a TypeExpr; call
13907         `ResolveType()' on it to get the Type.
13908
13909 2003-11-15  Martin Baulig  <martin@ximian.com>
13910
13911         * generic.cs (ConstructedType.GetInterfaces): Override this.
13912
13913 2003-11-14  Martin Baulig  <martin@ximian.com>
13914
13915         * interface.cs (Interface.DefineType): Define all type parameters
13916         before adding the interfaces we inherit.
13917
13918 2003-11-11  Martin Baulig  <martin@ximian.com>
13919
13920         * generic.cs (ConstructedType.ResolveType): Always call
13921         `gt.BindGenericParameters (atypes)'; also if `args.HasTypeArguments'.
13922
13923 2003-11-10  Martin Baulig  <martin@ximian.com>
13924
13925         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
13926         (TypeManager.InitCoreTypes): Initialize them here, but instead of
13927         calling `ResolveType()' on them, directly assign their `Type'.
13928
13929 2003-11-08  Martin Baulig  <martin@ximian.com>
13930
13931         * generic.cs (ConstructedType): Override `IsClass' etc.
13932
13933 2003-11-08  Martin Baulig  <martin@ximian.com>
13934
13935         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
13936         return value and the `out parent' parameter.
13937         (TypeContainer.DefineType): Moved the CS0644 check into
13938         GetClassBases().  Don't pass the interface types to the
13939         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
13940         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
13941
13942         * ecore.cs (TypeExpr.IsAttribute): New property.
13943         (TypeExpr.GetInterfaces): New method.
13944
13945         * interface.cs (Interface.GetInterfaceTypeByName): Return a
13946         TypeExpr instead of a Type.
13947         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
13948         (Interface.DefineType): Don't pass the interface types to the
13949         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
13950         them later and then call `TypeBulider.AddInterfaceImplementation()'.
13951
13952         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
13953         instead of a `Type[]'.
13954         (TypeManager.RegisterBuilder): Likewise.
13955         (TypeManager.AddUserInterface): Likewise.
13956         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
13957         `Type[]' and also return a `TypeExpr[]'.
13958         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
13959
13960 2003-11-08  Martin Baulig  <martin@ximian.com>
13961
13962         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
13963         Expression.     
13964
13965 2003-11-08  Martin Baulig  <martin@ximian.com>
13966
13967         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
13968         TypeManager.ResolveExpressionTypes().
13969
13970         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
13971         instead of an Expression.
13972         (TypeExpr): This is now an abstract base class for `TypeExpression'.
13973         (TypeExpression): New public class; formerly known as `TypeExpr'.
13974
13975         * expression.cs (ComposedCast): Derive from TypeExpr.
13976
13977         * typemanager.cs (TypeManager.system_*_expr): These are now
13978         TypExpr's instead of Expression's.
13979         (TypeManager.ResolveExpressionTypes): New public static function;
13980         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
13981         of them.        
13982
13983 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
13984
13985         * expression.cs (New.DoResolve): Do not dereference value that
13986         might be a null return.
13987
13988         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
13989         sure that the constant value has the right type.  Fixes an
13990         unreported bug, similar to 50425.
13991
13992         * const.cs (Const.LookupConstantValue): Call
13993         ImplicitStandardConversionExists before doing a conversion to
13994         avoid havng the TypeManager.ChangeType do conversions.
13995
13996         Reduced the number of casts used
13997
13998         (Const.ChangeType): New routine to enable reuse of the constant
13999         type changing code from statement.
14000
14001         * typemanager.cs (ChangeType): Move common initialization to
14002         static global variables.
14003
14004         Fixes #50425.
14005
14006         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
14007         every value type to go through, even if it was void.  Fix that. 
14008
14009         * cs-tokenizer.cs: Use is_identifier_start_character on the start
14010         character of the define, and the is_identifier_part_character for
14011         the rest of the string.
14012
14013 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
14014
14015         * expression.cs (UnaryMutator.EmitCode): When I updated
14016         LocalVariableReference.DoResolve, I overdid it, and dropped an
14017         optimization done on local variable references.
14018
14019 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
14020
14021         * ecore.cs: Convert the return from Ldlen into an int.
14022
14023 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
14024
14025         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
14026         the accessibility, this is a special case for toplevel non-public
14027         classes (internal for instance).
14028
14029 2003-10-20  Nick Drochak <ndrochak@gol.com>
14030
14031         * ecore.cs: Fix typo and build.  Needed another right paren.
14032
14033 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
14034
14035         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
14036         `internal' case regular and protected, but not allowing protected
14037         to be evaluated later.  Bug 49840
14038
14039 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
14040
14041         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
14042         to kb.Nlast, and not the kb.nFirst to isolate the switch
14043         statement.
14044
14045         Extract the underlying type, so enumerations of long/ulong are
14046         treated like long/ulong.
14047
14048 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
14049
14050         * expression.cs (New): Overload the meaning of RequestedType to
14051         track the possible creation of the NewDelegate type, since
14052         DoResolve is invoked more than once for new constructors on field
14053         initialization.
14054
14055         See bugs: #48800 and #37014
14056
14057         * cs-parser.jay (declare_local_constants): Take an arraylist
14058         instead of a single constant.
14059
14060         (local_constant_declaration): It should take a
14061         constant_declarators, not a constant_declarator.  Fixes 49487
14062
14063         * convert.cs: Fix error report.
14064
14065 2003-10-13 Jackson Harper <jackson@ximian.com>
14066
14067         * typemanager.cs (TypeToCoreType): Add float and double this fixes
14068         bug #49611
14069         
14070 2003-11-03  Martin Baulig  <martin@ximian.com>
14071
14072         * expression.cs (ArrayAccess.GetStoreOpcode): Added
14073         `out bool has_type_arg'; if set, we need to pass the type to
14074         ig.Emit().
14075         (ArrayAccess.GetStoreOpcode, ArrayAccess.EmitLoadOpcode): Use
14076         Stelem_Any/Ldelem_Any for generic parameters.   
14077
14078 2003-11-02  Martin Baulig  <martin@ximian.com>
14079
14080         * expression.cs (Invocation.EmitCall): Use
14081         `TypeManager.IsValueType()' to check whether it's a value type.
14082         Don't set `struct_call' when calling a method on a type parameter.
14083
14084 2003-11-02  Martin Baulig  <martin@ximian.com>
14085
14086         * generics.cs (ConstructedType.Resolve): Renamed to ResolveType()
14087         and removed the TypeBuilder argument.
14088
14089         * typemanager.cs (TypeManager.IsValueType): Return
14090         `t.IsGenericParameter || t.IsValueType'.
14091
14092 2003-10-25  Martin Baulig  <martin@ximian.com>
14093
14094         * decl.cs (DeclSpace.ResolveType): If we're a ConstructedType,
14095         call ConstructedType.Resolve() on it.
14096
14097         * generic.cs (ConstructedType.Resolve): Set `type' on success.
14098
14099 2003-10-25  Martin Baulig  <martin@ximian.com>
14100
14101         * class.cs (TypeContainer.GetClassBases): Changed
14102         `out Type parent' into `out TypeExpr parent'.  Moved CS0644 and
14103         CS8214 reporting here.
14104         (TypeContainer.DefineType): GetClassBases() gives us a `TypeExpr'
14105         instead of a `Type' for our parent.  In case of a recursive
14106         declaration (see tests/gen-23.cs for an example), our parent is a
14107         ConstructedType and it doesn't have its type set.  So, first
14108         create our own TypeBuilder, then call constructed.Resolve() to get
14109         the parent's type and finally TypeBuilder.SetParent() it.
14110
14111         * ecore.cs (TypeExpr.Name): New public virtual property.
14112
14113         * generic.cs
14114         (ConstructedType): We're now a TypeExpr and not just an Expression.
14115         (ConstructedType.ResolveAsTypeStep): Don't resolve our type
14116         arguments here; this is done later.
14117         (ConstructedType.Resolve): New public method to resolve the type
14118         arguments and bind them.
14119
14120 2003-10-21  Martin Baulig  <martin@ximian.com>
14121
14122         * convert.cs: Use `TypeManager.IsValueType' instead of
14123         'type.IsValueType' everywhere.
14124
14125         * typemanager.cs (TypeManager.IsValueType): Return true for type
14126         parameters.  The reason for this is that we need to box a type
14127         parameter when converting it to a reference type.
14128
14129         * cs-parser.jay: Added support for default value expressions.
14130
14131         * generics.cs (DefaultValueExpression): New public class.       
14132
14133 2003-10-17  Martin Baulig  <martin@ximian.com>
14134
14135         * generic.cs (Constraints.Resolve): Take a DecpSpace instead of a
14136         TypeContainer so we can also use this for Interfaces.
14137         (TypeParameter.Resolve): Likewise.
14138
14139         * interface.cs (Interface.DefineType): Added support for generic
14140         interfaces.
14141
14142         * cs-parser.jay: Added support for generic structs and interfaces.
14143
14144 2003-10-17  Martin Baulig  <martin@ximian.com>
14145
14146         * generic.cs (GenericMemberAccess.DoResolve): We can now actually
14147         call generic methods :-)
14148
14149 2003-10-16  Martin Baulig  <martin@ximian.com>
14150
14151         * cs-parser.jay (namespace_or_type_name): Only create a
14152         GenericMemberAccess if we actually have type arguments.
14153
14154 2003-10-13  Martin Baulig  <martin@ximian.com>
14155
14156         * class.cs (Method.Define): If we're a generic method, call
14157         TypeBuilder.DefineGenericMethod () before resolving
14158         the parameters.
14159         (MethodData): Added .ctor which takes an additional MethodBuilder
14160         argument; this is used for generic methods.
14161         (MethodData.Define): Call `builder.SetGenericMethodSignature()' if
14162         we already have a MethodBuilder.
14163
14164 2003-10-10  Martin Baulig  <martin@ximian.com>
14165
14166         * class.cs (Method): Added .ctor which takes a `GenericMethod'
14167         instead of a `DeclSpace'.  This is used for generic methods.
14168
14169         * cs-parser.jay (method_header): Added support for generic
14170         methods; create a `GenericMethod' instance and pass it to the
14171         `Method's .ctor; it'll be used as the `DeclSpace' to lookup
14172         parameters and locals.
14173
14174         * decl.cs (DeclSpace.SetParameterInfo): Removed Location argument
14175         since we already have the location.  Check whether we're a generic
14176         type declaration or a generic method and create the correct type
14177         parameter.
14178
14179         * generic.cs (TypeParameter.DefineMethod): New public method.
14180         (GenericMethod): New public class; derives from DeclSpace and is
14181         used for generic methods.       
14182
14183 2003-10-09  Martin Baulig  <martin@ximian.com>
14184
14185         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
14186         to the .ctor.
14187         (MethodCore.DoDefineParameters): Removed the TypeContainer
14188         argument; use the DeclSpace which was passed to the .ctor instead.
14189         (MethodCore.CheckParameter): Take a DeclSpace instead of a
14190         TypeContainer; we only need a DeclSpace here.
14191
14192 2003-10-09  Martin Baulig  <martin@ximian.com>
14193
14194         * class.cs (MethodData): Added additional `DeclSpace ds' argument
14195         to the .ctor.
14196         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
14197         EmitContext's .ctor.    
14198
14199 2003-10-09  Martin Baulig  <martin@ximian.com>
14200
14201         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
14202         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
14203         AsAccessible(), moved them as well.
14204
14205         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
14206
14207 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
14208
14209         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
14210         generation for >=, as spotted by Paolo, bug 48679.  
14211         Patch from David Waite.
14212
14213         * cs-tokenizer.cs: Add handling for #pragma.
14214
14215         * cs-parser.jay: Allow for both yield and yield return in the
14216         syntax.  The anti-cobolization of C# fight will go on!
14217
14218         * class.cs (TypeBuilder.DefineType): Catch error condition here
14219         (Parent.DefineType erroring out and returning null).
14220
14221         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
14222         coping with enumerations variables, we were mistakenly processing
14223         them as a regular value type instead of built-in types.  Fixes the
14224         bug #48063
14225
14226         * typemanager.cs (IsBuiltinOrEnum): New method.
14227
14228 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
14229
14230         * cs-parser.jay: Upgrade: yield now needs the return clause.
14231
14232 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
14233
14234         * cs-parser.jay : Renamed yyName to yyNames related to jay.
14235
14236 2003-09-29  Martin Baulig  <martin@ximian.com>
14237
14238         * typemanager.cs (TypeManager.GetMethodFlags): Added support for
14239         inflated generic methods.
14240
14241         * generics.cs (ConstructedType): Distinguish between open and
14242         closed constructed types; correctly resolve the arguments.
14243
14244 2003-09-22  Martin Baulig  <martin@ximian.com>
14245
14246         * generic.cs (ConstructedType.ResolveAsTypeCheck): Check whether
14247         all type arguments meet their constraints.
14248
14249 2003-09-19  Martin Baulig  <martin@ximian.com>
14250
14251         * decl.cs (MemberCache.SetupCacheForInterface): Take a
14252         `MemberCache parent' argument.  Normally, an interface doesn't
14253         have a parent type except System.Object, but we use this in gmcs
14254         for generic type parameters.
14255
14256 2003-09-18  Martin Baulig  <martin@ximian.com>
14257
14258         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
14259         on `type.IsInterface'; don't check whether the type has a parent
14260         to determine whether it's an interface.
14261
14262 2003-09-17  Martin Baulig  <martin@ximian.com>
14263
14264         * generic.cs (ConstructedType.ToString): Always use `name' as the
14265         type name.
14266
14267 2003-09-15  Martin Baulig  <martin@ximian.com>
14268
14269         * cs-parser.jay: Fix grammar wrt. type_parameter_constraints.
14270
14271         * generic.cs (Constraints.Resolve): New public method; this is
14272         called to resolve the constraint types and to check whether all
14273         the constraints are correct.
14274         (Constraints.Types): New public property.
14275         (TypeParameter.Resolve): New public method; resolves all the
14276         type's constraints.
14277
14278         * class.cs (TypeContainer.DefineType): Call
14279         TypeParameter.Resolve() before actually defining the type.
14280
14281 2003-09-15  Martin Baulig  <martin@ximian.com>
14282
14283         * class.cs (TypeContainer.DefineType): Added an error flag to
14284         avoid reporting duplicate CS0146's ("class definition is
14285         circular.").
14286
14287         * driver.cs (Driver.MainDriver): Abort if
14288         RootContext.ResolveTree() reported any errors.
14289
14290 2003-09-07  Martin Baulig  <martin@ximian.com>
14291
14292         * report.cs (Error, Warning): Added overloaded versions which take
14293         a `params object[] args' and call String.Format().
14294
14295 2003-09-07  Martin Baulig  <martin@ximian.com>
14296
14297         * decl.cs (DeclSpace..ctor): Don't call
14298         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
14299         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
14300         (DeclSpace.RecordDecl): New method.
14301
14302         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
14303
14304 2003-09-02  Ravi Pratap  <ravi@ximian.com>
14305
14306         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
14307         value attributes to be applied to ParameterBuilders.
14308
14309         * class.cs (MethodCore.LabelParameters): Make static and more
14310         generic so that it can be used from other places - like interface
14311         methods, for instance.
14312
14313         * interface.cs (Interface.Emit): Call LabelParameters before
14314         emitting attributes on the InterfaceMethod.
14315
14316 2003-09-07  Martin Baulig  <martin@ximian.com>
14317
14318         * generic.cs (ConstructedType.ResolveAsTypeStep): Report a CS8217
14319         if the number of type parameters doesn't match.
14320
14321 2003-09-04  Martin Baulig  <martin@ximian.com>
14322
14323         * expression.cs (ComposedCast.ResolveAsTypeStep): Added support
14324         for arrays of generic type params (ie. `!0[]').
14325
14326 2003-09-04  Martin Baulig  <martin@ximian.com>
14327
14328         * class.cs (TypeContainer.AsAccessible): Ignore generic parameters
14329         for the moment.
14330
14331 2003-09-04  Martin Baulig  <martin@ximian.com>
14332
14333         * decl.cs (DeclSpace.LookupGeneric): New method.
14334         (DeclSpace.CheckAccessLevel): Ignore generic parameters for the
14335         moment.
14336
14337         * generic.cs (TypeParameterExpr): Take a TypeParameter as
14338         argument, not just a string.
14339         (TypeParameter.Define): New public method; this is called to
14340         actually define the generic parameter; after this, you can use the
14341         new `Type' property to get the type.
14342
14343 2003-09-04  Martin Baulig  <martin@ximian.com>
14344
14345         * decl.cs (DeclSpace.SetParameterInfo): The `constraints' argument
14346         is now an ArrayList; initialize the result of the `TypeParameters'
14347         property here.
14348         (DeclSpace.GetGenericData): Removed.
14349         (DeclSpace.LookupGeneric): Temporarily removed; we need to
14350         implement this in a different way.
14351         (DeclSpace.GetTypeParameters): Removed; there's now a
14352         `TypeParameters' property.
14353         (DeclSpace.TypeParameters): New public property.
14354
14355         * generic.cs (Constraints): Make this class public.
14356         (TypeParameter): New public class.
14357
14358 2003-09-04  Martin Baulig  <martin@ximian.com>
14359
14360         * decl.cs (DeclSpace.GetTypeParameters): New method to return the
14361         generic parameters.
14362
14363         * class.cs (TypeContainer.DefineType): Call
14364         TypeBuilder.DefineGenericParameter () on all generic parameters if
14365         this is a generic type.
14366
14367 2003-08-28  Martin Baulig  <martin@ximian.com>
14368
14369         * sample-stack.il: Compile this with ilasm: "ilasm /dll
14370         sample-stack.il".
14371
14372         * sample-hello.cs: Compile this with gmcs: "gmcs
14373         /r:sample-stack.dll sample-hello.cs".
14374
14375 2003-08-28  Martin Baulig  <martin@ximian.com>
14376
14377         * generic.cs (ConstructedType.ResolveAsTypeStep): Actually bind
14378         the parameters to the generic type.
14379
14380 2003-08-28  Martin Baulig  <martin@ximian.com>
14381
14382         * cs-tokenizer.cs (parse_less_than): Also allow all builtin types.
14383
14384 2003-08-28  Martin Baulig  <martin@ximian.com>
14385
14386         * cs-parser.jay (opt_type_argument_list): Use
14387         `OP_GENERICS_LT type_arguments OP_GENERICS_GT'.
14388         (primary_expression): Replace `qualified_identifier' with `type_name'.
14389         (type_parameter_list): Use `OP_GENERICS_LT type_parameters OP_GENERICS_GT'.
14390
14391         * cs-tokenizer.cs (is_punct): When reading a `<', invoke a custom
14392         parser to check whether it is syntactically a type parameter list;
14393         return OP_GENERICS_LT/OP_GENERICS_GT instead of OP_LT/OP_GT in
14394         this case.
14395
14396 2003-08-26  Martin Baulig  <martin@ximian.com>
14397
14398         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
14399         resolving aliases; fixes #47927.
14400
14401 2003-08-26  Martin Baulig  <martin@ximian.com>
14402
14403         * statement.cs (Using.DoResolve): This is internally emitting a
14404         try/finally clause, so we need to set ec.NeedExplicitReturn if we
14405         do not always return.  Fixes #47681.
14406
14407 2003-08-26  Martin Baulig  <martin@ximian.com>
14408
14409         * decl.cs (MemberCore): Moved WarningNotHiding(),
14410         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
14411         into MemberBase.
14412         (AdditionResult): Make this nested in DeclSpace.
14413         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
14414         argument; call NamespaceEntry.Define() unless we're nested in a
14415         class or struct.
14416
14417         * namespace.cs (Namespace.DefineName): New public function.  This
14418         is called from DeclSpace's .ctor to add 
14419         (Namespace.Lookup): Include DeclSpaces in the lookup.
14420
14421         * class.cs (Operator): Derive from MemberBase, not MemberCore.
14422
14423         * const.cs (Const): Derive from MemberBase, not MemberCore.     
14424
14425 2003-08-25  Martin Baulig  <martin@ximian.com>
14426
14427         * convert.cs (Convert.ExplicitReferenceConversion): When
14428         converting from an interface type to a class, unbox if the target
14429         type is a struct type.  Fixes #47822.
14430
14431 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14432
14433         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
14434         #47854.
14435
14436 2003-08-22  Martin Baulig  <martin@ximian.com>
14437
14438         * class.cs (TypeManager.DefineType): When defining a nested type,
14439         call DefineType() on our parent; fixes #47801.
14440
14441 2003-08-22  Martin Baulig  <martin@ximian.com>
14442
14443         * class.cs (MethodData.Define): While checking if a method is an
14444         interface implementation, improve the test a bit more to fix #47654.
14445
14446 2003-08-22  Martin Baulig  <martin@ximian.com>
14447
14448         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
14449         correctly; fixes #47722.
14450
14451 2003-08-22  Martin Baulig  <martin@ximian.com>
14452
14453         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
14454         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
14455
14456         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
14457
14458 2003-08-22  Martin Baulig  <martin@ximian.com>
14459
14460         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
14461         can only be assigned in static constructors.  Fixes #47161.
14462
14463 2003-08-22  Martin Baulig  <martin@ximian.com>
14464
14465         Rewrote and improved the flow analysis code.
14466
14467         * flowbranching.cs (FlowBranching): Make this class abstract.
14468         (FlowBranching.CreateBranching): New static function to create a
14469         new flow branching.
14470         (FlowBranchingBlock, FlowBranchingException): New classes.
14471         (FlowBranching.UsageVector.Type): New public readonly field.
14472         (FlowBranching.UsageVector.Breaks): Removed the setter.
14473         (FlowBranching.UsageVector.Returns): Removed the setter.
14474         (FlowBranching.UsageVector): Added Break(), Return(),
14475         NeverReachable() and Throw() methods to modify the reachability.
14476         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
14477         done by FlowBranching.Merge().
14478         (FlowBranching.UsageVector.MergeChild): New method; merges the
14479         merge result into the current vector.
14480         (FlowBranching.Merge): New abstract method to merge a branching.
14481
14482 2003-08-12  Martin Baulig  <martin@ximian.com>
14483
14484         * expression.cs (Indirection.CacheTemporaries): Create the
14485         LocalTemporary with the pointer type, not its element type.
14486
14487 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
14488
14489         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
14490         token was a keyword or not.
14491
14492         Add `error' options where an IDENTIFIER was expected;  Provide
14493         CheckToken and CheckIdentifierToken convenience error reporting
14494         functions. 
14495
14496         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
14497
14498         * decl.cs: Rename `NamespaceEntry Namespace' public field into
14499         NameSpaceEntry NameSpaceEntry.
14500
14501         (LookupInterfaceOrClass): Avoid creating a full qualified name
14502         from namespace and name: avoid doing lookups when we know the
14503         namespace is non-existant.   Use new Tree.LookupByNamespace which
14504         looks up DeclSpaces based on their namespace, name pair.
14505
14506         * driver.cs: Provide a new `parser verbose' to display the
14507         exception thrown during parsing.  This is turned off by default
14508         now, so the output of a failure from mcs is more graceful.
14509
14510         * namespace.cs: Track all the namespaces defined in a hashtable
14511         for quick lookup.
14512
14513         (IsNamespace): New method
14514
14515 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
14516
14517         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
14518         we know that we need to concatenate (full typename can never be
14519         null). 
14520
14521         * class.cs: ditto.
14522
14523         * statement.cs: Use a bitfield;  Do not initialize to null things
14524         which are done by the constructor by default.
14525
14526         * cs-parser.jay: bug fix, parameter was 4, not 3.
14527
14528         * expression.cs: Just use the property;
14529
14530         * statement.cs: No need for GetVariableInfo method.
14531
14532 2003-08-08  Martin Baulig  <martin@ximian.com>
14533
14534         * flowanalysis.cs (FlowReturns): This is now nested in the
14535         `FlowBranching' class.
14536         (MyBitVector): Moved this here from statement.cs.
14537         (FlowBranching.SiblingType): New enum type.
14538         (FlowBranching.CreateSibling): Added `SiblingType' argument.
14539
14540 2003-08-07  Martin Baulig  <martin@ximian.com>
14541
14542         * flowanalysis.cs (FlowBranchingType): This is now nested in the
14543         `FlowBranching' class and called `BranchingType'.
14544
14545 2003-08-07  Martin Baulig  <martin@ximian.com>
14546
14547         * flowanalysis.cs: Moved all the control flow analysis code into
14548         its own file.
14549
14550 2003-08-07  Martin Baulig  <martin@ximian.com>
14551
14552         * assign.cs (Assign.DoResolve): `target' must either be an
14553         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
14554         #37319.
14555
14556 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
14557
14558         * expression.cs (BinaryMethod): This kind of expression is created by the
14559         Binary class if it determines that the operator has to be handled
14560         by a method.
14561
14562         (BinaryDelegate): This kind of expression is created if we are
14563         dealing with a + or - operator on delegates.
14564
14565         (Binary): remove method, argumetns, and DelegateOperator: when
14566         dealing with methods, 
14567
14568         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
14569
14570         * statement.cs (Block): use bitfields for the three extra booleans
14571         we had in use.   Remove unused topblock parameter.
14572
14573         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
14574
14575         * assign.cs: Drop extra unneeded tests.
14576
14577 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
14578
14579         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
14580
14581         * statement.cs (Foreach): Use VariableStorage instead of
14582         LocalBuilders.   
14583
14584         * codegen.cs (VariableStorage): New class used by clients that
14585         require a variable stored: locals or fields for variables that
14586         need to live across yield.
14587
14588         Maybe provide a convenience api for EmitThis+EmitLoad?
14589
14590         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
14591         these bad boys.
14592
14593 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
14594
14595         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
14596         RemapParameterLValue): New methods that are used to turn a
14597         precomputed FieldInfo into an expression like this:
14598
14599                 instance.FieldInfo
14600
14601         The idea is to use this instead of making LocalVariableReference
14602         have more than one meaning.
14603
14604         * cs-parser.jay: Add error production to BASE.
14605
14606         * ecore.cs: Deal with TypeManager.GetField returning null, which
14607         is now a valid return value.
14608
14609         (FieldExprNoAddress): New expression for Fields whose address can
14610         not be taken.
14611
14612         * expression.cs (LocalVariableReference): During the resolve
14613         phases, create new expressions if we are in a remapping context.
14614         Remove code that dealt with remapping here.
14615
14616         (ParameterReference): same.
14617
14618         (ProxyInstance): New expression, like the `This' expression, but
14619         it is born fully resolved.  We know what we are doing, so remove
14620         the errors that are targeted to user-provided uses of `this'.
14621
14622         * statement.cs (Foreach): our variable is now stored as an
14623         Expression;  During resolution, follow the protocol, dont just
14624         assume it will return this.
14625
14626 2003-08-06  Martin Baulig  <martin@ximian.com>
14627
14628         * support.cs (SeekableStreamReader.cs): New public class.
14629
14630         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
14631         SeekableStreamReader instead of the normal StreamReader.
14632
14633 2003-08-04  Martin Baulig  <martin@ximian.com>
14634
14635         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
14636         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
14637         deambiguate casts and delegate invocations.
14638         (parenthesized_expression): Use the new tokens to ensure this is
14639         not a cast of method invocation.
14640
14641         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
14642         when reading a `)' and Deambiguate_CloseParens () was previously
14643         called.
14644
14645         * expression.cs (ParenthesizedExpression): New class.  This is
14646         just used for the CS0075 test.
14647         (Binary.DoResolve): Check for CS0075.   
14648
14649 2003-07-29  Ravi Pratap  <ravi@ximian.com>
14650
14651         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
14652         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
14653         reference comparison.
14654
14655         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
14656         examine the ReturnType for equality - this is necessary in the
14657         cases of implicit and explicit operators whose signature also
14658         includes the return type.
14659
14660 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
14661
14662         * namespace.cs: Cache the result of the namespace computation,
14663         instead of computing it every time.
14664
14665 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
14666
14667         * decl.cs: Use a global arraylist that we reuse over invocations
14668         to avoid excesive memory consumption.  Reduces memory usage on an
14669         mcs compile by one meg (45 average).
14670
14671         * typemanager.cs (LookupTypeReflection): In .NET pointers are
14672         private, work around that.
14673
14674 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
14675
14676         * literal.cs (IntLiteral): Define Zero and One static literals. 
14677
14678         * cs-parser.jay (integer_literal): use static literals to reduce
14679         memory usage for the most used literals (0, 1 and -1).  211kb
14680         reduced in memory usage.
14681
14682         Replace all calls to `new ArrayList' with `new
14683         ArrayList(4)' which is a good average number for most allocations,
14684         and also requires only 16 bytes of memory for its buffer by
14685         default. 
14686
14687         This reduced MCS memory usage in seven megabytes for the RSS after
14688         bootstrapping.
14689
14690 2003-07-28  Ravi Pratap  <ravi@ximian.com>
14691
14692         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
14693         handle params methods the correct way by forming only one
14694         applicable set with params and normal methods in them. Earlier we
14695         were looking at params methods only if we found no normal methods
14696         which was not the correct thing to do.
14697
14698         (Invocation.BetterFunction): Take separate arguments indicating
14699         when candidate and the best method are params methods in their
14700         expanded form.
14701
14702         This fixes bugs #43367 and #46199.
14703
14704         * attribute.cs: Documentation updates.
14705
14706         (CheckAttribute): Rename to CheckAttributeTarget.
14707         (GetValidPlaces): Rename to GetValidTargets.
14708
14709         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
14710         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
14711
14712         Fixes bug #44468.
14713
14714 2003-07-28  Miguel de Icaza  <miguel@ximian.com>
14715
14716         * codegen.cs: Compute IsGeneric correctly.
14717
14718         * cs-parser.jay: Introduce OP_GENERIC_LT for the grammar ambiguity
14719         resolution. 
14720
14721         Bring back (temporarily) OP_LEFT_SHIFT, OP_RIGHT_SHIFT,
14722         OP_SHIFT_RIGHT_ASSIGN, OP_SHIFT_LEFT_ASSIGN.  There were too many
14723         regressions, and I was chasing more bugs than I required.
14724
14725         * interface.cs: Use expressions for base type names (like classes
14726         and structs have been doing for a while now), and resolve that.
14727         This patch should probably go into head as well.
14728
14729         This makes it one less user of FindType.
14730
14731 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
14732
14733         This compiler can not self host currently.  Need to fix that.
14734         
14735         * Makefile: compile to `gmcs.exe'
14736
14737         * driver.cs: Turn on v2 by default on gmcs.
14738
14739         * generic.cs (ConstructedType): Does no longer take a container
14740         type argument;  That will be taken care of later.
14741
14742         (ConstructedType.DoResolve, ConstructedType.ResolveAsTypeStep):
14743         Use SimpleName to resolve for now, so we can continue the work on
14744         the parser, until we get Type.GetType that understands generics.
14745
14746         (ConstructedType.ToString): Implement
14747
14748         (TypeArguments.Resolve): Resolve the child expressions as types. 
14749         
14750         * cs-parser.jay: Rename interface_constraints to
14751         type_parameter_constraints
14752
14753         (namespace_or_type_name): Only use constructed types for the basic
14754         construction, we will deal with identifier<...> later.
14755
14756         (type/type_name): No longer call DecomposeQI, as
14757         namespace_or_type_name is always decoded now.
14758         
14759 2003-07-22  Ravi Pratap  <ravi@ximian.com>
14760
14761         * expression.cs (Invocation.OverloadResolve): Follow the spec more
14762         closely: we eliminate methods in base types when we have an
14763         applicable method in a top-level type.
14764
14765         Please see section 14.5.5.1 for an exact description of what goes
14766         on. 
14767
14768         This fixes bug #45127 and a host of other related to corlib compilation.
14769
14770         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
14771         array is the method corresponding to the top-level type (this is
14772         because of the changes made to icall.c) so we change this
14773         accordingly.
14774
14775         (MethodGroupExpr.Name): This too.
14776
14777         * typemanager.cs (GetElementType): New method which does the right
14778         thing when compiling corlib. 
14779
14780         * everywhere: Make use of the above in the relevant places.
14781
14782 2003-07-22  Martin Baulig  <martin@ximian.com>
14783
14784         * cs-parser.jay (invocation_expression): Moved
14785         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
14786         `cast_expression', but create a InvocationOrCast which later
14787         resolves to either an Invocation or a Cast.
14788
14789         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
14790         method; call this before EmitStatement() to make sure that this
14791         expression can be used as a statement.
14792
14793         * expression.cs (InvocationOrCast): New class; resolves to either
14794         an Invocation or a Cast.
14795
14796         * statement.cs (StatementExpression): Call ResolveStatement() on
14797         the ExpressionStatement before emitting it.
14798
14799 2003-07-21  Martin Baulig  <martin@ximian.com>
14800
14801         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
14802         `ref' and `out' attributes match; fixes #46220.
14803         (MemberAccess.ResolveMemberAccess): You can't reference a type
14804         through an expression; fixes #33180.
14805         (Indexers.GetIndexersForType): Don't return the indexers from
14806         interfaces the class implements; fixes #46502.
14807
14808 2003-07-21  Martin Baulig  <martin@ximian.com>
14809
14810         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
14811         CS0661 checks; fixes bug #30442.
14812
14813 2003-07-21  Martin Baulig  <martin@ximian.com>
14814
14815         * decl.cs (AdditionResult): Added `Error'.
14816
14817         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
14818
14819         * typemanager.cs (TypeManager.ChangeType): Catch exceptions; makes
14820         cs0031.cs actually work.
14821
14822  2003-07-20  Miguel de Icaza  <miguel@ximian.com>
14823  
14824         * cs-parser.jay (namespace_name): do not use
14825         namespace_or_type_name, use qualified_identifier, because
14826         namespace_or_type_name will soon return a composed expression
14827         instead of a string.
14828  
14829         (namespace_or_type_name): Instead of returning a string, now this
14830         production returns an expression.
14831  
14832         * codegen.cs (EmitContext): Setup IsGeneric property based on
14833         whether our DeclSpace is generic, our the method is generic.
14834  
14835         * modifier.cs (Modifiers.METHOD_GENERIC): New definition, use if
14836         the method is generic.
14837  
14838         * cs-parser.jay (type_arguments, opt_type_argument_list,
14839         type_parameters, type_parameter_list, opt_type_parameter_list,
14840         type_parameter,, opt_type_parameter_constraints_clauses,
14841         type_parameter_constraints_clauses,
14842         type_parameter_constraint_clause, type_parameter_constraint,
14843         interface_constraints): Add new production
14844  
14845         * decl.cs (DeclSpace): IsGeneric, flag to track whether this
14846         DeclSpace is generic or not.
14847  
14848         (DeclSpace.SetParameterInfo): New routine, used to set the
14849         parameter info for a type.
14850  
14851         (DeclSpace.LookupGeneric): Lookups a name, and if it is a generic,
14852         returns a GenericTypeExpr
14853  
14854         * ecore.cs (SimpleName.ResolveAsTypeStep): If our container is
14855         generic, lookup the generic argument.
14856  
14857         * attribute.cs: Do not allow TypeParameterExpressions in
14858         Attributes.
14859  
14860         * class.cs: Do not allow the Main method to be defined in a
14861         Generic container.
14862  
14863         * expression.cs (SizeOf): Do not allow generic types to be used as
14864         arguments to sizeof.
14865  
14866         * typemanager.cs (IsGeneric): Wrapper for Reflection when we have
14867         it: whether a type is generic or not.  Only works for types we are
14868         currently building for now.
14869         
14870 2003-07-20  Martin Baulig  <martin@ximian.com>
14871
14872         * namespace.cs: Fixed that bug which caused a crash when compiling
14873         the debugger's GUI.
14874
14875 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
14876
14877         * typemanager.cs (LookupTypeReflection): Never expose types which
14878         are NotPublic, NestedPrivate, NestedAssembly, or
14879         NestedFamANDAssem.  We used to return these, and later do a check
14880         that would report a meaningful error, but the problem is that we
14881         would not get the real match, if there was a name override.
14882
14883 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
14884
14885         * namespace.cs (Namespace, Name): Do not compute the namespace
14886         name dynamically, compute it in the constructor.  This reduced
14887         memory usage by 1697 KB.
14888
14889         * driver.cs: Use --pause to pause at the end.
14890
14891 2003-07-17  Peter Williams  <peter@newton.cx>
14892
14893         * Makefile: Change the name of the test target so that it doesn't
14894         conflict with the recursive test target.
14895
14896 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
14897
14898         * expression.cs (LocalVariableReference.Emit, EmitAssign,
14899         AddressOf): Do not use EmitThis, that was wrong, use the actual
14900         this pointer.
14901
14902 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
14903
14904         * class.cs (MethodData.Define): While checking if a method is an
14905         interface implementation, improve the test: If we are not public
14906         (use new test here: use the computed MethodAttributes directly,
14907         instead of the parsed modifier flags) check if the `implementing'
14908         method comes from an interface or not.
14909
14910         * pending.cs (VerifyPendingMethods): Slightly better error
14911         message.
14912
14913         * makefile: add test target that does the mcs bootstrap.
14914
14915 2003-07-16  Ravi Pratap  <ravi@ximian.com>
14916
14917         * interface.cs (Define): Do nothing here since there are no
14918         members to populate etc. Move the attribute emission out of here
14919         since this was just totally the wrong place to put it. Attribute
14920         application happens during the 'Emit' phase, not in the 'Define'
14921         phase.
14922
14923         (Emit): Add this method and move the attribute emission here
14924
14925         * rootcontext.cs (EmitCode): Call the Emit method on interface
14926         types too.
14927
14928 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
14929
14930         * expression.cs (OverloadResolve): Report error only if Location
14931         is not 'Null' which means that there was a probe going on.
14932
14933 2003-07-14  Martin Baulig  <martin@ximian.com>
14934
14935         * expression.cs (ConditionalLogicalOperator): New public class to
14936         implement user defined conditional logical operators.
14937         This is section 14.11.2 in the spec and bug #40505.
14938
14939 2003-07-14  Martin Baulig  <martin@ximian.com>
14940
14941         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
14942
14943 2003-07-14  Martin Baulig  <martin@ximian.com>
14944
14945         * codegen.cs (EmitContext.InFixedInitializer): New public field.
14946
14947         * ecore.cs (IVariable.VerifyFixed): New interface method.
14948
14949         * expression.cs (Unary.ResolveOperator): When resolving the `&'
14950         operator, check whether the variable is actually fixed.  Fixes bug
14951         #36055.  Set a variable definitely assigned when taking its
14952         address as required by the spec.
14953
14954         * statement.cs (LocalInfo.IsFixed): New field.
14955         (LocalInfo.MakePinned): Set `IsFixed' to true.
14956
14957 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
14958
14959         * attribute.cs (Attribute.Resolve): While doing a Member lookup
14960         for .ctors, ensure that we only ask for members declared in the
14961         attribute type (BindingFlags.DeclaredOnly).
14962
14963         Fixes bug #43632.
14964
14965         * expression.cs (Error_WrongNumArguments): Report error 1501
14966         correctly the way CSC does.
14967
14968 2003-07-13  Martin Baulig  <martin@ximian.com>
14969
14970         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
14971         lookup on the fully qualified name, to make things like "X.X" work
14972         where "X.X" is a fully qualified type name, but we also have a
14973         namespace "X" in the using list.  Fixes #41975.
14974
14975 2003-07-13  Martin Baulig  <martin@ximian.com>
14976
14977         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
14978         function. If we're a CompoundAssign, we need to create an embedded
14979         CompoundAssign, not an embedded Assign.
14980         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
14981         Fixes #45854.
14982
14983 2003-07-13  Martin Baulig  <martin@ximian.com>
14984
14985         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
14986         work to fix bug #46088.
14987
14988 2003-07-13  Ravi Pratap <ravi@ximian.com>
14989
14990         * class.cs (Operator.Emit): Do not emit attributes here - it is
14991         taken care of by the Method class that we delegate too. This takes
14992         care of bug #45876.
14993
14994 2003-07-10  Martin Baulig  <martin@ximian.com>
14995
14996         * expression.cs (TypeOfVoid): New class.
14997         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
14998
14999 2003-07-10  Martin Baulig  <martin@ximian.com>
15000
15001         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
15002         bug #35957.
15003
15004 2003-07-10  Martin Baulig  <martin@ximian.com>
15005
15006         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
15007         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
15008
15009         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
15010
15011         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
15012
15013 2003-07-10  Martin Baulig  <martin@ximian.com>
15014
15015         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
15016         of decimal.  Fixes #42850.
15017
15018         NOTE: I also fixed the created byte blob, but this doesn't work on
15019         the MS runtime and csc never produces any byte blobs for decimal
15020         arrays.
15021
15022 2003-07-10  Martin Baulig  <martin@ximian.com>
15023
15024         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
15025         structs; fixes #32068.
15026         (Block.AddChildVariableNames): Fixed #44302.
15027
15028 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15029
15030         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
15031
15032 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
15033
15034         * attribute.cs: And this test is onger needed.
15035
15036 2003-07-08  Martin Baulig  <martin@ximian.com>
15037
15038         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
15039         inaccessible types.  Fixes #36313.
15040
15041         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
15042
15043         * namespace.cs (NamespaceEntry): Create implicit entries for all
15044         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
15045         implicit entries for N1.N2 and N1.
15046
15047 2003-07-08  Martin Baulig  <martin@ximian.com>
15048
15049         Rewrote the handling of namespaces to fix a lot of the issues
15050         wrt. `using' aliases etc.
15051
15052         * namespace.cs (Namespace): Splitted this class into a
15053         per-assembly `Namespace' and a per-file `NamespaceEntry'.
15054
15055         * typemanager.cs (TypeManager.IsNamespace): Removed.
15056         (TypeManager.ComputeNamespaces): Only compute namespaces from
15057         loaded assemblies here, not the namespaces from the assembly we're
15058         currently compiling.
15059
15060 2003-07-08  Martin Baulig  <martin@ximian.com>
15061
15062         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
15063
15064 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
15065
15066         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
15067         already fixed it.  
15068
15069         I thought about the memory savings here, but LookupTypeReflection
15070         is used under already very constrained scenarios.  Compiling
15071         corlib or mcs only exposes one hit, so it would not really reduce
15072         any memory consumption.
15073
15074 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15075
15076         * typemanager.cs: fixes bug #45889 by only adding public types from
15077         other assemblies to the list of known types.
15078
15079 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
15080
15081         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
15082         on the type we resolved.
15083
15084 2003-07-05  Martin Baulig  <martin@ximian.com>
15085
15086         * pending.cs (PendingImplementation.ParentImplements): Don't
15087         create the proxy if the parent is abstract.
15088
15089         * class.cs (TypeContainer.DefineIndexers): Process explicit
15090         interface implementations first.  Fixes #37714.
15091
15092 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
15093
15094         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
15095         defined recursively;  but since we modify the input parameters
15096         (left is set to `this' temporarily), we reset this value if the
15097         left_is_explicit is false, which gives the original semantics to
15098         the code.  
15099
15100         * literal.cs (NullPointer): new class used to represent a null
15101         literal in a pointer context.
15102
15103         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
15104         type is a pointer, use a NullPointer object instead of a
15105         NullLiteral.   Closes 43687
15106
15107         (ExplicitConversion): Convert pointer values using
15108         the conv opcode to the proper type.
15109
15110         * ecore.cs (New): change ValueTypeVariable property into a method,
15111         that returns whether the valuetype is suitable for being used.
15112
15113         * expression.cs (Binary.DoNumericPromotions): Only return if we
15114         the int constant was a valid uint, and we can return both left and
15115         right as uints.  If not, we continue processing, to trigger the
15116         type conversion.  This fixes 39018.
15117
15118         * statement.cs (Block.EmitMeta): During constant resolution, set
15119         the CurrentBlock property on the emitcontext, so that we resolve
15120         constants propertly.
15121
15122 2003-07-02  Martin Baulig  <martin@ximian.com>
15123
15124         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
15125         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
15126
15127         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
15128         than emitting it here.
15129
15130         * statement.cs: Fixed some more flow analysis bugs.
15131
15132 2003-07-02  Martin Baulig  <martin@ximian.com>
15133
15134         * class.cs (MethodData.Define): When implementing interface
15135         methods, set Final unless we're Virtual.
15136
15137         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
15138         check work for interface methods.
15139
15140 2003-07-01  Martin Baulig  <martin@ximian.com>
15141
15142         * ecore.cs (EmitContext.This): Replaced this property with a
15143         GetThis() method which takes a Location argument.  This ensures
15144         that we get the correct error location for a CS0188.
15145
15146 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
15147
15148         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
15149         ImplicitStandardConversion.
15150
15151         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
15152
15153 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
15154
15155         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
15156         optimization.
15157
15158 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
15159
15160         * class.cs (Constructor.Define): Turn off initlocals for unsafe
15161         constructors.
15162
15163         (MethodData.Define): Turn off initlocals for unsafe methods.
15164
15165 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
15166
15167         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
15168         complete;  Fixes #37521.
15169
15170         * delegate.cs: Use Modifiers.TypeAttr to compute the
15171         TypeAttributes, instead of rolling our own.  This makes the flags
15172         correct for the delegates.
15173
15174 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
15175
15176         * class.cs (Constructor.Define): Set the private flag for static
15177         constructors as well.
15178
15179         * cs-parser.jay (statement_expression): Set the return value to
15180         null, to avoid a crash when we catch an error.
15181
15182 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
15183
15184         * cs-parser.jay: Applied patch from Jackson that adds support for
15185         extern and unsafe modifiers to destructor declarations.
15186
15187         * expression.cs: Report error 21 if the user is trying to index a
15188         System.Array.
15189
15190         * driver.cs: Add an error message, suggested by the bug report.
15191
15192         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
15193         if we do not have a ": this ()" constructor initializer.  Fixes 45149
15194
15195 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
15196
15197         * namespace.cs: Add some information to reduce FAQs.
15198
15199 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
15200
15201         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
15202         underlying enumeration types.  Fixes #43915.
15203
15204         * expression.cs: Treat ushort/short as legal values to be used in
15205         bitwise operations.
15206
15207 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
15208
15209         * delegate.cs: transfer custom attributes for paramenters from
15210         the delegate declaration to Invoke and BeginInvoke.
15211
15212 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
15213
15214         * attribute.cs: handle custom marshalers and emit marshal info
15215         for fields, too.
15216
15217 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
15218
15219         * makefile.gnu: Added anonymous.cs to the compiler sources.
15220
15221 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
15222
15223         * iterators.cs: Change the name of the proxy class to include two
15224         underscores.
15225
15226         * cs-parser.jay: Update grammar to include anonymous methods.
15227
15228         * anonymous.cs: new file.
15229
15230 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
15231
15232         * class.cs (Field.Define): Add missing test for pointers and
15233         safety. 
15234
15235 2003-05-27  Ravi Pratap  <ravi@ximian.com>
15236
15237         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
15238         we use the stobj opcode.
15239
15240         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
15241         since it wasn't the correct fix. 
15242
15243         It still is puzzling that we are required to use stobj for IntPtr
15244         which seems to be a ValueType.
15245
15246 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
15247
15248         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
15249         during regular simple name resolution.   Now, the trick is that
15250         instead of returning for processing the simplename, we do a
15251         TypeManager.LookupType (ie, a rooted lookup as opposed to a
15252         contextual lookup type).   If a match is found, return that, if
15253         not, return for further composition.
15254
15255         This fixes long-standing 30485.
15256
15257         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
15258         using the address to initialize an object, do an Stobj instead of
15259         using the regular Stelem.
15260
15261         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
15262         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
15263         Because if we are a BaseIndexerAccess that value will be true.
15264         Fixes 43643.
15265
15266         * statement.cs (GotoCase.Resolve): Return after reporting an
15267         error, do not attempt to continue. 
15268
15269         * expression.cs (PointerArithmetic.Emit): If our operand is a
15270         long, convert our constants to match the operand before
15271         multiplying.  Convert to I type before adding.   Fixes 43670.
15272
15273 2003-05-14  Ravi Pratap  <ravi@ximian.com>
15274
15275         * enum.cs (ImplicitConversionExists) : Rename to
15276         ImplicitEnumConversionExists to remove ambiguity. 
15277
15278         * ecore.cs (NullCast): New type of cast expression class which
15279         basically is very similar to EmptyCast with the difference being
15280         it still is a constant since it is used only to cast a null to
15281         something else
15282         (eg. (string) null)
15283
15284         * convert.cs (ImplicitReferenceConversion): When casting a null
15285         literal, we return a NullCast.
15286
15287         * literal.cs (NullLiteralTyped): Remove - I don't see why this
15288         should be around anymore.
15289
15290         The renaming (reported was slightly wrong). Corrections:
15291
15292         ConvertImplicitStandard -> ImplicitConversionStandard
15293         ConvertExplicitStandard -> ExplicitConversionStandard
15294
15295         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
15296         before passing them in !
15297
15298         * convert.cs (ImplicitConversionStandard): When comparing for
15299         equal expr and target types, ensure that expr is not a
15300         NullLiteral.
15301
15302         In general, we must not be checking (expr_type ==
15303         target_type) in the top level conversion methods
15304         (ImplicitConversion, ExplicitConversion etc). This checking is
15305         done in the methods that they delegate to.
15306
15307 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
15308
15309         * convert.cs: Move Error_CannotConvertType,
15310         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
15311         ImplicitNumericConversion, ImplicitConversionExists,
15312         ImplicitUserConversionExists, StandardConversionExists,
15313         FindMostEncompassedType, FindMostSpecificSource,
15314         FindMostSpecificTarget, ImplicitUserConversion,
15315         ExplicitUserConversion, GetConversionOperators,
15316         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
15317         TryImplicitIntConversion, Error_CannotConvertImplicit,
15318         ConvertImplicitRequired, ConvertNumericExplicit,
15319         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
15320         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
15321         its own file.
15322
15323         Perform the following renames:
15324
15325         StandardConversionExists -> ImplicitStandardConversionExists
15326         ConvertImplicit -> ImplicitConversion
15327         ConvertImplicitStandard -> ImplicitStandardConversion
15328         TryImplicitIntConversion -> ImplicitIntConversion
15329         ConvertImplicitRequired -> ImplicitConversionRequired
15330         ConvertNumericExplicit -> ExplicitNumericConversion
15331         ConvertReferenceExplicit -> ExplicitReferenceConversion
15332         ConvertExplicit -> ExplicitConversion
15333         ConvertExplicitStandard -> ExplicitStandardConversion
15334
15335 2003-05-19  Martin Baulig  <martin@ximian.com>
15336
15337         * statement.cs (TypeInfo.StructInfo): Made this type protected.
15338         (TypeInfo): Added support for structs having structs as fields.
15339
15340         * ecore.cs (FieldExpr): Implement IVariable.
15341         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
15342         VariableInfo for the field.
15343
15344 2003-05-18  Martin Baulig  <martin@ximian.com>
15345
15346         * expression.cs (This.DoResolve): Report a CS0027 if we're
15347         emitting a field initializer.
15348
15349 2003-05-18  Martin Baulig  <martin@ximian.com>
15350
15351         * expression.cs (This.ResolveBase): New public function.
15352         (This.DoResolve): Check for CS0188.
15353
15354         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
15355         This.Resolve().
15356
15357         * ecore.cs (MethodGroupExpr.DoResolve): Set the
15358         `instance_expression' to null if we don't have any non-static
15359         methods.
15360
15361 2003-05-18  Martin Baulig  <martin@ximian.com>
15362
15363         Reworked the way how local variables and parameters are handled by
15364         the flow analysis code.
15365
15366         * statement.cs (TypeInfo, VariableMap): New public classes.
15367         (VariableInfo): New public class.  This is now responsible for
15368         checking whether a variable has been assigned.  It is used for
15369         parameters and local variables.
15370         (Block.EmitMeta): Take the InternalParameters as argument; compute
15371         the layout of the flow vectors here.
15372         (Block.LocalMap, Block.ParameterMap): New public properties.
15373         (FlowBranching): The .ctor doesn't get the InternalParameters
15374         anymore since Block.EmitMeta() now computes the layout of the flow
15375         vector.
15376         (MyStructInfo): This class is now known as `StructInfo' and nested
15377         in `TypeInfo'; we don't access this directly anymore.
15378
15379         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
15380         property and removed IsAssigned(), IsFieldAssigned(),
15381         SetAssigned() and SetFieldAssigned(); we now call them on the
15382         VariableInfo so we don't need to duplicate this code everywhere.
15383
15384         * expression.cs (ParameterReference): Added `Block block' argument
15385         to the .ctor.
15386         (LocalVariableReference, ParameterReference, This): The new
15387         VariableInfo class is now responsible for all the definite
15388         assignment stuff.
15389
15390         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
15391         IsParameterAssigned, SetParameterAssigned): Removed.
15392
15393 2003-05-18  Martin Baulig  <martin@ximian.com>
15394
15395         * typemanager.cs (InitCoreTypes): Try calling
15396         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
15397         the 3-args-version.  Corlib now also needs our `void_type'.
15398         (GetMethod): Added overloaded version which takes an optional
15399         `bool report_errors' to allow lookups of optional methods.
15400
15401 2003-05-12  Martin Baulig  <martin@ximian.com>
15402
15403         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
15404         only used for locals and not for parameters.
15405
15406 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
15407
15408         * support.cs (InternalParameters.ParameterType): Return the
15409         ExternalType of the parameter.
15410
15411         * parameter.cs (Parameter.ExternalType): drop the two arguments,
15412         they were unused.
15413
15414 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
15415
15416         * class.cs (MethodData.Define): Do not set the `newslot' on
15417         interface members, if they are also flagged as "override".
15418
15419         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
15420         better code for ++i and i++.  This only works for static fields
15421         and local variables.
15422
15423         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
15424         want to pull the DeclSpace out of the builder_to_declspace instead
15425         of the TypeBuilder (like in TypeContainer.FindMembers).
15426
15427         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
15428         instead of LookupTypeContainer.  Fixes the crash on .NET for
15429         looking up interface members.
15430
15431         * const.cs: Create our own emit context during the Definition
15432         stage, so that constants are evaluated in the proper context, when
15433         a recursive definition happens.
15434
15435 2003-05-11  Martin Baulig  <martin@ximian.com>
15436
15437         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
15438         new block for a switch section.
15439         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
15440         the adding/lookup in the switch block.  Fixes #39828.
15441
15442 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
15443
15444         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
15445         functionality: I needed to convert the data after I had performed
15446         the add/sub operation into the operands type size.
15447
15448         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
15449         pass the type for the box operation, otherwise the resulting
15450         object would have been of type object.
15451
15452         (BoxedCast): Add constructor to specify the type to box as.
15453
15454 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
15455
15456         * iterators.cs: I was reusing the `count' variable inadvertently,
15457         take steps to not allow this to happen.
15458
15459 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
15460
15461         * attribute.cs (Attribute.Resolve): Params attributes are encoded
15462         by creating an array at the point where the params starts and
15463         putting all those arguments there, then adjusting the size of the
15464         array.
15465
15466 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
15467
15468         * expression.cs (New.AddressOf): Implement interface
15469         IMemoryLocation.  This is used when the `new' operator is used in
15470         the context of an invocation to a method on a value type.
15471
15472         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
15473         example. 
15474
15475         * namespace.cs: Also check the using aliases here.
15476
15477         * driver.cs: Move the test for using validity after the types have
15478         been entered, so we do a single pass that also includes the using
15479         aliases. 
15480
15481         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
15482         in the regular case.   CreateSiblingForFinally is doing extra
15483         error checking.
15484
15485         * attribute.cs (GetAttributeArgumentExpression): Store the result
15486         on an out value, and use the return value to indicate failure
15487         instead of using null (which is a valid return for Constant.GetValue).
15488
15489         * statement.cs: Perform the analysis flow for the increment
15490         portion after the statement, because this will be the real flow of
15491         execution.  Fixes #42385
15492
15493         * codegen.cs (EmitContext.EmitArgument,
15494         EmitContext.EmitStoreArgument): New helper functions when the
15495         RemapToProxy flag is set.
15496
15497         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
15498         function.
15499
15500         Add support for remapping parameters. 
15501
15502         * iterators.cs: Propagate parameter values;  Store parameter
15503         values in the proxy classes.
15504
15505 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
15506
15507         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
15508         need a proxy reference;  I do not know what I was thinking
15509
15510         * cs-parser.jay (constructor_initializer): catch another error,
15511         and display nice message.
15512
15513         (field_declaration): catch void field declaration
15514         to flag a better error. 
15515
15516         * class.cs (MemberBase.CheckBase): Report an error instead of a
15517         warning if a new protected member is declared in a struct. 
15518         (Field.Define): catch the error of readonly/volatile.
15519
15520         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
15521
15522         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
15523         volatile variable is taken
15524
15525 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
15526
15527         * statement.cs (Fixed.Resolve): Report an error if we are not in
15528         an unsafe context.
15529
15530 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
15531
15532         * typemanager.cs: reuse the code that handles type clashes for
15533         delegates and enumerations.
15534
15535         * class.cs (Report28): Always report.
15536
15537         * expression.cs (EncodeAsAttribute): Allow nulls here.
15538
15539 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
15540
15541         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
15542         the functionality for testing whether an expression is valid for
15543         an attribute here.  Also handle the case of arrays of elements
15544         being stored. 
15545
15546         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
15547         encoding a linear array into an array of objects that are suitable
15548         to be passed to an CustomAttributeBuilder.
15549
15550         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
15551
15552         * ecore.cs: (FieldExpr): Handle field remapping here.
15553
15554         * iteratators.cs: Pass the instance variable (if the method is an
15555         instance method) to the constructors, so we can access the field
15556         variables on the class.
15557
15558         TODO: Test this with structs.  I think the THIS variable on
15559         structs might have to be a pointer, and not a refenrece
15560
15561 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
15562
15563         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
15564         local variables to fields in a proxy class.
15565
15566         * iterators.cs (PopulateProxy): Rename our internal fields to
15567         <XXX>.  
15568         Create a <THIS> field if we are an instance method, so we can
15569         reference our parent container variables.
15570         (MapVariable): Called back from the EmitContext code to enter a
15571         new variable to field mapping into the proxy class (we just create
15572         a FieldBuilder).
15573
15574         * expression.cs
15575         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
15576         for using the remapped locals to fields.
15577
15578         I placed the code here, because that gives the same semantics to
15579         local variables, and only changes the Emit code.
15580
15581         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
15582         statements inside iterators.
15583         (VariableInfo): Add a FieldBuilder for the cases when we are
15584         remapping local variables to fields in a proxy class
15585
15586         * ecore.cs (SimpleNameResolve): Avoid testing two times for
15587         current_block != null.
15588
15589         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
15590         not cope with strings, as it has been moved to the
15591         TableSwitchEmit.  Fixed bug in switch generation.
15592
15593         * expression.cs (New.DoResolve): Provide more context for the user
15594         when reporting an error.
15595
15596         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
15597         pointers. 
15598
15599         * expression.cs (MemberAccess.DoResolve): When we get a type back,
15600         check the permissions for it.  Note than in a type-resolution
15601         context the check was already present in DeclSpace.ResolveType,
15602         but was missing from the MemberAccess.
15603
15604         (ArrayCreation.CheckIndices): warn if the user has
15605         more nested levels of expressions, but there are no more
15606         dimensions specified.  Avoids crash on bug 41906.
15607
15608 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
15609
15610         * statement.cs (Block): replace Implicit bool, for a generic
15611         flags.   
15612         New flag: `Unchecked'.  This is used during the EmitMeta phase
15613         (which is out-of-line with the regular Resolve/Emit process for a
15614         statement, as this is done ahead of time, but still gets a chance
15615         to call constant resolve).
15616
15617         (Block.Flags): new enum for adding a new flag.
15618
15619         (Block.EmitMeta): track the state of unchecked.
15620
15621         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
15622         to enable constant resolution to work there as well.
15623
15624 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
15625
15626         * typemanager.cs (ienumerable_type): Also look up
15627         System.Collections.IEnumerable. 
15628
15629 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
15630
15631         TODO: Test more than one conditional per method.
15632
15633         * class.cs (Indexer.Define): Report the location where the user is
15634         referencing the unsupported feature.
15635
15636         (MethodData): Overload the use of `conditionals' to
15637         minimize the creation of needless ArrayLists.   This saves roughly
15638         212kb on my machine.
15639
15640         (Method): Implement the new IIteratorContainer interface.
15641         (Method.SetYields): Implement the method by setting the ModFlags
15642         to contain METHOD_YIELDS.
15643
15644         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
15645         which just got set to null.
15646
15647         * iterators.cs: New file.
15648
15649         (Yield, YieldBreak): New statements.
15650
15651         * statement.cs (Return.Resolve): Flag an error if we are used in
15652         an iterator method.
15653
15654         * codegen.cs (InIterator): New flag set if the code is being
15655         compiled in an iterator method.
15656
15657         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
15658         internal modifier, and we just use it to avoid adding extra
15659         fields, as this is seldom used.  
15660
15661         * cs-parser.jay: Add yield_statement (yield and yield break).
15662
15663         * driver.cs: New flag -v2 to turn on version 2 features. 
15664
15665         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
15666         hashtable when v2 is enabled.
15667
15668 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
15669
15670         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
15671         there is already a namespace defined with this name.
15672
15673         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
15674         people upgraded their corlibs.
15675
15676         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
15677         always use fully qualified types, no need to use the compiler
15678         front end.
15679
15680         (TypeManager.IsNamespace): Use binarysearch.
15681
15682         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
15683         AddDelegate): I did not quite use the new IsValid API properly: I
15684         have to pass the short-name and the fullname.  I was passing only
15685         the basename instead of the fullname sometimes. 
15686
15687         (TypeContainer.DefineType): call NamespaceClash.
15688
15689         * interface.cs (Interface.DefineType): use NamespaceClash before
15690         defining the type.
15691
15692         * delegate.cs (Delegate.DefineType): use NamespaceClash before
15693         defining the type.
15694
15695         * enum.cs: (Enum.DefineType): use NamespaceClash before
15696         defining the type.
15697
15698         * typemanager.cs (: 3-line patch that gives us some tasty 11%
15699         speed increase.  First, use the negative_hits cache when we get a
15700         negative.  Second, add the type with its full original name
15701         instead of the new . and + encoded name (reflection uses + to
15702         separate type from a nested type).  Use LookupTypeReflection
15703         directly which bypasses the type->name hashtable (that we already
15704         know does not contain the type.
15705
15706         * decl.cs (DeclSpace.ResolveTypeExpr): track the
15707         location/container type. 
15708
15709         * driver.cs: When passing utf8, use directly the UTF8Encoding.
15710
15711 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
15712
15713         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
15714
15715         * delegate.cs (NewDelegate.Resolve): Test whether an instance
15716         method is being referenced in the method group from a static
15717         context, and report error 120 if so.
15718
15719         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
15720         Error118. 
15721
15722         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
15723         is created, we create the A namespace).
15724
15725         * cs-parser.jay: A namespace also introduces a DeclarationFound.
15726         Fixes #41591
15727
15728 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
15729
15730         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
15731         invocation to ModuleBuilder.GetType with the same values will
15732         return a new type instance, so we need to cache its return
15733         values. 
15734
15735         * expression.cs (Binary.ResolveOperator): Only allow the compare
15736         operators on enums if they are of the same type.
15737
15738         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
15739         types of ValueType on their own case.  Before we were giving them
15740         the same treatment as objects.
15741
15742         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
15743         fullname.  Short name is used to compare against container name.
15744         Fullname is used to check against defined namespace names.
15745
15746         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
15747         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
15748
15749         (Method.CheckBase): Call parent.
15750         (MemberBase.CheckBase): Check for protected members on sealed
15751         classes.
15752         (PropertyBase.CheckBase): Call parent.
15753         (Field.Define): Call parent.
15754
15755         * report.cs: Negative error codes are now mapped to 8000 - code,
15756         so that the display is render more nicely.
15757
15758         * typemanager.cs: Do not use try/catch, instead report a regular
15759         error. 
15760
15761         (GetPointerType, GetReferenceType): These methods provide
15762         mechanisms to obtain the T* and T& from a T.  We had the code
15763         previously scattered around the code base, and it also used
15764         TypeManager.LookupType that would go through plenty of caches.
15765         This one goes directly to the type source.
15766
15767         In some places we did the Type.GetType followed by
15768         ModuleBuilder.GetType, but not in others, so this unifies the
15769         processing as well.
15770
15771         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
15772         statements now that we have namespace information.
15773
15774         * typemanager.cs (IsNamespace): New method, returns whether the
15775         string presented is a namespace or not.
15776
15777         (ComputeNamespaces): New public entry point, computes the list of
15778         available namespaces, using the GetNamespaces API call in Mono, or
15779         the slower version in MS.NET.   
15780
15781         Now before we start the semantic analysis phase, we have a
15782         complete list of namespaces including everything that the user has
15783         provided.
15784
15785         Deleted old code to cache namespaces in .nsc files.
15786
15787 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
15788
15789         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
15790         class/struct location definition Location for the implicit
15791         constructor location.
15792
15793         (Operator.Define): Use the location of the operator for the
15794         implicit Method definition.
15795
15796         (Constructor.Emit): use the constructor location for the implicit
15797         base initializer constructor.
15798
15799         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
15800         and the Expression class now contains two new methods:
15801
15802         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
15803         isolate type lookup from the rest of the resolution process.
15804
15805         Since we use Expressions to hold type definitions due to the way
15806         we parse the input we have historically overloaded Resolve to
15807         perform the Type lookups if a special flag is passed.  Now this is
15808         eliminated and two methods take their place. 
15809
15810         The differences in the two methods between xStep and xTerminal is
15811         that xStep is involved in our current lookup system that uses
15812         SimpleNames to compose a name, while xTerminal is used just to
15813         catch the case where the simplename lookup failed.
15814
15815 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
15816
15817         * expression.cs (ResolveMemberAccess): Remove redundant code.
15818         TypeExpr expressions are always born fully resolved.
15819
15820         * interface.cs (PopulateMethod): Do not lookup the types twice.
15821         We were doing it once during SemanticAnalysis and once during
15822         PopulateMethod.
15823
15824         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
15825         in local variable type definitions, were being returned as a
15826         SimpleName (we decomposed everything into a string), that is
15827         because primary_expression was being used instead of a type in the
15828         grammar (reduce/reduce conflicts).
15829
15830         The part that was wrong is that we converted the expression into a
15831         string (an oversimplification in one hand, compounded with primary
15832         expressions doing string concatenation).
15833
15834         So things like:
15835
15836         A.B.C [] x;
15837
15838         Would return "A.B.C[]" as a SimpleName.  This stopped things like
15839         using clauses from working on this particular context.  And a type
15840         was being matched directly against "A.B.C[]".
15841
15842         We now use the correct approach, and allow for ComposedCast to be
15843         part of the unary expression.  So the "A.B.C []" become a composed
15844         cast of "A.B.C" (as a nested group of MemberAccess with a
15845         SimpleName at the end) plus the rank composition "[]". 
15846
15847         Also fixes 35567
15848
15849 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
15850
15851         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
15852         for the access level checking.
15853
15854         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
15855         `TypeContainer container', because I kept getting confused when I
15856         was debugging this code.
15857
15858         * expression.cs (Indexers): Instead of tracking getters/setters,
15859         we now track them in parallel.  We create one arraylist less, but
15860         most importantly it is possible now for the LValue code to find a
15861         matching get for a set.
15862
15863         (IndexerAccess.DoResolveLValue): Update the code.
15864         GetIndexersForType has been modified already to extract all the
15865         indexers from a type.  The code assumed it did not.
15866
15867         Also make the code set the correct return type for the indexer.
15868         This was fixed a long time ago for properties, but was missing for
15869         indexers.  It used to be void_type.
15870
15871         (Binary.Emit): Test first for doubles instead of
15872         floats, as they are more common.
15873
15874         (Binary.EmitBranchable): Use the .un version of the branch opcodes
15875         when dealing with floats and the <=, >= operators.  This fixes bug
15876         #39314 
15877
15878         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
15879         to load the array value by emitting a load on the foreach variable
15880         type.  This was incorrect.  
15881
15882         We now emit the code to load an element using the the array
15883         variable type, and then we emit the conversion operator.
15884
15885         Fixed #40176
15886
15887 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
15888
15889         * attribute.cs: Avoid allocation of ArrayLists in the common case.
15890
15891 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
15892
15893         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
15894         test for protection before we test for signatures. 
15895
15896         (MethodSignature.ToString): implement.
15897
15898         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
15899         to the case where we reduced into a LongConstant.
15900
15901         * decl.cs (CheckAccessLevel): If the type is an array, we can not
15902         depend on whether the information is acurrate, because the
15903         Microsoft runtime will always claim that the array type is public,
15904         regardless of the real state.
15905
15906         If the type is a pointer, another problem happens: the type is
15907         reported as non-public in Microsoft.  
15908
15909         In both cases we have to call CheckAccessLevel recursively with
15910         the underlying type as the argument to be tested.
15911
15912 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
15913
15914         * assign.cs (Assign.Emit): If we are dealing with a compound
15915         assignment expression, we should use the code path that stores the
15916         intermediate result in a temporary value.  This fixes #40903.
15917
15918         *expression.cs (Indirection.ToString): Provide ToString method for
15919         debugging. 
15920
15921 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
15922
15923         * class.cs: Null out fields holding references to Block objects so
15924         they can be garbage collected.
15925
15926         * expression.cs (OverloadResolve): Remove unused local.
15927
15928 2003-04-07  Martin Baulig  <martin@ximian.com>
15929
15930         * codegen.cs (EmitContext.CurrentFile): New public field.
15931         (EmitContext.Mark): Use the CurrentFile to check whether the
15932         location is in the correct file.
15933         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
15934
15935 2003-04-07  Martin Baulig  <martin@ximian.com>
15936
15937         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
15938
15939         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
15940         location.  [FIXME: The location argument which gets passed to this
15941         method is sometimes wrong!]
15942
15943 2003-04-07  Nick Drochak <ndrochak@gol.com>
15944
15945         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
15946
15947 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
15948
15949         * expression.cs (Indirection.EmitAssign): We were using the
15950         temporary, but returning immediately instead of continuing the
15951         EmitAssing flow.
15952
15953 2003-04-06  Martin Baulig  <martin@ximian.com>
15954
15955         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
15956         if it's a nested child, but also deriving from the outer class.
15957         See test 190.cs.
15958
15959         * typemanager.cs (IsNestedChildOf): Make this work if it's a
15960         nested child, but also deriving from the outer class.  See
15961         test-190.cs.
15962         (FilterWithClosure): We may access private members of the outer
15963         class if we're a nested child and deriving from the outer class.
15964         (RealMemberLookup): Only set `closure_private_ok' if the
15965         `original_bf' contained BindingFlags.NonPublic.
15966
15967 2003-04-05  Martin Baulig  <martin@ximian.com>
15968
15969         * expression.cs (SizeOf.DoResolve): Use ResolveTypeExpr, so we can
15970         probe if its a type parameter, and if so, flag an error.
15971
15972         * decl.cs: Move here the SetParameterInfo code from class.cs.
15973         Handle IsGeneric here.
15974
15975         Handle a variety of errors in the parameter info definition.
15976
15977         * ecore.cs (SimpleName.DoResolveType): Handle look ups for generic
15978         type parameters here.
15979
15980         * cs-parser.jay (class_declaration): report errors for parameters
15981         here as well.
15982
15983 2003-01-21  Miguel de Icaza  <miguel@ximian.com>
15984
15985         * generic.cs: New file, contains support code for generics.
15986
15987         * cs-parser.jay: Remove OP_SHIFT_LEFT, OP_SHIFT_RIGHT,
15988         OP_SHIFT_LEFT_ASSIGN, OP_SHIFT_RIGHT_ASSIGN.
15989
15990         Update parser for the above removals.
15991
15992         * cs-tokenizer.cs: Do not handle <<= or >>= specially.  This is
15993         now taken care of in the parser.
15994
15995 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
15996
15997         * class.cs (Event.Define): Do not allow abstract events to have
15998         initializers. 
15999
16000 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
16001
16002         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
16003         block in event declarations.
16004
16005         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
16006         value type, get its address.
16007
16008         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
16009         leaving a class on the stack instead of a boolean value (int
16010         0/1).  Change the code so we compare against null, and then the
16011         result against zero.
16012
16013         * class.cs (TypeContainer.GetClassBases): We were checking for the
16014         parent class being sealed too late.
16015
16016         * expression.cs (Binary.Emit): For <= and >= when dealing with
16017         floating point values, use cgt.un and clt.un instead of cgt and
16018         clt alone.
16019
16020 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
16021
16022         * statement.cs: Apply the same optimization as MS: skip the 
16023         GetEnumerator returning an IEnumerator, and use the one returning a 
16024         CharEnumerator instead. This allows us to avoid the try-finally block 
16025         and the boxing.
16026
16027 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
16028
16029         * cs-parser.jay: Attributes cannot be applied to
16030                          namespaces. Fixes #40473
16031
16032 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16033
16034         * class.cs:
16035         (Add*): check if the name is valid using the full name for constants,
16036         fields, properties and events.
16037
16038 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
16039
16040         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
16041         char constants to be part of the enumeration.
16042
16043         * expression.cs (Conditional.DoResolve): Add support for operator
16044         true. Implements the missing functionality from 14.12
16045
16046         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
16047         operator true/false as required by the spec.
16048
16049         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
16050         implicit conversion to boolean.
16051
16052         * statement.cs (Statement.ResolveBoolean): A boolean expression is
16053         also one where the type implements `operator true'. 
16054
16055         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
16056         get an expression that will invoke operator true based on an
16057         expression.  
16058
16059         (GetConversionOperators): Removed the hack that called op_True
16060         here.  
16061
16062         (Expression.ResolveBoolean): Move this from Statement.
16063
16064 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
16065
16066         * ecore.cs (FieldExpr): do not allow initialization of initonly
16067         fields on derived classes
16068
16069 2003-03-13  Martin Baulig  <martin@ximian.com>
16070
16071         * statement.cs (Block.Emit): Call ig.BeginScope() and
16072         ig.EndScope() when compiling with debugging info; call
16073         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
16074
16075 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
16076
16077         * expression.cs (Indexers): Do not construct immediately, allow
16078         for new members to be appended as we go.  Fixes 38143
16079
16080 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16081
16082         * expression.cs: save/restore context when resolving an unchecked
16083         expression.
16084
16085 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
16086
16087         * cfold.cs: Catch division by zero in modulus operator during
16088         constant folding.
16089
16090 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
16091
16092         * interface.cs (Interface.DefineMembers): Avoid defining members
16093         twice. 
16094
16095 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
16096
16097         * driver.cs: handle the +/- options for -noconfig
16098
16099         * statement.cs (Unckeched.Resolve): Also track the state of
16100         unchecked in the Resolve phase.
16101
16102 2003-02-27  Martin Baulig  <martin@ximian.com>
16103
16104         * ecore.cs (Expression.MemberLookup): Don't create a
16105         MethodGroupExpr for something which is not a method.  Fixes #38291.
16106
16107 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
16108
16109         * class.cs (MemberBase.CheckParameters): Also check that the type
16110         is unmanaged if it is a pointer.
16111
16112         * expression.cs (SizeOf.Resolve): Add location information.
16113
16114         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
16115         a managed type is declared.
16116
16117         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
16118         parameter modifiers as well.  Fixes bug 38606
16119
16120         * class.cs: Very sad.  Am backing out the speed up changes
16121         introduced by the ArrayList -> Array in the TypeContainer, as they
16122         were not actually that much faster, and introduced a bug (no error
16123         reports on duplicated methods).
16124
16125         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
16126         source first, this will guarantee that we have a valid expression
16127         before calling in lower levels functions that will require a
16128         resolved object.  Then use this original_source in the
16129         target.ResolveLValue instead of the original source that was
16130         passed to us.
16131
16132         Another change.  Use target.Resolve instead of LValueResolve.
16133         Although we are resolving for LValues, we will let the Assign code
16134         take care of that (it will be called again from Resolve).  This
16135         basically allows code like this:
16136
16137         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
16138         class Y { void A (X x) { x [0] += o; }
16139
16140         The problem was that the indexer was trying to resolve for
16141         set_Item (idx, object o) and never finding one.  The real set_Item
16142         was set_Item (idx, X).  By delaying the process we get the right
16143         semantics. 
16144
16145         Fixes bug 36505
16146
16147 2003-02-23  Martin Baulig  <martin@ximian.com>
16148
16149         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
16150         while calling DoEmit ().
16151
16152         * codegen.cs (EmitContext.Mark): Don't mark locations in other
16153         source files; if you use the #line directive inside a method, the
16154         compiler stops emitting line numbers for the debugger until it
16155         reaches the end of the method or another #line directive which
16156         restores the original file.
16157
16158 2003-02-23  Martin Baulig  <martin@ximian.com>
16159
16160         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
16161
16162 2003-02-23  Martin Baulig  <martin@ximian.com>
16163
16164         * statement.cs (Block.AddChildVariableNames): We need to call this
16165         recursively, not just for our immediate children.
16166
16167 2003-02-23  Martin Baulig  <martin@ximian.com>
16168
16169         * class.cs (Event.Define): Always make the field private, like csc does.
16170
16171         * typemanager.cs (TypeManager.RealMemberLookup): Make events
16172         actually work, fixes bug #37521.
16173
16174 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
16175
16176         * delegate.cs: When creating the various temporary "Parameters"
16177         classes, make sure that we call the ComputeAndDefineParameterTypes
16178         on those new parameters (just like we do with the formal ones), to
16179         allow them to be resolved in the context of the DeclSpace.
16180
16181         This fixes the bug that Dick observed in Bugzilla #38530.
16182
16183 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
16184
16185         * expression.cs (ResolveMemberAccess): When resolving a constant,
16186         do not attempt to pull a constant if the value was not able to
16187         generate a valid constant.
16188
16189         * const.cs (LookupConstantValue): Do not report more errors than required.
16190
16191 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16192
16193         * expression.cs: fixes bug #38328.
16194
16195 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
16196
16197         * class.cs: Changed all the various members that can be part of a
16198         class from being an ArrayList to be an Array of the right type.
16199         During the DefineType type_list, interface_list, delegate_list and
16200         enum_list are turned into types, interfaces, delegates and enums
16201         arrays.  
16202
16203         And during the member population, indexer_list, event_list,
16204         constant_list, field_list, instance_constructor_list, method_list,
16205         operator_list and property_list are turned into their real arrays.
16206
16207         Although we could probably perform this operation earlier, for
16208         good error reporting we need to keep the lists and remove the
16209         lists for longer than required.
16210
16211         This optimization was triggered by Paolo profiling the compiler
16212         speed on the output of `gen-sample-program.pl' perl script. 
16213
16214         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
16215         not crash in methods like MemberLookupFailed that use this field.  
16216
16217         This problem arises when the compiler fails to resolve a type
16218         during interface type definition for example.
16219
16220 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
16221
16222         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
16223         inherit from System.Object, so we have to stop at null, not only
16224         when reaching System.Object.
16225
16226 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
16227
16228         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
16229         DeclaredOnly because the parent indexer might have had a different
16230         name, but did not loop until the top of the hierarchy was reached.
16231
16232         The problem this one fixes is 35492: when a class implemented an
16233         indexer from an interface, we were getting the interface method
16234         (which was abstract) and we were flagging an error (can not invoke
16235         abstract method).
16236
16237         This also keeps bug 33089 functioning, and test-148 functioning.
16238
16239         * typemanager.cs (IsSpecialMethod): The correct way of figuring
16240         out if a method is special is to see if it is declared in a
16241         property or event, or whether it is one of the predefined operator
16242         names.   This should fix correctly #36804.
16243
16244 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
16245
16246         The goal here is to remove the dependency on EmptyCast.Peel ().
16247         Killing it completely.
16248
16249         The problem is that currently in a number of places where
16250         constants are expected, we have to "probe" for an EmptyCast, and
16251         Peel, which is not the correct thing to do, as this will be
16252         repetitive and will likely lead to errors. 
16253
16254         The idea is to remove any EmptyCasts that are used in casts that
16255         can be reduced to constants, so we only have to cope with
16256         constants. 
16257
16258         This bug hunt was triggered by Bug 37363 and the desire to remove
16259         the duplicate pattern where we were "peeling" emptycasts to check
16260         whether they were constants.  Now constants will always be
16261         constants.
16262
16263         * ecore.cs: Use an enumconstant here instead of wrapping with
16264         EmptyCast.  
16265
16266         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
16267         throwing me off.  By handling this we can get rid of a few hacks.
16268
16269         * statement.cs (Switch): Removed Peel() code.
16270
16271 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
16272
16273         * class.cs: Location information for error 508
16274
16275         * expression.cs (New.DoResolve): Add a guard against double
16276         resolution of an expression.  
16277
16278         The New DoResolve might be called twice when initializing field
16279         expressions (see EmitFieldInitializers, the call to
16280         GetInitializerExpression will perform a resolve on the expression,
16281         and later the assign will trigger another resolution
16282
16283         This leads to bugs (#37014)
16284
16285         * delegate.cs: The signature for EndInvoke should contain any ref
16286         or out parameters as well.  We were not doing this in the past. 
16287
16288         * class.cs (Field.Define): Do not overwrite the type definition
16289         inside the `volatile' group.  Turns out that volatile enumerations
16290         were changing the type here to perform a validity test, which
16291         broke conversions. 
16292
16293 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
16294
16295         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
16296         and structs, we do not want to load the instance variable
16297
16298         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
16299         enum_type has to be handled like an object reference (implicit
16300         conversions exists from this to object), but the regular IsClass
16301         and IsValueType tests will never return true for this one.
16302
16303         Also we use TypeManager.IsValueType instead of type.IsValueType,
16304         just for consistency with the rest of the code (this is only
16305         needed if we ever use the construct exposed by test-180.cs inside
16306         corlib, which we dont today).
16307
16308 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
16309
16310         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
16311         just InternalCall.
16312
16313 2003-02-09  Martin Baulig  <martin@ximian.com>
16314
16315         * namespace.cs (Namespace..ctor): Added SourceFile argument.
16316         (Namespace.DefineNamespaces): New static public method; this is
16317         called when we're compiling with debugging to add all namespaces
16318         to the symbol file.
16319
16320         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
16321         pass it to the Namespace's .ctor.
16322
16323         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
16324         and MethodBase arguments; pass the namespace ID to the symwriter;
16325         pass the MethodBase instead of the token to the symwriter.
16326         (SymbolWriter.DefineNamespace): New method to add a namespace to
16327         the symbol file.
16328
16329 2003-02-09  Martin Baulig  <martin@ximian.com>
16330
16331         * symbolwriter.cs: New file.  This is a wrapper around
16332         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
16333         methods here in near future.
16334
16335 2003-02-09  Martin Baulig  <martin@ximian.com>
16336
16337         * codegen.cs (EmitContext.Mark): Just pass the arguments to
16338         ILGenerator.MarkSequencePoint() which are actually used by the
16339         symbol writer.
16340
16341 2003-02-09  Martin Baulig  <martin@ximian.com>
16342
16343         * location.cs (SourceFile): New public sealed class.  This
16344         contains the name and an index which is used in the location's token.
16345         (Location): Reserve an appropriate number of bits in the token for
16346         the source file instead of walking over that list, this gives us a
16347         really huge performance improvement when compiling with debugging.
16348
16349         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
16350         `SourceFile' argument instead of a string.
16351         (Driver.ProcessFile): Add all the files via Location.AddFile(),
16352         but don't parse/tokenize here, we need to generate the list of all
16353         source files before we do that.
16354         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
16355         the files.
16356
16357         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
16358         instead of a string.
16359
16360         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
16361         of a string.
16362
16363 2003-02-09  Martin Baulig  <martin@ximian.com>
16364
16365         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
16366         filename on `#line default'.
16367
16368 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
16369
16370         * statement.cs: don't clear the pinned var when the fixed statement
16371         returns from the method (fixes bug#37752).
16372
16373 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
16374
16375         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
16376         to IsValueType.
16377
16378 2003-02-07  Martin Baulig  <martin@ximian.com>
16379
16380         * driver.cs: Removed the `--debug-args' command line argument.
16381
16382         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
16383         automatically by the AsssemblyBuilder.
16384         (CodeGen.InitializeSymbolWriter): We don't need to call any
16385         initialization function on the symbol writer anymore.  This method
16386         doesn't take any arguments.
16387
16388 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
16389
16390         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
16391         from referenced assemblies as well.
16392
16393 2003-02-02  Martin Baulig  <martin@ximian.com>
16394
16395         * class.cs (MethodData.Emit): Generate debugging info for external methods.
16396
16397 2003-02-02  Martin Baulig  <martin@ximian.com>
16398
16399         * class.cs (Constructor.Emit): Open the symbol writer before
16400         emitting the constructor initializer.
16401         (ConstructorInitializer.Emit): Call ec.Mark() to allow
16402         single-stepping through constructor initializers.
16403
16404 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
16405
16406         * class.cs: Handle error 549: do not allow virtual methods in
16407         sealed classes. 
16408
16409 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
16410
16411         * decl.cs: Check access levels when resolving types
16412
16413 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
16414
16415         * statement.cs: Add parameters and locals set in catch blocks that might 
16416         return to set vector
16417
16418 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
16419
16420         * class.cs (Operator): Set the SpecialName flags for operators.
16421
16422         * expression.cs (Invocation.DoResolve): Only block calls to
16423         accessors and operators on SpecialName methods.
16424
16425         (Cast.TryReduce): Handle conversions from char constants.
16426
16427
16428 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
16429
16430         * statement.cs: small memory and time optimization in FlowBranching.
16431
16432 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
16433
16434         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
16435         problem that the last fix but in the other sid (Set).
16436
16437         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
16438         access when there is no indexer in the hierarchy.
16439
16440 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
16441
16442         * class.cs: Combine some if statements.
16443
16444 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16445
16446         * driver.cs: fixed bug #37187.
16447
16448 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
16449
16450         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
16451         any indexer, it's needed to build a list with all the indexers in the
16452         hierarchy (AllGetters), else we have problems. Fixes #35653.
16453
16454 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
16455
16456         * class.cs (MethodData.Define): It is wrong for an interface
16457         implementation to be static in both cases: explicit and implicit.
16458         We were only handling this in one case.
16459
16460         Improve the if situation there to not have negations.
16461
16462         * class.cs (Field.Define): Turns out that we do not need to check
16463         the unsafe bit on field definition, only on usage.  Remove the test.
16464
16465 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16466
16467         * driver.cs: use assembly.Location instead of Codebase (the latest
16468         patch made mcs fail when using MS assemblies).
16469
16470 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
16471
16472         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
16473         get the path to *corlib.dll.
16474
16475 2003-01-21  Nick Drochak <ndrochak@gol.com>
16476
16477         * cs-tokenizer.cs:
16478         * pending.cs:
16479         * typemanager.cs: Remove compiler warnings
16480
16481 2003-01-20  Duncan Mak  <duncan@ximian.com>
16482
16483         * AssemblyInfo.cs: Bump the version number to 0.19.
16484
16485 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16486
16487         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
16488
16489 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
16490
16491         * class.cs (Constructor::Emit): Emit debugging info for constructors.
16492
16493 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
16494
16495         * cs-parser.jay: Small fix: we were not comparing the constructor
16496         name correctly.   Thanks to Zoltan for the initial pointer.
16497
16498 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
16499
16500         * cs-tokenizer.cs: Set file name when specified with #line
16501
16502 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
16503
16504         * cs-parser.jay: Only perform the constructor checks here if we
16505         are named like the class;  This will help provider a better
16506         error.  The constructor path is taken when a type definition is
16507         not found, but most likely the user forgot to add the type, so
16508         report that rather than the constructor error.
16509
16510 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
16511
16512         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
16513         allocations.
16514
16515 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
16516
16517         * cs-parser.jay: Add cleanup call.
16518
16519 2003-01-13  Duncan Mak  <duncan@ximian.com>
16520
16521         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
16522         consistent with other methods.
16523
16524 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
16525
16526         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
16527
16528 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
16529
16530         * attribute.cs: only set GuidAttr to true when we have a
16531         GuidAttribute.
16532
16533 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16534
16535         * ecore.cs:
16536         * expression.cs:
16537         * typemanager.cs: fixes to allow mcs compile corlib with the new
16538         Type.IsSubclassOf fix.
16539
16540 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
16541
16542         * expression.cs (LocalVariableReference.DoResolve): Classify a
16543         constant as a value, not as a variable.   Also, set the type for
16544         the variable.
16545
16546         * cs-parser.jay (fixed_statement): take a type instead of a
16547         pointer_type, so we can produce a better error message later.
16548
16549         * statement.cs (Fixed.Resolve): Flag types that are not pointers
16550         as an error.  
16551
16552         (For.DoEmit): Make inifinite loops have a
16553         non-conditional branch back.
16554
16555         (Fixed.DoEmit): First populate the pinned variables, then emit the
16556         statement, then clear the variables.  Before I was emitting the
16557         code once for each fixed piece.
16558
16559
16560 2003-01-08  Martin Baulig  <martin@ximian.com>
16561
16562         * statement.cs (FlowBranching.MergeChild): A break in a
16563         SWITCH_SECTION does not leave a loop.  Fixes #36155.
16564
16565 2003-01-08  Martin Baulig  <martin@ximian.com>
16566
16567         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
16568         lives in the same number space than `param_map'.  Fixes #36154.
16569
16570 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
16571
16572         * cs-parser.jay (constructor_declaration): Set the
16573         Constructor.ModFlags before probing for it.  This makes the
16574         compiler report 514, 515 and 132 (the code was there, but got
16575         broken). 
16576
16577         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
16578         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
16579         (GotoCase.Resolve): Set `Returns' to ALWAYS.
16580
16581 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
16582
16583         * enum.cs: create the enum static fields using the enum type.
16584
16585 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
16586
16587         * class.cs: don't try to create the ParamBuilder for the return
16588         type if it's not needed (and handle it breaking for the ms runtime
16589         anyway).
16590
16591 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
16592
16593         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
16594
16595 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
16596
16597         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
16598         the command.   This showed up while compiling the JANET source
16599         code, which used \r as its only newline separator.
16600
16601 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
16602
16603         * class.cs (Method.Define): If we are an operator (because it
16604         reuses our code), then set the SpecialName and HideBySig.  #36128
16605
16606 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
16607
16608         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
16609         exception, report error 120 `object reference required'.
16610
16611         * driver.cs: Add --pause option, used during to measure the size
16612         of the process as it goes with --timestamp.
16613
16614         * expression.cs (Invocation.DoResolve): Do not allow methods with
16615         SpecialName to be invoked.
16616
16617 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
16618
16619         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
16620         number before adding it.
16621
16622 2002-12-21  Ravi Pratap  <ravi@ximian.com>
16623
16624         * ecore.cs (StandardImplicitConversion): When in an unsafe
16625         context, we allow conversion between void * to any other pointer
16626         type. This fixes bug #35973.
16627
16628 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
16629
16630         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
16631         is not thrown when extensionless outputs are used 
16632
16633 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16634
16635         * rootcontext.cs: fixed compilation of corlib.
16636
16637 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
16638
16639         * attribute.cs (Attributes.Contains): Add new method.
16640
16641         * class.cs (MethodCore.LabelParameters): if the parameter is an
16642         `out' parameter, check that no attribute `[In]' has been passed.
16643
16644         * enum.cs: Handle the `value__' name in an enumeration.
16645
16646 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
16647
16648         * decl.cs: Added special case to allow overrides on "protected
16649         internal" methods
16650
16651 2002-12-18  Ravi Pratap  <ravi@ximian.com>
16652
16653         * attribute.cs (Attributes.AddAttributeSection): Rename to this
16654         since it makes much more sense.
16655
16656         (Attributes.ctor): Don't require a Location parameter.
16657
16658         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
16659
16660         * attribute.cs (ApplyAttributes): Remove extra Location parameters
16661         since we already have that information per attribute.
16662
16663         * everywhere : make appropriate changes.
16664
16665         * class.cs (LabelParameters): Write the code which actually
16666         applies attributes to the return type. We can't do this on the MS
16667         .NET runtime so we flag a warning in the case an exception is
16668         thrown.
16669
16670 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
16671
16672         * const.cs: Handle implicit null conversions here too.
16673
16674 2002-12-17  Ravi Pratap  <ravi@ximian.com>
16675
16676         * class.cs (MethodCore.LabelParameters): Remove the extra
16677         Type [] parameter since it is completely unnecessary. Instead
16678         pass in the method's attributes so that we can extract
16679         the "return" attribute.
16680
16681 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
16682
16683         * cs-parser.jay (parse): Use Report.Error to flag errors instead
16684         of ignoring it and letting the compile continue.
16685
16686         * typemanager.cs (ChangeType): use an extra argument to return an
16687         error condition instead of throwing an exception.
16688
16689 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
16690
16691         * expression.cs (Unary.TryReduce): mimic the code for the regular
16692         code path.  Perform an implicit cast in the cases where we can
16693         implicitly convert to one of the integral types, and then reduce
16694         based on that constant.   This fixes bug #35483.
16695
16696 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16697
16698         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
16699
16700 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16701
16702         * namespace.cs: fixed bug #35489.
16703
16704 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
16705
16706         * class.cs: Remove some dead code.
16707
16708         * cs-parser.jay: Estimate the number of methods needed
16709         (RootContext.MethodCount);
16710
16711         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
16712         numbers instead of StringBuilders.
16713
16714         * support.cs (PtrHashtable): Add constructor with initial size;
16715         We can now reduce reallocations of the method table.
16716
16717 2002-12-10  Ravi Pratap  <ravi@ximian.com>
16718
16719         * attribute.cs (ApplyAttributes): Keep track of the emitted
16720         attributes on a per-target basis. This fixes bug #35413.
16721
16722 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
16723
16724         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
16725         default to the Windows 1252 encoding.
16726
16727         (UnixParseOption): Support version, thanks to Alp for the missing
16728         pointer. 
16729
16730         * AssemblyInfo.cs: Add nice assembly information.
16731
16732         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
16733         (bug 35169).
16734
16735         * cs-parser.jay: Allow a trailing comma before the close bracked
16736         in the attribute_section production.
16737
16738         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
16739         address of the instance was being taken, I will take this out,
16740         because we take the address of the object immediately here.
16741
16742 2002-12-09  Ravi Pratap  <ravi@ximian.com>
16743
16744         * typemanager.cs (AreMultipleAllowed): Take care of the most
16745         obvious case where attribute type is not in the current assembly -
16746         stupid me ;-)
16747
16748 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
16749
16750         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
16751         definitions, instead of doing that afterwards.  
16752
16753         Also we use a nice little hack, depending on the constructor, we
16754         know if we are a "composed" name or a simple name.  Hence, we
16755         avoid the IndexOf test, and we avoid 
16756
16757         * codegen.cs: Add code to assist in a bug reporter to track down
16758         the source of a compiler crash. 
16759
16760 2002-12-07  Ravi Pratap  <ravi@ximian.com>
16761
16762         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
16763         types have been emitted for a given element and flag an error
16764         if something which does not have AllowMultiple set is used more
16765         than once.
16766
16767         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
16768         attribute types and their corresponding AllowMultiple properties
16769
16770         (AreMultipleAllowed): Check the property for a given type.
16771
16772         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
16773         property in the case we have a TypeContainer.
16774
16775         (Attributes.AddAttribute): Detect duplicates and just skip on
16776         adding them. This trivial fix catches a pretty gross error in our
16777         attribute emission - global attributes were being emitted twice!
16778
16779         Bugzilla bug #33187 is now fixed.
16780
16781 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
16782
16783         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
16784         instead of pp_and).
16785
16786         * expression.cs (Binary.ResolveOperator): I can only use the
16787         Concat (string, string, string) and Concat (string, string,
16788         string, string) if the child is actually a concatenation of
16789         strings. 
16790
16791 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
16792
16793         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
16794         context where we need a 2-character lookahead.
16795
16796         * pending.cs (PendingImplementation): Rework so we can keep track
16797         of interface types all the time, and flag those which were
16798         implemented by parents as optional.
16799
16800 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
16801
16802         * expression.cs (Binary.ResolveOperator): Use
16803         String.Concat(string,string,string) or
16804         String.Concat(string,string,string,string) when possible. 
16805
16806         * typemanager: More helper methods.
16807
16808
16809 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
16810
16811         * pending.cs: remove the bogus return from GetMissingInterfaces()
16812         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
16813
16814 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16815
16816         * namespace.cs: avoid duplicated 'using xxx' being added to
16817         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
16818         when we get more than one 'using' statement for the same namespace.
16819         Report a CS0105 warning for it.
16820
16821 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
16822
16823         * cs-tokenizer.cs (consume_identifier): use read directly, instead
16824         of calling getChar/putback, uses internal knowledge of it.    
16825
16826         (xtoken): Reorder tokenizer so most common patterns are checked
16827         first.  This reduces the compilation time in another 5% (from 8.11s
16828         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
16829
16830         The parsing time is 22% of the compilation in mcs, and from that
16831         64% is spent on the tokenization process.  
16832
16833         I tried using a binary search for keywords, but this is slower
16834         than the hashtable.  Another option would be to do a couple of
16835         things:
16836
16837                 * Not use a StringBuilder, instead use an array of chars,
16838                   with a set value.  Notice that this way we could catch
16839                   the 645 error without having to do it *afterwards*.
16840
16841                 * We could write a hand-parser to avoid the hashtable
16842                   compares altogether.
16843
16844         The identifier consumption process takes 37% of the tokenization
16845         time.  Another 15% is spent on is_number.  56% of the time spent
16846         on is_number is spent on Int64.Parse:
16847
16848                 * We could probably choose based on the string length to
16849                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
16850                   computations. 
16851
16852         Another 3% is spend on wrapping `xtoken' in the `token' function.
16853
16854         Handle 0xa0 as whitespace (#34752)
16855
16856 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
16857
16858         * typemanager.cs (IsCLRType): New routine to tell whether a type
16859         is one of the builtin types.  
16860
16861         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
16862         typecode in more places instead of doing pointer comparissions.
16863         We could leverage some knowledge about the way the typecodes are
16864         laid out.
16865
16866         New code to cache namespaces in assemblies, it is currently not
16867         invoked, to be used soon.
16868
16869         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
16870
16871         * expression.cs (Binary.ResolveOperator): specially handle
16872         strings, and do not perform user-defined operator overloading for
16873         built-in types.
16874
16875 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
16876
16877         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
16878         internalcall as it is a pretty simple operation;  Avoid whenever
16879         possible to call Char.IsLetter.
16880
16881         (consume_identifier): Cut by half the number of
16882         hashtable calls by merging the is_keyword and GetKeyword behavior.
16883
16884         Do not short-circuit, because if we do, we
16885         report errors (ie, #if false && true would produce an invalid
16886         directive error);
16887
16888
16889 2002-11-24  Martin Baulig  <martin@ximian.com>
16890
16891         * expression.cs (Cast.TryReduce): If we're in checked syntax,
16892         check constant ranges and report a CS0221.  Fixes #33186.
16893
16894 2002-11-24  Martin Baulig  <martin@ximian.com>
16895
16896         * cs-parser.jay: Make this work for uninitialized variable
16897         declarations in the `for' initializer.  Fixes #32416.
16898
16899 2002-11-24  Martin Baulig  <martin@ximian.com>
16900
16901         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
16902         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
16903
16904 2002-11-24  Martin Baulig  <martin@ximian.com>
16905
16906         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
16907         argument; if true, we also check for user-defined conversions.
16908         This is only needed if both arguments are of a user-defined type.
16909         Fixes #30443, added test-175.cs.
16910         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
16911
16912         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
16913
16914 2002-11-24  Martin Baulig  <martin@ximian.com>
16915
16916         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
16917         function to get the store opcode.
16918         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
16919         only emit the Ldelema if the store opcode is Stobj.  You must run
16920         both test-34 and test-167 to test this.  Fixes #34529.
16921
16922 2002-11-23  Martin Baulig  <martin@ximian.com>
16923
16924         * ecore.cs (Expression.MemberLookup): Added additional
16925         `qualifier_type' argument which is used when we're being called
16926         from MemberAccess.DoResolve() and null if we're called from a
16927         SimpleName lookup.
16928         (Expression.MemberLookupFailed): New method to report errors; this
16929         does the CS1540 check and reports the correct error message.
16930
16931         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
16932         argument for the CS1540 check and redone the way how we're dealing
16933         with private members.  See the comment in the source code for details.
16934         (FilterWithClosure): Reverted this back to revision 1.197; renamed
16935         `closure_start_type' to `closure_qualifier_type' and check whether
16936         it's not null.  It was not this filter being broken, it was just
16937         being called with the wrong arguments.
16938
16939         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
16940         and pass it the correct `qualifier_type'; this also does the error
16941         handling for us.
16942
16943 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
16944
16945         * expression.cs (Invocation.EmitParams): If the we are dealing
16946         with a non-built-in value type, load its address as well.
16947
16948         (ArrayCreation): Use a a pretty constant instead
16949         of the hardcoded value 2.   Use 6 instead of 2 for the number of
16950         static initializers.  
16951
16952         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
16953         because they are not really value types, just glorified integers. 
16954
16955         * driver.cs: Do not append .exe, the CSC compiler does not do it.
16956
16957         * ecore.cs: Remove redundant code for enumerations, make them use
16958         the same code path as everything else, fixes the casting issue
16959         with enumerations in Windows.Forms.
16960
16961         * attribute.cs: Do only cast to string if it is a string, the
16962         validation happens later.
16963
16964         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
16965         people upgrade their corlibs.
16966
16967         * ecore.cs: Oops, enumerations were not following the entire code path
16968
16969 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
16970
16971         * typemanager.cs (FilterWithClosure): Commented out the test for
16972         1540 in typemanager.cs, as it has problems when accessing
16973         protected methods from a parent class (see test-174.cs). 
16974
16975         * attribute.cs (Attribute.ValidateGuid): new method.
16976         (Attribute.Resolve): Use above.
16977
16978 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
16979
16980         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
16981
16982         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
16983         handling for enumerations, as we only needed the TypeContainer
16984         functionality to begin with (this is required for the fix below to
16985         work for enums that reference constants in a container class for
16986         example). 
16987
16988         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
16989
16990         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
16991         a valid TypeBuilder to perform lookups on.o
16992
16993         * class.cs (InheritableMemberSignatureCompare): Use true in the
16994         call to GetGetMethod and GetSetMethod, because we are comparing
16995         the signature, and we need to get the methods *even* if they are
16996         private. 
16997
16998         (PropertyBase.CheckBase): ditto.
16999
17000         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
17001         GotoCase.Resolve): Use Peel on EmpytCasts.
17002
17003         * ecore.cs (EmptyCast): drop child, add Peel method.
17004
17005 2002-11-17  Martin Baulig  <martin@ximian.com>
17006
17007         * ecore.cs (EmptyCast.Child): New public property.
17008
17009         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
17010         label resolved to an EmptyCast.  Fixes #34162.
17011         (GotoCase.Resolve): Likewise.
17012         (Block.EmitMeta): Likewise.
17013
17014 2002-11-17  Martin Baulig  <martin@ximian.com>
17015
17016         * expression.cs (Invocation.BetterConversion): Prefer int over
17017         uint; short over ushort; long over ulong for integer literals.
17018         Use ImplicitConversionExists instead of StandardConversionExists
17019         since we also need to check for user-defined implicit conversions.
17020         Fixes #34165.  Added test-173.cs.
17021
17022 2002-11-16  Martin Baulig  <martin@ximian.com>
17023
17024         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
17025         with the `true' and `false' literals.  Fixes #33151.
17026
17027 2002-11-16  Martin Baulig  <martin@ximian.com>
17028
17029         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
17030         October 22nd; don't do the cs1540 check for static members.
17031
17032         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
17033         now using our own filter here and doing the cs1540 check again.
17034
17035 2002-11-16  Martin Baulig  <martin@ximian.com>
17036
17037         * support.cs (InternalParameters): Don't crash if we don't have
17038         any fixed parameters.  Fixes #33532.
17039
17040 2002-11-16  Martin Baulig  <martin@ximian.com>
17041
17042         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
17043         when looking up static methods to make this work on Windows.
17044         Fixes #33773.
17045
17046 2002-11-16  Martin Baulig  <martin@ximian.com>
17047
17048         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
17049         a setter rather than using PropertyInfo.CanWrite.
17050
17051 2002-11-15  Nick Drochak  <ndrochak@gol.com>
17052
17053         * class.cs: Allow acces to block member by subclasses. Fixes build
17054         breaker.
17055
17056 2002-11-14  Martin Baulig  <martin@ximian.com>
17057
17058         * class.cs (Constructor.Emit): Added the extern/block check.
17059         Fixes bug #33678.
17060
17061 2002-11-14  Martin Baulig  <martin@ximian.com>
17062
17063         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
17064         iteration while looking for indexers, this is needed because the
17065         indexer may have a different name in our base classes.  Fixed the
17066         error reporting (no indexers at all, not get accessor, no
17067         overloaded match).  Fixes bug #33089.
17068         (IndexerAccess.DoResolveLValue): Likewise.
17069
17070 2002-11-14  Martin Baulig  <martin@ximian.com>
17071
17072         * class.cs (PropertyBase.CheckBase): Make this work for multiple
17073         indexers.  Fixes the first part of bug #33089.
17074         (MethodSignature.InheritableMemberSignatureCompare): Added support
17075         for properties.
17076
17077 2002-11-13  Ravi Pratap  <ravi@ximian.com>
17078
17079         * attribute.cs (Attribute.Resolve): Catch the
17080         NullReferenceException and report it since it isn't supposed to
17081         happen. 
17082
17083 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
17084
17085         * expression.cs (Binary.EmitBranchable): Also handle the cases for
17086         LogicalOr and LogicalAnd that can benefit from recursively
17087         handling EmitBranchable.  The code now should be nice for Paolo.
17088
17089 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
17090
17091         * typemanager.cs (LookupType): Added a negative-hit hashtable for
17092         the Type lookups, as we perform quite a number of lookups on
17093         non-Types.  This can be removed once we can deterministically tell
17094         whether we have a type or a namespace in advance.
17095
17096         But this might require special hacks from our corlib.
17097
17098         * TODO: updated.
17099
17100         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
17101         and double which avoids a conversion from an integer to a double.
17102
17103         * expression.cs: tiny optimization, avoid calling IsConstant,
17104         because it effectively performs the lookup twice.
17105
17106 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
17107
17108         But a bogus return here to keep the semantics of the old code
17109         until the Mono runtime is fixed.
17110
17111         * pending.cs (GetMissingInterfaces): New method used to remove all
17112         the interfaces that are already implemented by our parent
17113         classes from the list of pending methods. 
17114
17115         * interface.cs: Add checks for calls after ResolveTypeExpr.
17116
17117 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
17118
17119         * class.cs (Class.Emit): Report warning 67: event not used if the
17120         warning level is beyond 3.
17121
17122         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
17123         being a NullLiteral.
17124
17125         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
17126         specifiers. 
17127
17128         * class.cs (TypeContainer.GetClassBases): Cover a missing code
17129         path that might fail if a type can not be resolved.
17130
17131         * expression.cs (Binary.Emit): Emit unsigned versions of the
17132         operators. 
17133
17134         * driver.cs: use error 5.
17135
17136 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
17137
17138         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
17139
17140 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
17141
17142         * cs-parser.jay (switch_section): A beautiful patch from Martin
17143         Baulig that fixed 33094.
17144
17145 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
17146
17147         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
17148         Check whether the base is abstract and report an error if so.
17149
17150         * expression.cs (IndexerAccess.DoResolveLValue,
17151         IndexerAccess.DoResolve): ditto. 
17152
17153         (Invocation.DoResolve): ditto.
17154
17155         (Invocation.FullMethodDesc): Improve the report string.
17156
17157         * statement.cs (Block): Eliminate IsVariableDefined as it is
17158         basically just a wrapper for GetVariableInfo.
17159
17160         * ecore.cs (SimpleName): Use new 
17161
17162         * support.cs (ReflectionParamter.ParameterType): We unwrap the
17163         type, as we return the actual parameter ref/unref state on a
17164         different call.
17165
17166 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
17167
17168         * support.cs: Return proper flags REF/OUT fixing the previous
17169         commit.  
17170
17171         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
17172         not used to mean `ref' but `ref or out' in ParameterReference
17173
17174         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
17175         full type signature instead of calling TypeManger.CSharpName
17176         ourselves. 
17177
17178         * support.cs (InternalParameters.ParameterDesc): Do not compare
17179         directly to the modflags, because REF/OUT will actually be bitsets
17180         if set. 
17181
17182         * delegate.cs (VerifyMethod): Check also the modifiers.
17183
17184         * cs-tokenizer.cs: Fix bug where floating point values with an
17185         exponent where a sign was missing was ignored.
17186
17187         * driver.cs: Allow multiple assemblies to be specified in a single
17188         /r: argument
17189
17190 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
17191
17192         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
17193         because identifiers after a parenthesis would end up in this kind
17194         of production, and we needed to desamiguate it for having casts
17195         like:
17196
17197                 (UserDefinedType *) xxx
17198
17199 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
17200
17201         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
17202         we should set on the Bindingflags.NonPublic, but not turn on
17203         private_ok.  private_ok controls whether a Private member is
17204         returned (this is chekced on the filter routine), while the
17205         BindingFlags.NonPublic just controls whether private/protected
17206         will be allowed.   This fixes the problem part of the problem of
17207         private properties being allowed to be used in derived classes.
17208
17209         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
17210         so we can call the children DoResolveLValue method (this will
17211         properly signal errors on lvalue assignments to base properties)
17212
17213         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
17214         getter are null, and we have a property info, we know that this
17215         happened because the lookup failed, so we report an error 122 for
17216         protection level violation.
17217
17218         We also silently return if setter and getter are null in the
17219         resolve functions, this condition only happens if we have flagged
17220         the error before.  This is the other half of the problem. 
17221
17222         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
17223         not have accessibility information, that is why we were returning
17224         true in the filter function in typemanager.cs.
17225
17226         To properly report 122 (property is inaccessible because of its
17227         protection level) correctly, we report this error in ResolveAccess
17228         by failing if both the setter and the getter are lacking (ie, the
17229         lookup failed). 
17230
17231         DoResolve and DoLResolve have been modified to check for both
17232         setter/getter being null and returning silently, the reason being
17233         that I did not want to put the knowledge about this error in upper
17234         layers, like:
17235
17236         int old = Report.Errors;
17237         x = new PropertyExpr (...);
17238         if (old != Report.Errors)
17239                 return null;
17240         else
17241                 return x;
17242
17243         So the property expr is returned, but it is invalid, so the error
17244         will be flagged during the resolve process. 
17245
17246         * class.cs: Remove InheritablePropertySignatureCompare from the
17247         class, as we no longer depend on the property signature to compute
17248         whether it is possible to implement a method or not.
17249
17250         The reason is that calling PropertyInfo.GetGetMethod will return
17251         null (in .NET, in Mono it works, and we should change this), in
17252         cases where the Get Method does not exist in that particular
17253         class.
17254
17255         So this code:
17256
17257         class X { public virtual int A { get { return 1; } } }
17258         class Y : X { }
17259         class Z : Y { public override int A { get { return 2; } } }
17260
17261         Would fail in Z because the parent (Y) would not have the property
17262         defined.  So we avoid this completely now (because the alternative
17263         fix was ugly and slow), and we now depend exclusively on the
17264         method names.
17265
17266         (PropertyBase.CheckBase): Use a method-base mechanism to find our
17267         reference method, instead of using the property.
17268
17269         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
17270         routines are gone now.
17271
17272         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
17273         names, they were incorrectly named.
17274
17275         * cs-tokenizer.cs: Return are more gentle token on failure. 
17276
17277         * pending.cs (PendingImplementation.InterfaceMethod): This routine
17278         had an out-of-sync index variable, which caused it to remove from
17279         the list of pending methods the wrong method sometimes.
17280
17281 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
17282
17283         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
17284         CanWrite, because those refer to this particular instance of the
17285         property, and do not take into account the fact that we can
17286         override single members of a property.
17287
17288         Constructor requires an EmitContext.  The resolution process does
17289         not happen here, but we need to compute the accessors before,
17290         because the resolution does not always happen for properties.
17291
17292         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
17293         subclass, before we did not update this flag, but we did update
17294         bindingflags. 
17295
17296         (GetAccessors): Drop this routine, as it did not work in the
17297         presence of partially overwritten set/get methods. 
17298
17299         Notice that this broke the cs1540 detection, but that will require
17300         more thinking. 
17301
17302 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17303
17304         * class.cs:
17305         * codegen.cs:
17306         * driver.cs: issue a warning instead of an error if we don't support
17307         debugging for the platform. Also ignore a couple of errors that may
17308         arise when trying to write the symbols. Undo my previous patch.
17309
17310 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17311
17312         * driver.cs: ignore /debug switch except for Unix platforms.
17313
17314 2002-10-23  Nick Drochak  <ndrochak@gol.com>
17315
17316         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
17317
17318 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
17319
17320         * driver.cs: Do not make mcs-debug conditional, so we do not break
17321         builds that use it.
17322
17323         * statement.cs (UsageVector.MergeChildren): I would like Martin to
17324         review this patch.  But basically after all the children variables
17325         have been merged, the value of "Breaks" was not being set to
17326         new_breaks for Switch blocks.  I think that it should be set after
17327         it has executed.  Currently I set this to the value of new_breaks,
17328         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
17329         conservative, but I do not understand this code very well.
17330
17331         I did not break anything in the build, so that is good ;-)
17332
17333         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
17334
17335 2002-10-20  Mark Crichton  <crichton@gimp.org>
17336
17337         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
17338
17339 2002-10-20  Nick Drochak  <ndrochak@gol.com>
17340
17341         * cfold.cs: Fixed compile blocker.
17342
17343 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
17344
17345         * driver.cs: I was chekcing the key, not the file.
17346
17347 2002-10-19  Ravi Pratap  <ravi@ximian.com>
17348
17349         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
17350         message that we were generating - we just need to silently return
17351         a null.
17352
17353 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
17354
17355         * class.cs (Event.Define): Change my previous commit, as this
17356         breaks the debugger.  This is a temporary hack, as it seems like
17357         the compiler is generating events incorrectly to begin with.
17358
17359         * expression.cs (Binary.ResolveOperator): Added support for 
17360         "U operator - (E x, E y)"
17361
17362         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
17363         y)".
17364
17365         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
17366         init-only variables, but this path did not take into account that
17367         there might be also instance readonly variables.  Correct this
17368         problem. 
17369
17370         This fixes bug 32253
17371
17372         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
17373         delegates as well.
17374
17375         * driver.cs: Change the extension for modules to `netmodule'
17376
17377         * cs-parser.jay: Improved slightly the location tracking for
17378         the debugger symbols.
17379
17380         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
17381         modifiers that were specified instead of the hardcoded value
17382         (FamAndAssem).  This was basically ignoring the static modifier,
17383         and others.  Fixes 32429.
17384
17385         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
17386         fixed a bug in the process (32476)
17387
17388         * expression.cs (ArrayAccess.EmitAssign): Patch from
17389         hwang_rob@yahoo.ca that fixes bug 31834.3
17390
17391 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
17392
17393         * driver.cs: Make the module extension .netmodule.
17394
17395 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
17396
17397         * driver.cs: Report an error if the resource file is not found
17398         instead of crashing.
17399
17400         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
17401         false, like Emit does.
17402
17403 2002-10-16  Nick Drochak  <ndrochak@gol.com>
17404
17405         * typemanager.cs: Remove unused private member.  Also reported mcs
17406         bug to report this as a warning like csc.
17407
17408 2002-10-15  Martin Baulig  <martin@gnome.org>
17409
17410         * statement.cs (Statement.Emit): Made this a virtual method; emits
17411         the line number info and calls DoEmit().
17412         (Statement.DoEmit): New protected abstract method, formerly knows
17413         as Statement.Emit().
17414
17415         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
17416
17417 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
17418
17419         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
17420         have fixed a remaining problem: not every AddXXXX was adding a
17421         fully qualified name.  
17422
17423         Now everyone registers a fully qualified name in the DeclSpace as
17424         being defined instead of the partial name.  
17425
17426         Downsides: we are slower than we need to be due to the excess
17427         copies and the names being registered this way.  
17428
17429         The reason for this is that we currently depend (on the corlib
17430         bootstrap for instance) that types are fully qualified, because
17431         we dump all the types in the namespace, and we should really have
17432         types inserted into the proper namespace, so we can only store the
17433         basenames in the defined_names array.
17434
17435 2002-10-10  Martin Baulig  <martin@gnome.org>
17436
17437         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
17438         from bug #31834, see the bug report for a testcase which is
17439         miscompiled.
17440
17441 2002-10-10  Martin Baulig  <martin@gnome.org>
17442
17443         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
17444         flow analysis code for this.
17445
17446         * statement.cs (Do, While, For): Tell the flow analysis code about
17447         infinite loops.
17448         (FlowBranching.UsageVector): Added support for infinite loops.
17449         (Block.Resolve): Moved the dead code elimination here and use flow
17450         analysis to do it.
17451
17452 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
17453
17454         * class.cs (Field.Define): Catch cycles on struct type
17455         definitions. 
17456
17457         * typemanager.cs (IsUnmanagedtype): Do not recursively check
17458         fields if the fields are static.  We only need to check instance
17459         fields. 
17460
17461         * expression.cs (As.DoResolve): Test for reference type.
17462
17463         * statement.cs (Using.ResolveExpression): Use
17464         ConvertImplicitRequired, not ConvertImplicit which reports an
17465         error on failture
17466         (Using.ResolveLocalVariableDecls): ditto.
17467
17468         * expression.cs (Binary.ResolveOperator): Report errors in a few
17469         places where we had to.
17470
17471         * typemanager.cs (IsUnmanagedtype): Finish implementation.
17472
17473 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
17474
17475         * expression.cs: Use StoreFromPtr instead of extracting the type
17476         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
17477
17478         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
17479         an enumeration value to a System.Enum, but System.Enum is not a
17480         value type, but an class type, so we need to box.
17481
17482         (Expression.ConvertExplicit): One codepath could return
17483         errors but not flag them.  Fix this.  Fixes #31853
17484
17485         * parameter.cs (Resolve): Do not allow void as a parameter type.
17486
17487 2002-10-06  Martin Baulig  <martin@gnome.org>
17488
17489         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
17490         if it's a class type and not a struct.  Fixes #31815.
17491
17492 2002-10-06  Martin Baulig  <martin@gnome.org>
17493
17494         * statement.cs: Reworked the flow analysis code a bit to make it
17495         usable for dead code elimination.
17496
17497 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17498
17499         * cs-parser.jay: allow empty source files. Fixes bug #31781.
17500
17501 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
17502
17503         * expression.cs (ComposedCast.DoResolveType): A quick workaround
17504         to fix the test 165, will investigate deeper.
17505
17506 2002-10-04  Martin Baulig  <martin@gnome.org>
17507
17508         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
17509         finally blocks actually work.
17510         (Try.Resolve): We don't need to create a sibling for `finally' if
17511         there is no finally block.
17512
17513 2002-10-04  Martin Baulig  <martin@gnome.org>
17514
17515         * class.cs (Constructor.Define): The default accessibility for a
17516         non-default constructor is private, not public.
17517
17518 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
17519
17520         * class.cs (Constructor): Make AllowedModifiers public, add
17521         EXTERN.
17522
17523         * cs-parser.jay: Perform the modifiers test here, as the
17524         constructor for the Constructor class usually receives a zero
17525         because of the way we create it (first we create, later we
17526         customize, and we were never checking the modifiers).
17527
17528         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
17529         is a version of LookupTypeReflection that includes the type-name
17530         cache.  This can be used as a fast path for functions that know
17531         the fully qualified name and are only calling into *.GetType() to
17532         obtain a composed type.
17533
17534         This is also used by TypeManager.LookupType during its type
17535         composition.
17536
17537         (LookupType): We now also track the real type name, as sometimes
17538         we can get a quey for the real type name from things like
17539         ComposedCast.  This fixes bug 31422.
17540
17541         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
17542         complete type fullname, it does not have to go through the type
17543         resolution system to obtain the composed version of the type (for
17544         obtaining arrays or pointers).
17545
17546         (Conditional.Emit): Use the EmitBoolExpression to
17547         generate nicer code, as requested by Paolo.
17548
17549         (ArrayCreation.CheckIndices): Use the patch from
17550         hwang_rob@yahoo.ca to validate the array initializers. 
17551
17552 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
17553
17554         * class.cs (ConstructorInitializer.Emit): simplify code by using
17555         Invocation.EmitCall, and at the same time, fix the bugs in calling
17556         parent constructors that took variable arguments. 
17557
17558         * ecore.cs (Expression.ConvertNumericExplicit,
17559         Expression.ImplicitNumericConversion): Remove the code that
17560         manually wrapped decimal (InternalTypeConstructor call is now gone
17561         as well).
17562
17563         * expression.cs (Cast.TryReduce): Also handle decimal types when
17564         trying to perform a constant fold on the type.
17565
17566         * typemanager.cs (IsUnmanagedtype): Partially implemented.
17567
17568         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
17569         that only turned off an error report, and did nothing else. 
17570
17571 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
17572
17573         * driver.cs: Handle and ignore /fullpaths
17574
17575 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
17576
17577         * expression.cs (Binary.ResolveOperator): Catch the case where
17578         DoNumericPromotions returns true, 
17579
17580         (Binary.DoNumericPromotions): Simplify the code, and the tests.
17581
17582 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
17583
17584         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
17585         report error 70.
17586
17587 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
17588
17589         * ecore.cs (ConvertNumericExplicit): It is not enough that the
17590         conversion exists, but it is also required that the conversion be
17591         performed.  This manifested in "(Type64Enum) 2".  
17592
17593         * class.cs (TypeManager.AddMethod): The fix is not to change
17594         AddEnum, because that one was using a fully qualified name (every
17595         DeclSpace derivative does), but to change the AddMethod routine
17596         that was using an un-namespaced name.  This now correctly reports
17597         the duplicated name.
17598
17599         Revert patch until I can properly fix it.  The issue
17600         is that we have a shared Type space across all namespaces
17601         currently, which is wrong.
17602
17603         Options include making the Namespace a DeclSpace, and merge
17604         current_namespace/current_container in the parser.
17605
17606 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
17607
17608         * cs-parser.jay: Improve error reporting when we get a different
17609         kind of expression in local_variable_type and
17610         local_variable_pointer_type. 
17611
17612         Propagate this to avoid missleading errors being reported.
17613
17614         * ecore.cs (ImplicitReferenceConversion): treat
17615         TypeManager.value_type as a target just like object_type.   As
17616         code like this:
17617
17618         ValueType v = 1;
17619
17620         Is valid, and needs to result in the int 1 being boxed before it
17621         is assigned to the value type v.
17622
17623         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
17624         to validate the enumeration name.
17625
17626         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
17627         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
17628         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
17629
17630         * ecore.cs (TryImplicitIntConversion): When doing an
17631         implicit-enumeration-conversion, check if the type is 64-bits and
17632         perform a conversion before passing to EnumConstant.
17633
17634 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
17635
17636         * decl.cs (Error_AmbiguousTypeReference); New routine used to
17637         report ambiguous type references.  Unlike the MS version, we
17638         report what the ambiguity is.   Innovation at work ;-)
17639
17640         (DeclSpace.FindType): Require a location argument to
17641         display when we display an ambiguous error.
17642
17643         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
17644
17645         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
17646
17647         * expression.cs (EmitDynamicInitializers): Apply patch from
17648         hwang_rob@yahoo.ca that fixes the order in which we emit our
17649         initializers. 
17650
17651 2002-09-21  Martin Baulig  <martin@gnome.org>
17652
17653         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
17654         delegate takes no arguments.
17655
17656 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
17657
17658         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
17659         from integers.
17660
17661         * expression.cs: Extract the underlying type.
17662
17663         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
17664
17665         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
17666
17667 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
17668
17669         * class.cs (TypeContainer.DefineType): We can not use the nice
17670         PackingSize with the size set to 1 DefineType method, because it
17671         will not allow us to define the interfaces that the struct
17672         implements.
17673
17674         This completes the fixing of bug 27287
17675
17676         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
17677         means also structs.  This fixes part of the problem. 
17678         (Expresion.ImplicitReferenceConversionExists): ditto.
17679
17680         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
17681         error if there were no errors reported during the type lookup
17682         process, to avoid duplicates or redundant errors.  Without this
17683         you would get an ambiguous errors plus a type not found.  We have
17684         beaten the user enough with the first error.  
17685
17686         (DeclSparce.FindType): Emit a warning if we have an ambiguous
17687         reference. 
17688
17689         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
17690         during the resolution process, stop the lookup, this avoids
17691         repeated error reports (same error twice).
17692
17693         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
17694
17695         * typemanager.cs (LookupType): Redo the type lookup code to match
17696         the needs of System.Reflection.  
17697
17698         The issue is that System.Reflection requires references to nested
17699         types to begin with a "+" sign instead of a dot.  So toplevel
17700         types look like: "NameSpace.TopLevelClass", and nested ones look
17701         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
17702         levels. 
17703
17704 2002-09-19  Martin Baulig  <martin@gnome.org>
17705
17706         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
17707         says that a method always returns or always throws an exception,
17708         don't report the CS0161.
17709
17710         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
17711         set `Returns = new_returns'.
17712
17713 2002-09-19  Martin Baulig  <martin@gnome.org>
17714
17715         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
17716         to an enum constant, check for a CS0176.
17717
17718 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
17719
17720         * class.cs (TypeContainer.CheckPairedOperators): Now we check
17721         for operators that must be in pairs and report errors.
17722
17723         * ecore.cs (SimpleName.DoResolveType): During the initial type
17724         resolution process, when we define types recursively, we must
17725         check first for types in our current scope before we perform
17726         lookups in the enclosing scopes.
17727
17728         * expression.cs (MakeByteBlob): Handle Decimal blobs.
17729
17730         (Invocation.VerifyArgumentsCompat): Call
17731         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
17732         I thought we were supposed to always call this, but there are a
17733         few places in the code where we dont do it.
17734
17735 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
17736
17737         * driver.cs: Add support in -linkres and -resource to specify the
17738         name of the identifier.
17739
17740 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
17741
17742         * ecore.cs (StandardConversionExists): Sync with the conversion
17743         code: allow anything-* to void* conversions.
17744
17745         (FindMostSpecificSource): Use an Expression argument
17746         instead of a Type, because we might be handed over a Literal which
17747         gets a few more implicit conversions that plain types do not.  So
17748         this information was being lost.
17749
17750         Also, we drop the temporary type-holder expression when not
17751         required.
17752
17753 2002-09-17  Martin Baulig  <martin@gnome.org>
17754
17755         * class.cs (PropertyBase.CheckBase): Don't check the base class if
17756         this is an explicit interface implementation.
17757
17758 2002-09-17  Martin Baulig  <martin@gnome.org>
17759
17760         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
17761         different `IndexerName' attributes.
17762
17763         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
17764         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
17765         virtual CommonResolve().
17766
17767 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
17768
17769         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
17770         and convert that to the UnderlyingType.
17771
17772         * statement.cs (Foreach.Resolve): Indexers are just like variables
17773         or PropertyAccesses.
17774
17775         * cs-tokenizer.cs (consume_string): Track line numbers and columns
17776         inside quoted strings, we were not doing this before.
17777
17778 2002-09-16  Martin Baulig  <martin@gnome.org>
17779
17780         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
17781         resolve it.  This is needed for the definite assignment check of the
17782         instance expression, fixes bug #29846.
17783         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
17784
17785 2002-09-16  Nick Drochak  <ndrochak@gol.com>
17786
17787         * parameter.cs: Fix compile error.  Cannot reference static member
17788         from an instance object.  Is this an mcs bug?
17789
17790 2002-09-14  Martin Baulig  <martin@gnome.org>
17791
17792         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
17793         multiple times.  Fixes bug #30295, added test-166.cs.
17794
17795 2002-09-14  Martin Baulig  <martin@gnome.org>
17796
17797         * statement.cs (Block.Emit): Don't emit unreachable code.
17798         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
17799         `break' statements.
17800         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
17801
17802 2002-09-14  Martin Baulig  <martin@gnome.org>
17803
17804         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
17805         is set.
17806
17807 2002-09-14  Martin Baulig  <martin@gnome.org>
17808
17809         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
17810         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
17811         be false on the ms runtime.
17812
17813 2002-09-13  Martin Baulig  <martin@gnome.org>
17814
17815         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
17816         the CS0038 error message.
17817
17818 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
17819
17820         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
17821         constant inside, return it.
17822
17823 2002-09-12  Martin Baulig  <martin@gnome.org>
17824
17825         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
17826         implicit conversion can be done between enum types.
17827
17828         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
17829         check whether an implicit conversion to the current enum's UnderlyingType
17830         exists and report an error if not.
17831
17832         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
17833         without debugging support.
17834
17835         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
17836         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
17837
17838 2002-09-12  Martin Baulig  <martin@gnome.org>
17839
17840         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
17841
17842         * ecore.cs (IMemberExpr.DeclaringType): New property.
17843         (SimpleName.SimpleNameResolve): Check whether we're accessing a
17844         nonstatic member of an outer type (CS0038).
17845
17846 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
17847
17848         * driver.cs: Activate the using-error detector at warning level
17849         4 (at least for MS-compatible APIs).
17850
17851         * namespace.cs (VerifyUsing): Small buglett fix.
17852
17853         * pending.cs (PendingImplementation): pass the container pointer. 
17854
17855         * interface.cs (GetMethods): Allow for recursive definition.  Long
17856         term, I would like to move every type to support recursive
17857         definitions, not the current ordering mechanism that we have right
17858         now.
17859
17860         The situation is this: Attributes are handled before interfaces,
17861         so we can apply attributes to interfaces.  But some attributes
17862         implement interfaces, we will now handle the simple cases
17863         (recursive definitions will just get an error).  
17864
17865         * parameter.cs: Only invalidate types at the end if we fail to
17866         lookup all types.  
17867
17868 2002-09-09  Martin Baulig  <martin@gnome.org>
17869
17870         * ecore.cs (PropertyExpr.Emit): Also check for
17871         TypeManager.system_int_array_get_length so this'll also work when
17872         compiling corlib.  Fixes #30003.
17873
17874 2002-09-09  Martin Baulig  <martin@gnome.org>
17875
17876         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
17877         and throw an exception if we can't get the type's size.  Fixed #30040,
17878         added test-165.cs.
17879
17880 2002-09-09  Martin Baulig  <martin@gnome.org>
17881
17882         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
17883
17884         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
17885         context.  Fixes bug #30027.
17886
17887         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
17888         virtual functions.  Fixes bug #30043, added test-164.cs.
17889
17890 2002-09-08  Ravi Pratap  <ravi@ximian.com>
17891
17892         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
17893
17894 2002-09-08  Nick Drochak  <ndrochak@gol.com>
17895
17896         * driver.cs: Use an object to get the windows codepage since it's not a
17897         static property.
17898
17899 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
17900
17901         * statement.cs (For.Emit): for infinite loops (test == null)
17902         return whether there is a break inside, not always "true".
17903
17904         * namespace.cs (UsingEntry): New struct to hold the name of the
17905         using definition, the location where it is defined, and whether it
17906         has been used in a successful type lookup.
17907
17908         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
17909         strings.
17910
17911         * decl.cs: ditto.
17912
17913 2002-09-06  Ravi Pratap  <ravi@ximian.com>
17914
17915         * attribute.cs : Fix incorrect code which relied on catching
17916         a NullReferenceException to detect a null being passed in
17917         where an object was expected.
17918
17919 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
17920
17921         * statement.cs (Try): flag the catch variable as assigned
17922
17923         * expression.cs (Cast): Simplified by using ResolveType instead of
17924         manually resolving.
17925
17926         * statement.cs (Catch): Fix bug by using ResolveType.
17927
17928 2002-09-06  Ravi Pratap  <ravi@ximian.com>
17929
17930         * expression.cs (BetterConversion): Special case for when we have
17931         a NullLiteral as the argument and we have to choose between string
17932         and object types - we choose string the way csc does.
17933
17934         * attribute.cs (Attribute.Resolve): Catch the
17935         NullReferenceException and report error #182 since the Mono
17936         runtime no more has the bug and having this exception raised means
17937         we tried to select a constructor which takes an object and is
17938         passed a null.
17939
17940 2002-09-05  Ravi Pratap  <ravi@ximian.com>
17941
17942         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
17943         message (1502, 1503) when we can't locate a method after overload
17944         resolution. This is much more informative and closes the bug
17945         Miguel reported.
17946
17947         * interface.cs (PopulateMethod): Return if there are no argument
17948         types. Fixes a NullReferenceException bug.
17949
17950         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
17951         expressions too. Previously we were checking only in one place for
17952         positional arguments leaving out named arguments.
17953
17954         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
17955         type to the enum type is not allowed. Remove code corresponding to
17956         that.
17957
17958         (ConvertNumericExplicit): Allow explicit conversions from
17959         the underlying type to enum type. This precisely follows the spec
17960         and closes a bug filed by Gonzalo.
17961
17962 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17963
17964         * compiler.csproj:
17965         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
17966
17967 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
17968
17969         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
17970         it was important that we stored the right value after the
17971         reduction in `converted'.
17972
17973 2002-09-04  Martin Baulig  <martin@gnome.org>
17974
17975         * location.cs (Location.SymbolDocument): Use full pathnames for the
17976         source files.
17977
17978 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
17979
17980         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
17981         of the expression resolve mechanism, because that will catch the
17982         SimpleName error failures.
17983
17984         (Conditional): If we can not resolve the
17985         expression, return, do not crash.
17986
17987 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17988
17989         * cs-tokenizer.cs:
17990         (location): display token name instead of its number.
17991
17992 2002-08-28  Martin Baulig  <martin@gnome.org>
17993
17994         * expression.cs (Binary.ResolveOperator): Don't silently return
17995         but return an error if an operator cannot be applied between two
17996         enum types.
17997
17998 2002-08-28  Martin Baulig  <martin@gnome.org>
17999
18000         * class.cs (Constructor.Define): Set the permission attributes
18001         correctly instead of making all constructors public.
18002
18003 2002-08-28  Martin Baulig  <martin@gnome.org>
18004
18005         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
18006         for private members before reporting a CS0103; if we find anything,
18007         it's a CS0122.
18008
18009 2002-08-28  Martin Baulig  <martin@gnome.org>
18010
18011         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
18012         to check whether `closure_start_type == closure_invocation_type',
18013         we also need to check whether `m.DeclaringType == closure_invocation_type'
18014         before bypassing the permission checks.  We might be accessing
18015         protected/private members from the base class.
18016         (TypeManager.RealMemberLookup): Only set private_ok if private
18017         members were requested via BindingFlags.NonPublic.
18018
18019         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
18020
18021         * expression.cs (MemberAccess.ResolveMemberAccess): Set
18022         MethodGroupExpr.IsExplicitImpl if appropriate.
18023         (Invocation.DoResolve): Don't report the CS0120 for explicit
18024         interface implementations.
18025
18026 2002-08-27  Martin Baulig  <martin@gnome.org>
18027
18028         * expression.cs (Invocation.DoResolve): If this is a static
18029         method and we don't have an InstanceExpression, we must report
18030         a CS0120.
18031
18032 2002-08-25  Martin Baulig  <martin@gnome.org>
18033
18034         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
18035         `==' between a valuetype and an object.
18036
18037 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
18038
18039         * ecore.cs (TypeExpr): Provide a ToString method.
18040
18041 2002-08-24  Martin Baulig  <martin@gnome.org>
18042
18043         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
18044         now called proggie.dbg and it's a binary file.
18045
18046 2002-08-23  Martin Baulig  <martin@gnome.org>
18047
18048         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
18049
18050 2002-08-23  Martin Baulig  <martin@gnome.org>
18051
18052         * struct.cs (MyStructInfo.ctor): Make this work with empty
18053         structs; it's not allowed to use foreach() on null.
18054
18055 2002-08-23  Martin Baulig  <martin@gnome.org>
18056
18057         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
18058         writer the full pathname of the generated assembly.
18059
18060 2002-08-23  Martin Baulig  <martin@gnome.org>
18061
18062         * statements.cs (FlowBranching.UsageVector.MergeChildren):
18063         A `finally' block never returns or breaks; improved handling of
18064         unreachable code.
18065
18066 2002-08-23  Martin Baulig  <martin@gnome.org>
18067
18068         * statement.cs (Throw.Resolve): Allow `throw null'.
18069
18070 2002-08-23  Martin Baulig  <martin@gnome.org>
18071
18072         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
18073         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
18074         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
18075         MemberLookup would return a wrong event if this is an explicit
18076         interface implementation and the class has an event with the same
18077         name.
18078
18079 2002-08-23  Martin Baulig  <martin@gnome.org>
18080
18081         * statement.cs (Block.AddChildVariableNames): New public method.
18082         (Block.AddChildVariableName): Likewise.
18083         (Block.IsVariableNameUsedInChildBlock): Likewise.
18084         (Block.AddVariable): Check whether a variable name has already
18085         been used in a child block.
18086
18087         * cs-parser.jay (declare_local_variables): Mark all variable names
18088         from the current block as being used in a child block in the
18089         implicit block.
18090
18091 2002-08-23  Martin Baulig  <martin@gnome.org>
18092
18093         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
18094         find the symbol writer.
18095
18096         * driver.cs: csc also allows the arguments to /define being
18097         separated by commas, not only by semicolons.
18098
18099 2002-08-23  Martin Baulig  <martin@gnome.org>
18100
18101         * interface.cs (Interface.GetMembers): Added static check for events.
18102
18103 2002-08-15  Martin Baulig  <martin@gnome.org>
18104
18105         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
18106         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
18107
18108         * ecore.cs (Expression.MemberLookup): Added documentation and explained
18109         why the MethodData.EmitDestructor() change was necessary.
18110
18111 2002-08-20  Martin Baulig  <martin@gnome.org>
18112
18113         * class.cs (TypeContainer.FindMembers): Added static check for events.
18114
18115         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
18116
18117         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
18118         use Type.GetEvents(), not Type.FindMembers().
18119
18120 2002-08-20  Martin Baulig  <martin@gnome.org>
18121
18122         * decl.cs (MemberCache): Added a special method cache which will
18123         be used for method-only searched.  This ensures that a method
18124         search will return a MethodInfo with the correct ReflectedType for
18125         inherited methods.      
18126
18127 2002-08-20  Martin Baulig  <martin@gnome.org>
18128
18129         * decl.cs (DeclSpace.FindMembers): Made this public.
18130
18131 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18132
18133         * delegate.cs: fixed build on windows.
18134         [FIXME:  Filed as bug #29150: MCS must report these errors.]
18135
18136 2002-08-19  Ravi Pratap  <ravi@ximian.com>
18137
18138         * ecore.cs (StandardConversionExists): Return a false
18139         if we are trying to convert the void type to anything else
18140         since that is not allowed.
18141
18142         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
18143         we flag error 70 in the event an event is trying to be accessed
18144         directly from outside the declaring type.
18145
18146 2002-08-20  Martin Baulig  <martin@gnome.org>
18147
18148         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
18149         MemberCache from typemanager.cs to decl.cs.
18150
18151 2002-08-19  Martin Baulig  <martin@gnome.org>
18152
18153         * class.cs (TypeContainer): Implement IMemberContainer.
18154         (TypeContainer.DefineMembers): Create the MemberCache.
18155         (TypeContainer.FindMembers): Do better BindingFlags checking; only
18156         return public members if BindingFlags.Public was given, check
18157         whether members are static.
18158
18159 2002-08-16  Martin Baulig  <martin@gnome.org>
18160
18161         * decl.cs (DeclSpace.Define): Splitted this in Define and
18162         DefineMembers.  DefineMembers is called first and initializes the
18163         MemberCache.
18164
18165         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
18166         DefineMembers() on all our DeclSpaces.
18167
18168         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
18169         but call DefineMembers() on all nested interfaces.  We call their
18170         Define() in our new Define() function.
18171
18172         * interface.cs (Interface): Implement IMemberContainer.
18173         (Interface.Define): Moved all code except the attribute stuf to
18174         DefineMembers().
18175         (Interface.DefineMembers): Initialize the member cache.
18176
18177         * typemanager.cs (IMemberFinder): Removed this interface, we don't
18178         need this anymore since we can use MemberCache.FindMembers directly.
18179
18180 2002-08-19  Martin Baulig  <martin@gnome.org>
18181
18182         * typemanager.cs (MemberCache): When creating the cache for an
18183         interface type, add all inherited members.
18184         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
18185         to `out bool used_cache' and documented it.
18186         (TypeManager.MemberLookup): If we already used the cache in the first
18187         iteration, we don't need to do the interfaces check.
18188
18189 2002-08-19  Martin Baulig  <martin@gnome.org>
18190
18191         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
18192         here from IMemberFinder and don't implement this interface anymore.
18193         (DeclSpace.MemberCache): Moved here from IMemberFinder.
18194
18195         * typemanager.cs (IMemberFinder): This interface is now only used by
18196         classes which actually support the member cache.
18197         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
18198         since we only put DeclSpaces into this Hashtable.
18199         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
18200         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
18201
18202 2002-08-16  Martin Baulig  <martin@gnome.org>
18203
18204         * typemanager.cs (ICachingMemberFinder): Removed.
18205         (IMemberFinder.MemberCache): New property.
18206         (TypeManager.FindMembers): Merged this with RealFindMembers().
18207         This function will never be called from TypeManager.MemberLookup()
18208         so we can't use the cache here, just the IMemberFinder.
18209         (TypeManager.MemberLookup_FindMembers): Check whether the
18210         IMemberFinder has a MemberCache and call the cache's FindMembers
18211         function.
18212         (MemberCache): Rewrote larger parts of this yet another time and
18213         cleaned it up a bit.
18214
18215 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
18216
18217         * driver.cs (LoadArgs): Support quoting.
18218
18219         (Usage): Show the CSC-like command line arguments.
18220
18221         Improved a few error messages.
18222
18223 2002-08-15  Martin Baulig  <martin@gnome.org>
18224
18225         * typemanager.cs (IMemberContainer.Type): New property.
18226         (IMemberContainer.IsInterface): New property.
18227
18228         The following changes are conditional to BROKEN_RUNTIME, which is
18229         defined at the top of the file.
18230
18231         * typemanager.cs (MemberCache.MemberCache): Don't add the base
18232         class'es members, but add all members from TypeHandle.ObjectType
18233         if we're an interface.
18234         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
18235         is the current type.
18236         (MemberCache.CacheEntry.Container): Removed this field.
18237         (TypeHandle.GetMembers): Include inherited members.
18238
18239 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18240
18241         * typemanager.cs: fixed compilation and added a comment on a field that
18242         is never used.
18243
18244 2002-08-15  Martin Baulig  <martin@gnome.org>
18245
18246         * class.cs (ConstructorInitializer.Resolve): In the
18247         Expression.MemberLookup call, use the queried_type as
18248         invocation_type.
18249
18250         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
18251         declared' attribute, it's always true.
18252         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
18253         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
18254         temporary wrapper for FindMembers which tells MemberLookup whether
18255         members from the base classes are included in the return value.
18256         This will go away soon.
18257         (TypeManager.MemberLookup): Use this temporary hack here; once the
18258         new MemberCache is completed, we don't need to do the DeclaredOnly
18259         looping here anymore since the MemberCache will take care of this.
18260         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
18261         (MemberCache): When creating the MemberCache for a class, get
18262         members from the current class and all its base classes.
18263         (MemberCache.CacheEntry.Container): New field.  This is a
18264         temporary hack until the Mono runtime is fixed to distinguish
18265         between ReflectedType and DeclaringType.  It allows us to use MCS
18266         with both the MS runtime and the unfixed Mono runtime without
18267         problems and without accecting performance.
18268         (MemberCache.SearchMembers): The DeclaredOnly looping from
18269         TypeManager.MemberLookup is now done here.      
18270
18271 2002-08-14  Martin Baulig  <martin@gnome.org>
18272
18273         * statement.cs (MyStructInfo.MyStructInfo): Don't call
18274         Type.GetFields on dynamic types but get the fields from the
18275         corresponding TypeContainer.
18276         (MyStructInfo.GetStructInfo): Added check for enum types.
18277
18278         * typemanager.cs (MemberList.IsSynchronized): Implemented.
18279         (MemberList.SyncRoot): Implemented.
18280         (TypeManager.FilterWithClosure): No need to check permissions if
18281         closure_start_type == closure_invocation_type, don't crash if
18282         closure_invocation_type is null.
18283
18284 2002-08-13  Martin Baulig  <martin@gnome.org>
18285
18286         Rewrote TypeContainer.FindMembers to use a member cache.  This
18287         gives us a speed increase of about 35% for the self-hosting MCS
18288         build and of about 15-20% for the class libs (both on GNU/Linux).
18289
18290         * report.cs (Timer): New class to get enhanced profiling.  This
18291         whole class is "TIMER" conditional since it remarkably slows down
18292         compilation speed.
18293
18294         * class.cs (MemberList): New class.  This is an IList wrapper
18295         which we're now using instead of passing MemberInfo[]'s around to
18296         avoid copying this array unnecessarily.
18297         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
18298         (ICachingMemberFinder, IMemberContainer): New interface.
18299         (TypeManager.FilterWithClosure): If `criteria' is null, the name
18300         has already been checked, otherwise use it for the name comparision.
18301         (TypeManager.FindMembers): Renamed to RealMemberFinder and
18302         provided wrapper which tries to use ICachingMemberFinder.FindMembers
18303         if possible.  Returns a MemberList, not a MemberInfo [].
18304         (TypeHandle): New class, implements IMemberContainer.  We create
18305         one instance of this class per type, it contains a MemberCache
18306         which is used to do the member lookups.
18307         (MemberCache): New class.  Each instance of this class contains
18308         all members of a type and a name-based hash table.
18309         (MemberCache.FindMembers): This is our new member lookup
18310         function.  First, it looks up all members of the requested name in
18311         the hash table.  Then, it walks this list and sorts out all
18312         applicable members and returns them.
18313
18314 2002-08-13  Martin Baulig  <martin@gnome.org>
18315
18316         In addition to a nice code cleanup, this gives us a performance
18317         increase of about 1.4% on GNU/Linux - not much, but it's already
18318         half a second for the self-hosting MCS compilation.
18319
18320         * typemanager.cs (IMemberFinder): New interface.  It is used by
18321         TypeManager.FindMembers to call FindMembers on a TypeContainer,
18322         Enum, Delegate or Interface.
18323         (TypeManager.finder_to_member_finder): New PtrHashtable.
18324         (TypeManager.finder_to_container): Removed.
18325         (TypeManager.finder_to_delegate): Removed.
18326         (TypeManager.finder_to_interface): Removed.
18327         (TypeManager.finder_to_enum): Removed.
18328
18329         * interface.cs (Interface): Implement IMemberFinder.
18330
18331         * delegate.cs (Delegate): Implement IMemberFinder.
18332
18333         * enum.cs (Enum): Implement IMemberFinder.
18334
18335         * class.cs (TypeContainer): Implement IMemberFinder.
18336
18337 2002-08-12  Martin Baulig  <martin@gnome.org>
18338
18339         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
18340
18341 2002-08-12  Martin Baulig  <martin@gnome.org>
18342
18343         * ecore.cs (ITypeExpression): New interface for expressions which
18344         resolve to a type.
18345         (TypeExpression): Renamed to TypeLookupExpression.
18346         (Expression.DoResolve): If we're doing a types-only lookup, the
18347         expression must implement the ITypeExpression interface and we
18348         call DoResolveType() on it.
18349         (SimpleName): Implement the new ITypeExpression interface.
18350         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
18351         hack, the situation that we're only looking up types can't happen
18352         anymore when this method is called.  Moved the type lookup code to
18353         DoResolveType() and call it.
18354         (SimpleName.DoResolveType): This ITypeExpression interface method
18355         is now doing the types-only lookup.
18356         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
18357         (ResolveFlags): Added MaskExprClass.
18358
18359         * expression.cs (MemberAccess): Implement the ITypeExpression
18360         interface.
18361         (MemberAccess.DoResolve): Added support for a types-only lookup
18362         when we're called via ITypeExpression.DoResolveType().
18363         (ComposedCast): Implement the ITypeExpression interface.
18364
18365         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
18366         Expression.Resolve() with ResolveFlags.Type instead.
18367
18368 2002-08-12  Martin Baulig  <martin@gnome.org>
18369
18370         * interface.cs (Interface.Define): Apply attributes.
18371
18372         * attribute.cs (Attribute.ApplyAttributes): Added support for
18373         interface attributes.
18374
18375 2002-08-11  Martin Baulig  <martin@gnome.org>
18376
18377         * statement.cs (Block.Emit): Only check the "this" variable if we
18378         do not always throw an exception.
18379
18380         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
18381         whether the property has a set accessor.
18382
18383 2002-08-11  Martin Baulig  <martin@gnome.org>
18384
18385         Added control flow analysis support for structs.
18386
18387         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
18388         with control flow analysis turned off.
18389         (IVariable): New interface.
18390         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
18391         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
18392         (FieldExpr.DoResolve): Resolve the instance expression with flow
18393         analysis turned off and do the definite assignment check after the
18394         resolving when we know what the expression will resolve to.
18395
18396         * expression.cs (LocalVariableReference, ParameterReference):
18397         Implement the new IVariable interface, only call the flow analysis
18398         code if ec.DoFlowAnalysis is true.
18399         (This): Added constructor which takes a Block argument.  Implement
18400         the new IVariable interface.
18401         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
18402         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
18403         This does the definite assignment checks for struct members.
18404
18405         * class.cs (Constructor.Emit): If this is a non-static `struct'
18406         constructor which doesn't have any initializer, call
18407         Block.AddThisVariable() to tell the flow analysis code that all
18408         struct elements must be initialized before control returns from
18409         the constructor.
18410
18411         * statement.cs (MyStructInfo): New public class.
18412         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
18413         argument to this indexer.  If non-zero, check an individual struct
18414         member, not the whole struct.
18415         (FlowBranching.CheckOutParameters): Check struct members.
18416         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
18417         overloaded versions of these methods which take an additional
18418         `int field_idx' argument to check struct members.
18419         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
18420         overloaded versions of these methods which take an additional
18421         `string field_name' argument to check struct member.s
18422         (VariableInfo): Implement the IVariable interface.
18423         (VariableInfo.StructInfo): New public property.  Returns the
18424         MyStructInfo instance of the variable if it's a struct or null.
18425         (Block.AddThisVariable): New public method.  This is called from
18426         Constructor.Emit() for non-static `struct' constructor which do
18427         not have any initializer.  It creates a special variable for the
18428         "this" instance variable which will be checked by the flow
18429         analysis code to ensure that all of the struct's fields are
18430         initialized before control returns from the constructor.
18431         (UsageVector): Added support for struct members.  If a
18432         variable/parameter is a struct with N members, we reserve a slot
18433         in the usage vector for each member.  A struct is considered fully
18434         initialized if either the struct itself (slot 0) or all its
18435         members are initialized.
18436
18437 2002-08-08  Martin Baulig  <martin@gnome.org>
18438
18439         * driver.cs (Driver.MainDriver): Only report an error CS5001
18440         if there were no compilation errors.
18441
18442         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
18443         `UnsafeContext' property to determine whether the parent is in
18444         unsafe context rather than checking the parent's ModFlags:
18445         classes nested in an unsafe class are unsafe as well.
18446
18447 2002-08-08  Martin Baulig  <martin@gnome.org>
18448
18449         * statement.cs (UsageVector.MergeChildren): Distinguish between
18450         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
18451         we return.  Added test17() and test18() to test-154.cs.
18452
18453 2002-08-08  Martin Baulig  <martin@gnome.org>
18454
18455         * typemanager.cs (TypeManager.FilterWithClosure): If we have
18456         Family access, make sure the invoking type isn't a subclass of the
18457         queried type (that'd be a CS1540).
18458
18459         * ecore.cs (Expression.MemberLookup): Added overloaded version of
18460         this method which takes an additional `Type invocation_type'.
18461
18462         * expression.cs (BaseAccess.DoResolve): Use the base type as
18463         invocation and query type.
18464         (MemberAccess.DoResolve): If the lookup failed and we're about to
18465         report a CS0122, try a lookup with the ec.ContainerType - if this
18466         succeeds, we must report a CS1540.
18467
18468 2002-08-08  Martin Baulig  <martin@gnome.org>
18469
18470         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
18471         (MethodGroupExpr): Implement the IMemberExpr interface.
18472
18473         * expression (MemberAccess.ResolveMemberAccess): No need to have
18474         any special code for MethodGroupExprs anymore, they're now
18475         IMemberExprs.   
18476
18477 2002-08-08  Martin Baulig  <martin@gnome.org>
18478
18479         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
18480         Family, FamANDAssem and FamORAssem permissions.
18481         (TypeManager.IsSubclassOrNestedChildOf): New public method.
18482
18483 2002-08-08  Martin Baulig  <martin@gnome.org>
18484
18485         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
18486         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
18487         or loop block.
18488
18489 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
18490
18491         * driver.cs: implemented /resource option to embed managed resources.
18492
18493 2002-08-07  Martin Baulig  <martin@gnome.org>
18494
18495         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
18496         (FieldBase.HasFieldInitializer): New public property.
18497         (FieldBase.GetInitializerExpression): New public method.  Resolves and
18498         returns the field initializer and makes sure it is only resolved once.
18499         (TypeContainer.EmitFieldInitializers): Call
18500         FieldBase.GetInitializerExpression to get the initializer, this ensures
18501         that it isn't resolved multiple times.
18502
18503         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
18504         the resolving process (SimpleName/MemberLookup) that we're currently
18505         emitting a field initializer (which must not access any instance members,
18506         this is an error CS0236).
18507
18508         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
18509         argument, if the `IsFieldInitializer' flag is set, we must report and
18510         error CS0236 and not an error CS0120.   
18511
18512 2002-08-07  Martin Baulig  <martin@gnome.org>
18513
18514         * ecore.cs (IMemberExpr): New public interface.
18515         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
18516         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
18517         if the expression is an IMemberExpr.
18518
18519         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
18520         to be null, implicitly default to `this' if we're non-static in
18521         this case.  Simplified the code a lot by using the new IMemberExpr
18522         interface.  Also fixed bug #28176 here.
18523
18524 2002-08-06  Martin Baulig  <martin@gnome.org>
18525
18526         * cs-parser.jay (SimpleLookup): Removed.  We need to create
18527         ParameterReferences during semantic analysis so that we can do a
18528         type-only search when resolving Cast, TypeOf and SizeOf.
18529         (block): Pass the `current_local_parameters' to the Block's
18530         constructor.
18531
18532         * class.cs (ConstructorInitializer): Added `Parameters parameters'
18533         argument to the constructor.
18534         (ConstructorInitializer.Resolve): Create a temporary implicit
18535         block with the parameters.
18536
18537         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
18538         references here if we aren't doing a type-only search.
18539
18540         * statement.cs (Block): Added constructor which takes a
18541         `Parameters parameters' argument.
18542         (Block.Parameters): New public property.
18543
18544         * support.cs (InternalParameters.Parameters): Renamed `parameters'
18545         to `Parameters' and made it public readonly.
18546
18547 2002-08-06  Martin Baulig  <martin@gnome.org>
18548
18549         * ecore.cs (Expression.Warning): Made this public as well.
18550
18551         * report.cs (Report.Debug): Print the contents of collections.
18552
18553 2002-08-06  Martin Baulig  <martin@gnome.org>
18554
18555         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
18556         used to tell Resolve() which kinds of expressions it may return.
18557         (Expression.Resolve): Added overloaded version of this method which
18558         takes a `ResolveFlags flags' argument.  This can be used to tell
18559         Resolve() which kinds of expressions it may return.  Reports a
18560         CS0118 on error.
18561         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
18562         ResolveFlags.SimpleName.
18563         (Expression.Error118): Added overloaded version of this method which
18564         takes a `ResolveFlags flags' argument.  It uses the flags to determine
18565         which kinds of expressions are allowed.
18566
18567         * expression.cs (Argument.ResolveMethodGroup): New public method.
18568         Resolves an argument, but allows a MethodGroup to be returned.
18569         This is used when invoking a delegate.
18570
18571         * TODO: Updated a bit.
18572
18573 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18574
18575         Fixed compilation with csc.
18576
18577         * ecore.cs: Expression.Error made public. Is this correct? Should
18578         Warning be made public too?
18579
18580         * expression.cs: use ea.Location instead of ea.loc.
18581         [FIXME:  Filed as bug #28607: MCS must report these errors.]
18582
18583 2002-08-06  Martin Baulig  <martin@gnome.org>
18584
18585         * ecore.cs (Expression.loc): Moved the location here instead of
18586         duplicating it in all derived classes.
18587         (Expression.Location): New public property.
18588         (Expression.Error, Expression.Warning): Made them non-static and
18589         removed the location argument.
18590         (Expression.Warning): Added overloaded version which takes an
18591         `int level' argument.
18592         (Expression.Error118): Make this non-static and removed the
18593         expression and location arguments.
18594         (TypeExpr): Added location argument to the constructor.
18595
18596         * expression.cs (StaticCallExpr): Added location argument to
18597         the constructor.
18598         (Indirection, PointerArithmetic): Likewise.
18599         (CheckedExpr, UnCheckedExpr): Likewise.
18600         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
18601         (StringPtr): Likewise.
18602
18603
18604 2002-08-05  Martin Baulig  <martin@gnome.org>
18605
18606         * expression.cs (BaseAccess.DoResolve): Actually report errors.
18607
18608         * assign.cs (Assign.DoResolve): Check whether the source
18609         expression is a value or variable.
18610
18611         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
18612         while resolving the corresponding blocks.
18613
18614         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
18615         an error, don't silently return null.
18616
18617         * statement.cs (Block.AddVariable): Do the error reporting here
18618         and distinguish between CS0128 and CS0136.
18619         (Block.DoResolve): Report all unused labels (warning CS0164).
18620         (LabeledStatement): Pass the location to the constructor.
18621         (LabeledStatement.HasBeenReferenced): New property.
18622         (LabeledStatement.Resolve): Set it to true here.
18623
18624         * statement.cs (Return.Emit): Return success even after reporting
18625         a type mismatch error (CS0126 or CS0127), this is what csc does and
18626         it avoids confusing the users with any consecutive errors.
18627
18628 2002-08-05  Martin Baulig  <martin@gnome.org>
18629
18630         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
18631
18632         * const.cs (Const.LookupConstantValue): Catch circular definitions.
18633
18634         * expression.cs (MemberAccess.DoResolve): Silently return if an
18635         error has already been reported.
18636
18637         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
18638         error has already been reported.
18639
18640 2002-08-05  Martin Baulig  <martin@gnome.org>
18641
18642         * statement.cs (UsageVector): Only initialize the `parameters'
18643         vector if we actually have any "out" parameters.
18644
18645 2002-08-05  Martin Baulig  <martin@gnome.org>
18646
18647         * expression.cs (Binary.ResolveOperator): When combining delegates,
18648         they must have the same type.
18649
18650 2002-08-05  Martin Baulig  <martin@gnome.org>
18651
18652         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
18653         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
18654         work with the ms runtime and we also don't need it: if we're a
18655         PropertyBuilder and not in the `indexer_arguments' hash, then we
18656         are a property and not an indexer.
18657
18658         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
18659         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
18660         since the latter one doesn't work with the ms runtime.
18661
18662 2002-08-03  Martin Baulig  <martin@gnome.org>
18663
18664         Fixed bugs #27998 and #22735.
18665
18666         * class.cs (Method.IsOperator): New public field.
18667         (Method.CheckBase): Report CS0111 if there's already a method
18668         with the same parameters in the current class.  Report CS0508 when
18669         attempting to change the return type of an inherited method.
18670         (MethodData.Emit): Report CS0179 if a method doesn't have a body
18671         and it's not marked abstract or extern.
18672         (PropertyBase): New abstract base class for Property and Indexer.
18673         (PropertyBase.CheckBase): Moved here from Property and made it work
18674         for indexers.
18675         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
18676         the same so we can reuse it there.
18677         (Property, Indexer): Derive from PropertyBase.
18678         (MethodSignature.inheritable_property_signature_filter): New delegate
18679         to find properties and indexers.
18680
18681         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
18682         argument and improved error reporting.
18683
18684         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
18685         EmptyReadOnlyParameters and made it a property.
18686
18687         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
18688         version of this method which takes a `PropertyInfo indexer'.
18689         (TypeManager.RegisterIndexer): New method.
18690
18691         * class.cs: Added myself as author of this file :-)
18692
18693 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18694
18695         * class.cs: fixed compilation on windoze.
18696
18697 2002-08-03  Martin Baulig  <martin@gnome.org>
18698
18699         * interface.cs (Interface.GetInterfaceBases): Check whether all
18700         base interfaces are at least as accessible than the current one.
18701
18702         * class.cs (TypeContainer.GetClassBases): Check whether base types
18703         are at least as accessible than the current type.
18704         (TypeContainer.AsAccessible): Implemented and made non-static.
18705         (MemberBase.CheckParameters): Report errors if the accessibility
18706         checks fail.
18707
18708         * delegate.cs (Delegate.Delegate): The default visibility is
18709         internal for top-level types and private for nested types.
18710         (Delegate.Define): Report errors if the accessibility checks fail.
18711
18712         * enum.cs (Enum.Enum): The default visibility is internal for
18713         top-level types and private for nested types.
18714         (Enum.DefineType): Compute the correct visibility.
18715
18716         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
18717         function which takes a `bool is_toplevel' instead of a TypeContainer.
18718
18719         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
18720         builtin type.
18721
18722 2002-08-02  Martin Baulig  <martin@gnome.org>
18723
18724         * expression.cs (LocalVariableReferenc): Added constructor which
18725         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
18726         (LocalVariableReference.IsReadOnly): New property.
18727         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
18728         variable is readonly, use our own readonly flag to do this; you can
18729         use the new constructor to get a writable reference to a read-only
18730         variable.
18731
18732         * cs-parser.jay (foreach_statement, using_statement): Get a writable
18733         reference to the local variable.
18734
18735 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
18736
18737         * rootcontext.cs (ResolveCore): Also include System.Exception
18738
18739         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
18740         we reach an EmptyStatement.
18741
18742         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
18743         is also fine.
18744
18745         * expression.cs (Binary.ResolveOperator): Check error result in
18746         two places.
18747
18748         use brtrue/brfalse directly and avoid compares to null.
18749
18750 2002-08-02  Martin Baulig  <martin@gnome.org>
18751
18752         * class.cs (TypeContainer.Define): Define all nested interfaces here.
18753         Fixes bug #28407, added test-155.cs.
18754
18755 2002-08-01  Martin Baulig  <martin@gnome.org>
18756
18757         * class.cs (Event.EmitDefaultMethod): Make this work with static
18758         events.  Fixes #28311, added verify-3.cs.
18759
18760 2002-08-01  Martin Baulig  <martin@gnome.org>
18761
18762         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
18763         `is_disposable' fields.
18764         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
18765         `hm.is_disposable' if we're using the collection pattern.
18766         (Foreach.EmitCollectionForeach): Use the correct type for the
18767         enumerator's local variable, only emit the try/finally block if
18768         necessary (fixes #27713).
18769
18770 2002-08-01  Martin Baulig  <martin@gnome.org>
18771
18772         * ecore.cs (Expression.report118): Renamed to Error118 and made
18773         it public static.
18774
18775         * statement.cs (Throw.Resolve): Check whether the expression is of
18776         the correct type (CS0118) and whether the type derives from
18777         System.Exception (CS0155).
18778         (Catch.Resolve): New method.  Do the type lookup here and check
18779         whether it derives from System.Exception (CS0155).
18780         (Catch.CatchType, Catch.IsGeneral): New public properties.
18781
18782         * typemanager.cs (TypeManager.exception_type): Added.
18783
18784 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
18785
18786         * driver.cs: Updated About function.
18787
18788 2002-07-31  Martin Baulig  <martin@gnome.org>
18789
18790         Implemented Control Flow Analysis.
18791
18792         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
18793         (EmitContext.CurrentBranching): Added.
18794         (EmitContext.StartFlowBranching): Added.
18795         (EmitContext.EndFlowBranching): Added.
18796         (EmitContext.KillFlowBranching): Added.
18797         (EmitContext.IsVariableAssigned): Added.
18798         (EmitContext.SetVariableAssigned): Added.
18799         (EmitContext.IsParameterAssigned): Added.
18800         (EmitContext.SetParameterAssigned): Added.
18801         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
18802         Added control flow analysis stuff here.
18803
18804         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
18805         resolve the expression as lvalue.
18806         (LocalVariableReference.DoResolve): Check whether the variable has
18807         already been assigned.
18808         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
18809         the parameter as assigned here.
18810         (ParameterReference.DoResolve): Check whether the parameter has already
18811         been assigned.
18812         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
18813         expression as lvalue.
18814
18815         * statement.cs (FlowBranching): New class for the flow analysis code.
18816         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
18817         (LabeledStatement.IsDefined): New public property.
18818         (LabeledStatement.AddUsageVector): New public method to tell flow
18819         analyis that the label may be reached via a forward jump.
18820         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
18821         flow analysis.
18822         (VariableInfo.Number): New public field.  This is used by flow analysis
18823         to number all locals of a block.
18824         (Block.CountVariables): New public property.  This is the number of
18825         local variables in this block (including the locals from all parent
18826         blocks).
18827         (Block.EmitMeta): Number all the variables.
18828
18829         * statement.cs: Added flow analysis support to all classes.
18830
18831 2002-07-31  Martin Baulig  <martin@gnome.org>
18832
18833         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
18834         To get debugging messages, compile mcs with /define:MCS_DEBUG and
18835         then use this argument.
18836
18837         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
18838
18839         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
18840         use this to specify /define options.
18841
18842 2002-07-29  Martin Baulig  <martin@gnome.org>
18843
18844         * statement.cs (Fixed): Moved all code that does variable lookups
18845         and resolvings from Emit to Resolve.
18846
18847         * statement.cs (For): Moved all code that does variable lookups
18848         and resolvings from Emit to Resolve.
18849
18850         * statement.cs (Using): Moved all code that does variable lookups
18851         and resolvings from Emit to Resolve.
18852
18853 2002-07-29  Martin Baulig  <martin@gnome.org>
18854
18855         * attribute.cs (Attribute.Resolve): Explicitly catch a
18856         System.NullReferenceException when creating the
18857         CustromAttributeBuilder and report a different warning message.
18858
18859 2002-07-29  Martin Baulig  <martin@gnome.org>
18860
18861         * support.cs (ParameterData.ParameterName): Added method to
18862         get the name of a parameter.
18863
18864         * typemanager.cs (TypeManager.IsValueType): New public method.
18865
18866 2002-07-29  Martin Baulig  <martin@gnome.org>
18867
18868         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
18869         is a flag which specifies that it's either ref or out.
18870         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
18871         the out parameter to `out Parameter.Modifier mod', also set the
18872         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
18873
18874         * support.cs (InternalParameters.ParameterModifier): Distinguish
18875         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
18876         Parameter.Modifier.ISBYREF flag if it's either ref or out.
18877
18878         * expression.cs (Argument.GetParameterModifier): Distinguish
18879         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
18880         Parameter.Modifier.ISBYREF flag if it's either ref or out.
18881
18882 2002-07-29  Martin Baulig  <martin@gnome.org>
18883
18884         * expression.cs (ParameterReference.ParameterReference): Added
18885         `Location loc' argument to the constructor.
18886
18887         * cs-parser.jay: Pass location to ParameterReference.
18888
18889 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
18890
18891         * statement.cs (Try): Initialize the location.
18892
18893         * cs-parser.jay: pass location to Try.
18894
18895         * expression.cs (Unary.Reduce): Change the prototype to return
18896         whether a constant fold could be performed or not.  The result is
18897         returned in an out parameters.  In the case of Indirection and
18898         AddressOf, we want to perform the full tests.
18899
18900 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
18901
18902         * statement.cs (Statement.Emit): Flag dead code.
18903
18904 2002-07-27  Andrew Birkett  <andy@nobugs.org>
18905
18906         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
18907
18908 2002-07-27  Martin Baulig  <martin@gnome.org>
18909
18910         * class.cs (MethodData.Define): Put back call to
18911         TypeManager.AddMethod(), accidentally commented this out.
18912
18913         * report.cs (Debug): New public method to print debugging information,
18914         this is `[Conditional ("DEBUG")]'.
18915
18916 2002-07-26  Martin Baulig  <martin@gnome.org>
18917
18918         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
18919         (switch_statement): Push the current_block to the switch_stack and
18920         pop it again when we're done with the switch.
18921         (switch_section): The new block is a child of the current_block.
18922         Fixes bug #24007, added test-152.cs.
18923
18924 2002-07-27  Martin Baulig  <martin@gnome.org>
18925
18926         * expression.cs (Invocation.EmitArguments): When calling a varargs
18927         function with only its fixed arguments, we need to pass an empty
18928         array.
18929
18930 2002-07-27  Martin Baulig  <martin@gnome.org>
18931
18932         Mono 0.13 has been released.
18933
18934 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
18935
18936         * driver.cs: Rename --resource to --linkres, because that is what
18937         we do currently, we dont support --resource yet.
18938
18939         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
18940
18941 2002-07-25  Martin Baulig  <martin@gnome.org>
18942
18943         * class.cs (MethodData): New public class.  This is a `method builder'
18944         class for a method or one accessor of a Property/Indexer/Event.
18945         (MethodData.GetMethodFlags): Moved here from MemberBase.
18946         (MethodData.ApplyAttributes): Likewise.
18947         (MethodData.ApplyObsoleteAttribute): Likewise.
18948         (MethodData.ApplyConditionalAttribute): Likewise.
18949         (MethodData.ApplyDllImportAttribute): Likewise.
18950         (MethodData.CheckAbstractAndExternal): Likewise.
18951         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
18952         (MethodData.Emit): Formerly known as Method.Emit().
18953         (MemberBase): Moved everything which was specific to a single
18954         accessor/method to MethodData.
18955         (Method): Create a new MethodData and call Define() and Emit() on it.
18956         (Property, Indexer, Event): Create a new MethodData objects for each
18957         accessor and call Define() and Emit() on them.
18958
18959 2002-07-25  Martin Baulig  <martin@gnome.org>
18960
18961         Made MethodCore derive from MemberBase to reuse the code from there.
18962         MemberBase now also checks for attributes.
18963
18964         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
18965         (MemberBase.GetMethodFlags): Moved here from class Method and marked
18966         as virtual.
18967         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
18968         `CallingConventions cc' and `Attributes opt_attrs' arguments.
18969         (MemberBase.ApplyAttributes): New virtual method; applies the
18970         attributes to a method or accessor.
18971         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
18972         (MemberBase.ApplyConditionalAttribute): Likewise.
18973         (MemberBase.ApplyDllImportAttribute): Likewise.
18974         (MemberBase.CheckAbstractAndExternal): Likewise.
18975         (MethodCore.ParameterTypes): This is now a property instead of a
18976         method, it's initialized from DoDefineParameters().
18977         (MethodCore.ParameterInfo): Removed the set accessor.
18978         (MethodCore.DoDefineParameters): New protected virtual method to
18979         initialize ParameterTypes and ParameterInfo.
18980         (Method.GetReturnType): We can now simply return the MemberType.
18981         (Method.GetMethodFlags): Override the MemberBase version and add
18982         the conditional flags.
18983         (Method.CheckBase): Moved some code from Define() here, call
18984         DoDefineParameters() here.
18985         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
18986         here to avoid some larger code duplication.
18987         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
18988         ensure that abstract and external accessors don't declare a body.
18989
18990         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
18991         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
18992         lookup in the attribute's parent classes, so we need to abort as soon
18993         as we found the first match.
18994         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
18995         the attribute has no arguments.
18996
18997         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
18998         of a Method.
18999
19000 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19001
19002         * cs-parser.jay: reverted previous patch.
19003
19004 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19005
19006         * cs-parser.jay: fixed bug #22119.
19007
19008 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19009
19010         * attribute.cs: fixed compilation. The error was:
19011         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
19012         be assigned to before control leaves the current method."
19013         [FIXME:  Filed as bug #28186: MCS must report this error.]
19014
19015 2002-07-25  Martin Baulig  <martin@gnome.org>
19016
19017         * attribute.cs (Attribute.Conditional_GetConditionName): New static
19018         method to pull the condition name ouf of a Conditional attribute.
19019         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
19020         the obsolete message and error flag out of an Obsolete attribute.
19021
19022         * class.cs (Method.GetMethodFlags): New public method to get the
19023         TypeManager.MethodFlags for this method.
19024         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
19025         private methods.
19026         (Method.Define): Get and apply the Obsolete and Conditional attributes;
19027         if we're overriding a virtual function, set the new private variable
19028         `parent_method'; call the new TypeManager.AddMethod().
19029
19030         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
19031         the MethodBuilder and the Method in a PtrHashtable.
19032         (TypeManager.builder_to_method): Added for this purpose.
19033         (TypeManager.MethodFlags): Added IsObsoleteError.
19034         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
19035         Obsolete and Conditional arguments in MethodBuilders.  If we discover
19036         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
19037         the message from the attribute.
19038
19039 2002-07-24  Martin Baulig  <martin@gnome.org>
19040
19041         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
19042         preprocessor directives, ensure that the argument to #define/#undef is
19043         exactly one identifier and that it's actually an identifier.
19044
19045         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
19046         did not work ....
19047
19048 2002-07-24  Martin Baulig  <martin@gnome.org>
19049
19050         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
19051         initialize it to TypeManager.object_type in the constructor.
19052         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
19053         of the `hm.get_current' method if we're using the collection pattern.
19054         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
19055         for the explicit conversion to make it work when we're using the collection
19056         pattern and the `Current' property has a different return type than `object'.
19057         Fixes #27713.
19058
19059 2002-07-24  Martin Baulig  <martin@gnome.org>
19060
19061         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
19062         does not match, but don't report any errors.  This method is called in
19063         order for all methods in a MethodGroupExpr until a matching method is
19064         found, so we don't want to bail out if the first method doesn't match.
19065         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
19066         matches, report the 123.  Fixes #28070.
19067
19068 2002-07-24  Martin Baulig  <martin@gnome.org>
19069
19070         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
19071         TypeManager.TypeToCoreType() to the top of the method so the
19072         following equality checks will work.  Fixes #28107.
19073
19074 2002-07-24  Martin Baulig  <martin@gnome.org>
19075
19076         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
19077         operand is of type uint, and the other operand is of type sbyte,
19078         short or int, the operands are converted to type long." -
19079         Actually do what this comment already told us.  Fixes bug #28106,
19080         added test-150.cs.
19081
19082 2002-07-24  Martin Baulig  <martin@gnome.org>
19083
19084         * class.cs (MethodBase): New abstract class.  This is now a base
19085         class for Property, Indexer and Event to avoid some code duplication
19086         in their Define() and DefineMethods() methods.
19087         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
19088         generic methods for Define() and DefineMethods().
19089         (FieldBase): Derive from MemberBase, not MemberCore.
19090         (Property): Derive from MemberBase, not MemberCore.
19091         (Property.DefineMethod): Moved all the code from this method to the
19092         new MethodBase.DefineAccessor(), just call it with appropriate
19093         argumetnts.
19094         (Property.Define): Call the new Property.DoDefine(), this does some
19095         sanity checks and we don't need to duplicate the code everywhere.
19096         (Event): Derive from MemberBase, not MemberCore.
19097         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
19098         accessors, this will also make them work with interface events.
19099         (Indexer): Derive from MemberBase, not MemberCore.
19100         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
19101         (Indexer.Define): Use the new MethodBase functions.
19102
19103         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
19104         argument to the constructor.
19105         (Interface.FindMembers): Added support for interface events.
19106         (Interface.PopluateEvent): Implemented.
19107
19108         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
19109
19110 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
19111
19112         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
19113         but this is required to check for a method name being the same as
19114         the containing class.  
19115
19116         Handle this now.
19117
19118 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19119
19120         * interface.cs: initialize variable.
19121
19122 2002-07-23  Martin Baulig  <martin@gnome.org>
19123
19124         Implemented the IndexerName attribute in interfaces.
19125
19126         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
19127         name if this is an explicit interface implementation.
19128         (Indexer.InterfaceIndexerName): New public variable.  If we're
19129         implementing an interface indexer, this is the IndexerName in that
19130         interface.  Otherwise, it's the IndexerName.
19131         (Indexer.DefineMethod): If we're implementing interface indexer,
19132         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
19133         and Pending.ImplementIndexer methods.
19134         (Indexer.Define): Also define the PropertyBuilder if we're
19135         implementing an interface indexer and this is neither an explicit
19136         interface implementation nor do the IndexerName match the one in
19137         the interface.
19138
19139         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
19140         If a method is defined here, then we always need to create a proxy
19141         for it.  This is used when implementing interface indexers.
19142         (Pending.IsInterfaceIndexer): New public method.
19143         (Pending.ImplementIndexer): New public method.
19144         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
19145         This is used when implementing interface indexers to define a proxy
19146         if necessary.
19147         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
19148         define a proxy if necessary.
19149
19150         * interface.cs (Interface.IndexerName): New public variable.
19151         (Interface.PopulateIndexer): Set the IndexerName.
19152         (Interface.DefineIndexers): New private method.  Populate all the
19153         indexers and make sure their IndexerNames match.
19154
19155         * typemanager.cs (IndexerPropertyName): Added support for interface
19156         indexers.
19157
19158 2002-07-22  Martin Baulig  <martin@gnome.org>
19159
19160         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
19161         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
19162         ret if HasReturnLabel.
19163         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
19164         variables.
19165
19166         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
19167         and set the ec.LoopBeginTryCatchLevel.
19168         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
19169         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
19170         the current ec.TryCatchLevel, the branch goes out of an exception
19171         block.  In this case, we need to use Leave and not Br.
19172
19173 2002-07-22  Martin Baulig  <martin@gnome.org>
19174
19175         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
19176         block unless the block does not always return or it is contained in
19177         another try { ... } catch { ... } block.  Fixes bug #26506.
19178         Added verify-1.cs to the test suite.
19179
19180 2002-07-22  Martin Baulig  <martin@gnome.org>
19181
19182         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
19183         then we do not always return.  Fixes bug #24985.
19184
19185 2002-07-22  Martin Baulig  <martin@gnome.org>
19186
19187         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
19188         lookup on a per-class level; ie. walk up the class hierarchy until we
19189         found at least one applicable method, then choose the best among them.
19190         Fixes bug #24463 and test-29.cs.
19191
19192 2002-07-22  Martin Baulig  <martin@gnome.org>
19193
19194         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
19195         return types of the methods.  The return type is not part of the
19196         signature and we must not check it to make the `new' modifier work.
19197         Fixes bug #27999, also added test-147.cs.
19198         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
19199
19200         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
19201         on the method's return type.
19202
19203 2002-07-21  Martin Baulig  <martin@gnome.org>
19204
19205         * assign.cs: Make this work if the rightmost source is a constant and
19206         we need to do an implicit type conversion.  Also adding a few more tests
19207         to test-38.cs which should have caught this.
19208
19209         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
19210         target in the makefile for this.  The makefile.gnu is primarily intended
19211         for end-users who don't want to debug the compiler.
19212
19213 2002-07-21  Martin Baulig  <martin@gnome.org>
19214
19215         * assign.cs: Improved the Assign class so it can now handle embedded
19216         assignments (X = Y = Z = something).  As a side-effect this'll now also
19217         consume less local variables.  test-38.cs now passes with MCS, added
19218         a few new test cases to that test.
19219
19220 2002-07-20  Martin Baulig  <martin@gnome.org>
19221
19222         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
19223         instructions.  Fixes bug #27977, also added test-146.cs.
19224
19225 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19226
19227         * cs-tokenizer.cs: fixed getHex ().
19228
19229 2002-07-19  Martin Baulig  <martin@gnome.org>
19230
19231         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
19232         not Type.GetType() to lookup the array type.  This is needed when
19233         we're constructing an array of a user-defined type.
19234         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
19235         single-dimensional arrays, but also for single-dimensial arrays of
19236         type decimal.
19237
19238 2002-07-19  Martin Baulig  <martin@gnome.org>
19239
19240         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
19241         this function is called, it's not allowed to share LocalBuilders
19242         among ILGenerators.
19243
19244 2002-07-19  Martin Baulig  <martin@gnome.org>
19245
19246         * expression.cs (Argument.Resolve): Report an error 118 when trying
19247         to pass a type as argument.
19248
19249 2002-07-18  Martin Baulig  <martin@gnome.org>
19250
19251         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
19252         Conv_R_Un for the signed `long' type.
19253
19254 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
19255
19256         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
19257         `expr' for the temporary result, as that will fail if we do
19258         multiple resolves on the same expression.
19259
19260 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
19261
19262         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
19263         ec.TypeContainer for looking up aliases. 
19264
19265         * class.cs (TypeContainer): Remove LookupAlias from here.
19266
19267         * decl.cs (DeclSpace); Move here.
19268
19269 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
19270
19271         * class.cs (FindMembers): Only call filter if the constructor
19272         bulider is not null.
19273
19274         Also handle delegates in `NestedTypes' now.  Now we will perform
19275         type lookups using the standard resolution process.  This also
19276         fixes a bug.
19277
19278         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
19279         This uses Expressions (the limited kind that can be parsed by the
19280         tree) instead of strings.
19281
19282         * expression.cs (ComposedCast.ToString): Implement, used to flag
19283         errors since now we have to render expressions.
19284
19285         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
19286         FormArrayType. 
19287
19288         * ecore.cs (SimpleName.ToString): ditto.
19289
19290         * cs-parser.jay: Instead of using strings to assemble types, use
19291         Expressions to assemble the type (using SimpleName, ComposedCast,
19292         MemberAccess).  This should fix the type lookups in declarations,
19293         because we were using a different code path for this.
19294
19295         * statement.cs (Block.Resolve): Continue processing statements
19296         even when there is an error.
19297
19298 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
19299
19300         * class.cs (Event.Define): Also remove the `remove' method from
19301         the list of pending items.
19302
19303         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
19304         generate more compact code. 
19305
19306 2002-07-17  Martin Baulig  <martin@gnome.org>
19307
19308         * const.cs (Const.LookupConstantValue): Add support for constant
19309         `unchecked' and `checked' expressions.
19310         Also adding test case test-140.cs for this.
19311
19312 2002-07-17  Martin Baulig  <martin@gnome.org>
19313
19314         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
19315         check whether mi.ReturnType implements the IEnumerator interface; the
19316         `==' and the IsAssignableFrom() will fail in this situation.
19317
19318 2002-07-16  Ravi Pratap  <ravi@ximian.com>
19319
19320         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
19321         here too.
19322
19323 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19324
19325         * expression.cs: fixed bug #27811.
19326
19327 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
19328
19329         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
19330         Molaro: when we are a ref, the value already contains a pointer
19331         value, do not take the address of it.
19332
19333 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
19334         * removed mb-parser.jay and mb-tokenizer.cs
19335
19336 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
19337
19338         * expression.cs: check against the building corlib void type.
19339
19340 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
19341
19342         * ecore.cs: fix for valuetype static readonly fields: when 
19343         initializing them, we need their address, not the address of a copy.
19344
19345 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
19346
19347         * typemanager.cs: register also enum_type in corlib.
19348
19349 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
19350
19351         * class.cs: allow calling this (but not base) initializers in structs.
19352
19353 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
19354
19355         * ecore.cs: make sure we compare against the building base types
19356         in GetTypeSize ().
19357
19358 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
19359
19360         * typemanager.cs: fix TypeToCoreType() to handle void and object
19361         (corlib gets no more typerefs after this change).
19362
19363 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
19364
19365         * expression.cs (ArrayCreation.EmitArrayArguments): use
19366         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
19367
19368         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
19369         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
19370         array indexes, the runtime actually forbids them.
19371
19372         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
19373         for array arguments here.
19374
19375         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
19376         instead of the default for ValueTypes.
19377
19378         (New.DoEmit): Use IsValueType instead of
19379         IsSubclassOf (value_type)
19380         (New.DoResolve): ditto.
19381         (Invocation.EmitCall): ditto.
19382
19383         * assign.cs (Assign): ditto.
19384
19385         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
19386         Statements *are* currently doing part of their resolution during
19387         Emit.  
19388
19389         Expressions do always resolve during resolve, but statements are
19390         only required to propagate resolution to their children.
19391
19392 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
19393
19394         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
19395
19396         (LoadAssembly): Do not add the dll if it is already specified
19397
19398         (MainDriver): Add the System directory to the link path at the end,
19399         after all the other -L arguments. 
19400
19401         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
19402         wrong opcode for loading bytes and bools (ldelem.i1 instead of
19403         ldelem.u1) and using the opposite for sbytes.
19404
19405         This fixes Digger, and we can finally run it.
19406
19407         * driver.cs (UnixParseOption): Move the option parsing here.  
19408         (CSCParseOption): Implement CSC-like parsing of options.
19409
19410         We now support both modes of operation, the old Unix way, and the
19411         new CSC-like way.  This should help those who wanted to make cross
19412         platform makefiles.
19413
19414         The only thing broken is that /r:, /reference: and /lib: are not
19415         implemented, because I want to make those have the same semantics
19416         as the CSC compiler has, and kill once and for all the confussion
19417         around this.   Will be doing this tomorrow.
19418
19419         * statement.cs (Unsafe.Resolve): The state is checked during
19420         resolve, not emit, so we have to set the flags for IsUnsfe here.
19421
19422 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
19423
19424         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
19425         not catch the Error_ObjectRefRequired in SimpleName (as it is
19426         possible to have a class/instance variable name that later gets
19427         deambiguated), we have to check this here.      
19428
19429 2002-07-10  Ravi Pratap  <ravi@ximian.com>
19430
19431         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
19432         make static and put into Expression.
19433
19434         (Event.Define): Register the private field of the event with the 
19435         TypeManager so that GetFieldFromEvent can get at it.
19436
19437         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
19438         keep track of the private field associated with an event which
19439         has no accessors.
19440
19441         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
19442         private field.
19443
19444         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
19445
19446 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
19447
19448         * expression.cs (Binary.EmitBranchable): this routine emits the
19449         Binary expression in a branchable context.  This basically means:
19450         we need to branch somewhere, not just get the value on the stack.
19451
19452         This works together with Statement.EmitBoolExpression.
19453
19454         * statement.cs (Statement.EmitBoolExpression): Use
19455         EmitBranchable. 
19456
19457 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
19458
19459         * statement.cs (For): Reduce the number of jumps in loops.
19460
19461         (For): Implement loop inversion for the For statement.
19462
19463         (Break): We can be breaking out of a Try/Catch controlled section
19464         (foreach might have an implicit try/catch clause), so we need to
19465         use Leave instead of Br.
19466
19467         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
19468         now).  If the instace expression supports IMemoryLocation, we use
19469         the AddressOf method from the IMemoryLocation to extract the
19470         address instead of emitting the instance.
19471
19472         This showed up with `This', as we were emitting the instance
19473         always (Emit) instead of the Address of This.  Particularly
19474         interesting when This is a value type, as we dont want the Emit
19475         effect (which was to load the object).
19476
19477 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
19478
19479         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
19480
19481         * statement.cs (Checked): Set the CheckedState during the resolve
19482         process too, as the ConvCast operations track the checked state on
19483         the resolve process, and not emit.
19484
19485         * cs-parser.jay (namespace_member_declaration): Flag that we have
19486         found a declaration when we do.  This is used to flag error 1529
19487
19488         * driver.cs: Report ok when we display the help only.
19489
19490 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
19491
19492         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
19493
19494 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
19495
19496         * cs-tokenizer.cs (define): We also have to track locally the
19497         defines.  AllDefines is just used for the Conditional Attribute,
19498         but we also need the local defines for the current source code. 
19499
19500 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
19501
19502         * statement.cs (While, For, Do): These loops can exit through a
19503         Break statement, use this information to tell whether the
19504         statement is the last piece of code.
19505
19506         (Break): Flag that we break.
19507
19508         * codegen.cs (EmitContexts): New `Breaks' state variable.
19509
19510 2002-07-03  Martin Baulig  <martin@gnome.org>
19511
19512         * class.cs (TypeContainer.MethodModifiersValid): Allow override
19513         modifiers in method declarations in structs.  Otherwise, you won't
19514         be able to override things like Object.Equals().
19515
19516 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
19517
19518         * class.cs (Method, Property, Indexer): Do not allow the public
19519         modifier to be used in explicit interface implementations.
19520
19521         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
19522         override modifiers in method declarations in structs
19523
19524 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
19525
19526         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
19527         integer or real overflow, report an error
19528
19529 2002-07-02  Martin Baulig  <martin@gnome.org>
19530
19531         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
19532         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
19533         to tell the runtime about our newly created System.Object and
19534         System.ValueType types.
19535
19536 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
19537
19538         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
19539         struct instead of Ldarg/Starg.
19540
19541 2002-07-02  Martin Baulig  <martin@gnome.org>
19542
19543         * expression.cs (Indirection.Indirection): Call
19544         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
19545
19546 2002-07-02  Martin Baulig  <martin@gnome.org>
19547
19548         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
19549         ValueType, call TypeManager.TypeToCoreType() on it.
19550         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
19551         the OpCodes.Newarr argument.
19552
19553 2002-07-02  Martin Baulig  <martin@gnome.org>
19554
19555         * expression.cs (Invocation.EmitCall): When compiling corlib,
19556         replace all calls to the system's System.Array type to calls to
19557         the newly created one.
19558
19559         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
19560         System.Array methods.
19561         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
19562         from the system's System.Array type which must be replaced.
19563
19564 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
19565
19566         * typemanager.cs: load unverifiable_code_ctor so we can build
19567         corlib using the correct type. Avoid using GetTypeCode() with
19568         TypeBuilders.
19569         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
19570         TypeManager.object_type to allow building corlib.
19571
19572 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
19573
19574         * ecore.cs: handle System.Enum separately in LoadFromPtr().
19575
19576 2002-07-01  Martin Baulig  <martin@gnome.org>
19577
19578         * class.cs: Make the last change actually work, we need to check
19579         whether `ifaces != null' to avoid a crash.
19580
19581 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
19582
19583         * class.cs: when we build structs without fields that implement
19584         interfaces, we need to add the interfaces separately, since there is
19585         no API to both set the size and add the interfaces at type creation
19586         time.
19587
19588 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
19589
19590         * expression.cs: the dimension arguments to the array constructors
19591         need to be converted if they are a long.
19592
19593 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
19594
19595         * class.cs: don't emit ldarg.0 if there is no parent constructor
19596         (fixes showstopper for corlib).
19597
19598 2002-06-29  Martin Baulig  <martin@gnome.org>
19599
19600         MCS now compiles corlib on GNU/Linux :-)
19601
19602         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
19603         ie. check for MethodImplOptions.InternalCall.
19604
19605         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
19606         and TypeManager.attribute_type are null, so we must explicitly check
19607         whether parent is not null to find out whether it's an attribute type.
19608         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
19609         and SetBuilder, not only if the property is neither abstract nor external.
19610         This is necessary to set the MethodImplOptions on the accessor methods.
19611         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
19612         SetBuilder, see Property.Emit().
19613
19614         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
19615         populate "System.Object", "System.ValueType" and "System.Attribute" since
19616         they've already been populated from BootCorlib_PopulateCoreTypes().
19617
19618 2002-06-29  Martin Baulig  <martin@gnome.org>
19619
19620         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
19621         is the NullLiteral, we also need to make sure that target_type is not
19622         an enum type.   
19623
19624 2002-06-29  Martin Baulig  <martin@gnome.org>
19625
19626         * rootcontext.cs (RootContext.ResolveCore): We must initialize
19627         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
19628         before calling BootstrapCorlib_ResolveDelegate ().
19629
19630 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19631
19632         * statement.cs: fixed build-breaker. All tests passed ok.
19633
19634 2002-06-27  Martin Baulig  <martin@gnome.org>
19635
19636         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
19637         for System.Decimal when compiling corlib.
19638
19639 2002-06-27  Martin Baulig  <martin@gnome.org>
19640
19641         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
19642         switch blocks which contain nothing but a default clause.
19643
19644 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
19645
19646        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
19647
19648 2002-06-27  Martin Baulig  <martin@gnome.org>
19649
19650         * ecore.cs (PropertyExpr.PropertyExpr): Call
19651         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
19652
19653         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
19654         is already a TypeBuilder.
19655
19656 2002-06-27  Martin Baulig  <martin@gnome.org>
19657
19658         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
19659         `target_type == TypeManager.array_type', not IsAssignableFrom() in
19660         the "from an array-type to System.Array" case.  This makes it work
19661         when compiling corlib.
19662
19663 2002-06-27  Martin Baulig  <martin@gnome.org>
19664
19665         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
19666         non-static PropertyExpr, set its InstanceExpression.  This makes
19667         the `ICollection.Count' property work in System/Array.cs.
19668
19669 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
19670
19671         * driver.cs: Made error handling more consistent.  Errors now
19672         tracked by Report class, so many methods which used to return int
19673         now return void.  Main() now prints success/failure and 
19674         errors/warnings message.
19675
19676         Renamed '--probe' compiler argument to '--expect-error'.  Removed
19677         the magic number return values (123 and 124).  Now, if the
19678         expected error occurs, the compiler exits with success (exit value
19679         0).  If the compilation completes without seeing that particular
19680         error, the compiler exits with failure (exit value 1).  The
19681         makefile in mcs/errors has been changed to handle the new behaviour.
19682
19683         * report.cs: Made 'expected error' number a property and renamed
19684         it from 'Probe' to 'ExpectedError'.
19685
19686         * genericparser.cs: Removed error handling support, since it is
19687         now all done by Report class.
19688
19689         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
19690         class, so parse() no longer returns an int.
19691
19692         * namespace.cs: Use Report.Error instead of GenericParser.error
19693
19694 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
19695
19696         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
19697         TypeContainer.AddOperator): At the front of the list put the
19698         explicit implementations, so they get resolved/defined first. 
19699
19700 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
19701
19702         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
19703         interface type is implemented by this TypeContainer.  Used during
19704         explicit interface implementation.
19705
19706         (Property.Define, Indexer.Define, Method.Define): Validate that
19707         the given interface in the explicit implementation is one of the
19708         base classes for the containing type.
19709
19710         Also if we are explicitly implementing an interface, but there is
19711         no match in the pending implementation table, report an error.
19712
19713         (Property.Define): Only define the property if we are
19714         not explicitly implementing a property from an interface.  Use the
19715         correct name also for those properties (the same CSC uses,
19716         although that is really not needed).
19717
19718         (Property.Emit): Do not emit attributes for explicitly implemented
19719         properties, as there is no TypeBuilder.
19720
19721         (Indexer.Emit): ditto.
19722
19723         Hiding then means that we do not really *implement* a pending
19724         implementation, which makes code fail.
19725
19726 2002-06-22  Martin Baulig  <martin@gnome.org>
19727
19728         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
19729         the return value of Object.GetType().  [FIXME: we need to do this whenever
19730         we get a type back from the reflection library].
19731
19732 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
19733
19734         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
19735
19736 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
19737
19738         * attribute.cs: Return null if we can not look up the type.
19739
19740         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
19741         the interface types found.
19742
19743         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
19744         interface types found.
19745
19746         * typemanager.cs (GetInterfaces): Make this routine returns alll
19747         the interfaces and work around the lame differences between
19748         System.Type and System.Reflection.Emit.TypeBuilder in the results
19749         result for GetInterfaces.
19750
19751         (ExpandInterfaces): Given an array of interface types, expand and
19752         eliminate repeated ocurrences of an interface.  This expands in
19753         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
19754         be IA, IB, IC.
19755
19756 2002-06-21  Martin Baulig  <martin@gnome.org>
19757
19758         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
19759         on System.Enum.
19760
19761 2002-06-21  Martin Baulig  <martin@gnome.org>
19762
19763         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
19764         and called with one of the core types, return the corresponding typebuilder for
19765         that type.
19766
19767         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
19768         element type.
19769
19770 2002-06-21  Martin Baulig  <martin@gnome.org>
19771
19772         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
19773         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
19774         (Expression.ConvertReferenceExplicit): Likewise.
19775
19776         * expression.cs (ElementAccess.DoResolve): Likewise.
19777         (ElementAccess.DoResolveLValue): Likewise.
19778
19779 2002-06-10  Martin Baulig  <martin@gnome.org>
19780
19781         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
19782         add the "value" parameter to the parameter list.
19783
19784         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
19785         to our caller.
19786
19787 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
19788
19789         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
19790         the argument to an int, uint, long or ulong, per the spec.  Also
19791         catch negative constants in array creation.
19792
19793 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
19794
19795         * class.cs: do not allow the same interface to appear twice in
19796         the definition list.
19797
19798 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
19799
19800         * ecore.cs: don't use ldlen with System.Array.
19801
19802 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
19803
19804         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
19805
19806 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
19807
19808         * modifiers.cs: produce correct field attributes for protected
19809         internal. Easy fix so miguel can work on ther harder stuff:-)
19810
19811 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
19812
19813         * pending.cs: New file.  Move the code from class.cs here.
19814         Support clearning the pending flag for all methods (when not doing
19815         explicit interface implementation).
19816
19817 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
19818
19819         * rootcontext.cs: added a couple more types needed to bootstrap.
19820
19821 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
19822
19823         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
19824         constructor in the type, instead of any constructor in the type
19825         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
19826         a bug in the Mono runtime when applying the params attribute). 
19827
19828 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
19829         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
19830
19831 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
19832
19833         * expression.cs (Unary.ResolveOperator): Use TypeManager
19834         to resolve the type.
19835
19836 2002-06-13  Ravi Pratap  <ravi@ximian.com>
19837
19838         * cs-parser.jay (enum_member_declaration): Pass in the attributes
19839         attached.
19840
19841         * enum.cs (AddEnumMember): Add support to store the attributes associated 
19842         with each member too.
19843
19844         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
19845         field builders too - this takes care of the enum member case.
19846
19847 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
19848
19849         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
19850         address-of operator on both value types and pointers.
19851
19852 2002-06-10  Martin Baulig  <martin@gnome.org>
19853
19854         * interface.cs (Interface.PopulateIndexer): Add the indexer's
19855         PropertyBuilder to the `property_builders' list.
19856
19857         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
19858         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
19859         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
19860         find any indexers which are inherited from an interface.
19861
19862 2002-06-09  Martin Baulig  <martin@gnome.org>
19863
19864         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
19865         the same type as the constant if necessary.  There's also a test-130.cs
19866         for this.
19867
19868         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
19869
19870         * typemanager.cs (TypeManager.ChangeType): Previously known as
19871         Enum.ChangeEnumType().
19872
19873 2002-06-09  Martin Baulig  <martin@gnome.org>
19874
19875         * expression.cs (Cast.TryReduce): Added support for consts.
19876
19877 2002-06-08  Ravi Pratap  <ravi@ximian.com>
19878
19879         * class.cs (Accessor): Hold attributes information so we can pass
19880         it along.
19881
19882         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
19883         Modify to pass in attributes attached to the methods.
19884
19885         (add_accessor_declaration, remove_accessor_declaration): Ditto.
19886
19887         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
19888         to handle the Accessor kind :-)
19889
19890         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
19891
19892 2002-06-08  Martin Baulig  <martin@gnome.org>
19893
19894         * expression.cs (Unary.TryReduceNegative): Added support for
19895         ULongConstants.
19896
19897 2002-06-08  Martin Baulig  <martin@gnome.org>
19898
19899         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
19900         name can't be found in the `defined_names' - the caller will do a
19901         MemberLookup in this case and thus find methods in System.Enum
19902         such as Enum.IsDefined().
19903
19904 2002-06-08  Martin Baulig  <martin@gnome.org>
19905
19906         * enum.cs (Enum.ChangeEnumType): This is a custom version of
19907         Convert.ChangeType() which works with TypeBuilder created types.
19908         (Enum.LookupEnumValue, Enum.Define): Use it here.
19909
19910         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
19911         `TypeBuilder.BaseType != null' check.
19912         (TypeContainer.FindMembers): Only lookup parent members if we
19913         actually have a parent.
19914         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
19915         (ConstructorInitializer.Resolve): Likewise.
19916
19917         * interface.cs (Interface.FindMembers): Added
19918         `TypeBuilder.BaseType != null' check.
19919
19920         * rootcontext.cs (RootContext.ResolveCore): Added
19921         "System.Runtime.CompilerServices.IndexerNameAttribute" to
19922         classes_second_stage.
19923
19924         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
19925         debug_type and trace_type when compiling with --nostdlib.       
19926
19927 2002-06-07  Martin Baulig  <martin@gnome.org>
19928
19929         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
19930         (AddField): Set it to true when adding a non-static field.
19931         (DefineType): Use `have_nonstatic_fields' to find out whether we
19932         have non-static fields, not `Fields != null'.
19933
19934 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
19935
19936         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
19937         dereferencing a null on the static-field code path)
19938
19939 2002-05-30  Martin Baulig  <martin@gnome.org>
19940
19941         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
19942         to take command line arguments.  Use reflection to call the new
19943         custom `Initialize' function on the symbol writer and pass it the
19944         command line arguments.
19945
19946         * driver.cs (--debug-args): New command line argument to pass command
19947         line arguments to the symbol writer.
19948
19949 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
19950
19951         * assign.cs (DoResolve): Forgot to do the implicit conversion to
19952         the target type for indexers and properties.  Thanks to Joe for
19953         catching this.
19954
19955 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
19956
19957         * typemanager.cs (MethodFlags): returns the method flags
19958         (Obsolete/ShouldIgnore) that control warning emission and whether
19959         the invocation should be made, or ignored. 
19960
19961         * expression.cs (Invocation.Emit): Remove previous hack, we should
19962         not do this on matching a base type, we should do this based on an attribute
19963
19964         Only emit calls to System.Diagnostics.Debug and
19965         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
19966         on the command line.
19967
19968         * rootcontext.cs: Global settings for tracing and debugging.
19969
19970         * cs-tokenizer.cs (define): New utility function to track
19971         defines.   Set the global settings for TRACE and DEBUG if found.
19972
19973 2002-05-25  Ravi Pratap  <ravi@ximian.com>
19974
19975         * interface.cs (Populate*): Pass in the TypeContainer as well as
19976         the DeclSpace as parameters so that we can create EmitContexts and
19977         then use that to apply attributes etc.
19978
19979         (PopulateMethod, PopulateEvent, PopulateProperty)
19980         (PopulateIndexer): Apply attributes everywhere.
19981
19982         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
19983         etc.
19984
19985         (ApplyAttributes): Update accordingly.
19986
19987         We now apply interface attributes for all members too.
19988
19989 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
19990
19991         * class.cs (Indexer.Define); Correctly check if we are explicit
19992         implementation (instead of checking the Name for a ".", we
19993         directly look up if the InterfaceType was specified).
19994
19995         Delay the creation of the PropertyBuilder.
19996
19997         Only create the PropertyBuilder if we are not an explicit
19998         interface implementation.   This means that explicit interface
19999         implementation members do not participate in regular function
20000         lookups, and hence fixes another major ambiguity problem in
20001         overload resolution (that was the visible effect).
20002
20003         (DefineMethod): Return whether we are doing an interface
20004         implementation. 
20005
20006         * typemanager.cs: Temporary hack until we get attributes in
20007         interfaces (Ravi is working on that) and we get IndexerName
20008         support in interfaces.
20009
20010         * interface.cs: Register the indexers as properties.
20011
20012         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
20013         warning, I have verified that this is a bug in the .NET runtime
20014         (JavaScript suffers of the same problem).
20015
20016         * typemanager.cs (MemberLookup): When looking up members for
20017         interfaces, the parent of an interface is the implicit
20018         System.Object (so we succeed in searches of Object methods in an
20019         interface method invocation.  Example:  IEnumerable x;  x.ToString
20020         ()) 
20021
20022 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
20023
20024         * class.cs (Event): Events should also register if they do
20025         implement the methods that an interface requires.
20026
20027         * typemanager.cs (MemberLookup); use the new GetInterfaces
20028         method. 
20029
20030         (GetInterfaces): The code used to lookup interfaces for a type is
20031         used in more than one place, factor it here. 
20032
20033         * driver.cs: Track the errors at the bottom of the file, we kept
20034         on going.
20035
20036         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
20037         instance if the method we are calling is static!
20038
20039 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
20040
20041         * attribute.cs (ApplyAttributes): Make this function filter out
20042         the IndexerName attribute (as that attribute in reality is never
20043         applied) and return the string constant for the IndexerName
20044         attribute. 
20045
20046         * class.cs (TypeContainer.Emit): Validate that all the indexers
20047         have the same IndexerName attribute, and if so, set the
20048         DefaultName attribute on the class. 
20049
20050         * typemanager.cs: The return value might contain other stuff (not
20051         only methods).  For instance, consider a method with an "Item"
20052         property and an Item method.
20053
20054         * class.cs: If there is a problem with the parameter types,
20055         return. 
20056
20057 2002-05-24  Ravi Pratap  <ravi@ximian.com>
20058
20059         * ecore.cs (ImplicitConversionExists): Wrapper function which also
20060         looks at user defined conversion after making a call to 
20061         StandardConversionExists - we need this for overload resolution.
20062
20063         * expression.cs : Update accordingly the various method calls.
20064
20065         This fixes 2 bugs filed against implicit user defined conversions 
20066
20067 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
20068
20069         * statement.cs: Track the result of the assignment.
20070
20071 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
20072
20073         * expression.cs (MemberAccess): Improved error reporting for
20074         inaccessible members.
20075
20076 2002-05-22  Martin Baulig  <martin@gnome.org>
20077
20078         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
20079         itself with debugging support.
20080
20081 2002-05-22  Martin Baulig  <martin@gnome.org>
20082
20083         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
20084         Removed, this isn't needed anymore.
20085
20086 2002-05-20  Martin Baulig  <martin@gnome.org>
20087
20088         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
20089         be underlying type for an enum.
20090
20091 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
20092
20093         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
20094         that splits out the loading of just the core types.
20095
20096         * rootcontext.cs (ResolveCore): Split the struct resolution in
20097         two, so we can load the enumeration underlying types before any
20098         enums are used.
20099
20100         * expression.cs (Is): Bandaid until we fix properly Switch (see
20101         bug #24985 for details).
20102
20103         * typemanager.cs (ImplementsInterface): The hashtable will contain
20104         a null if there are no interfaces implemented.
20105
20106 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
20107
20108         * cs-parser.jay (indexer_declarator): It is fine to have array
20109         parameters
20110
20111 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
20112
20113         * typemanager.cs: (RegisterBuilder): New function used to register
20114         TypeBuilders that implement interfaces.  Since
20115         TypeBuilder.GetInterfaces (as usual) does not work with lame
20116         Reflection.Emit. 
20117         (AddUserType): register interfaces.
20118
20119         (ImplementsInterface): Use the builder_to_ifaces hash if we are
20120         dealing with TypeBuilder.  Also, arrays are showing up as
20121         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
20122         methods can not be invoked on them!
20123
20124         * ecore.cs (ExplicitReferenceConversionExists): Made public.
20125         (ImplicitReferenceConversionExists): Split out from
20126         StandardConversionExists. 
20127
20128         * expression.cs (As): We were only implementing one of the three
20129         cases for the as operator.  We now implement them all.
20130         (Is): Implement the various other cases for Is as well.
20131
20132         * typemanager.cs (CACHE): New define used to control if we want or
20133         not the FindMembers cache.  Seems to have a negative impact on
20134         performance currently
20135
20136         (MemberLookup): Nested types have full acess to
20137         enclosing type members
20138
20139         Remove code that coped with instance/static returns for events, we
20140         now catch this in RealFindMembers.
20141
20142         (RealFindMembers): only perform static lookup if the instance
20143         lookup did not return a type or an event.  
20144
20145 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
20146
20147         * assign.cs (CompoundAssign): We pass more semantic information
20148         now to Compound Assignments than we did before: now we have all
20149         the information at hand, and now we resolve the target *before* we
20150         do the expression expansion, which allows the "CacheValue" method
20151         to have the effect we intended (before, a [x] += 1 would generate
20152         two differen ArrayAccess expressions from the ElementAccess,
20153         during the resolution process).
20154
20155         (CompoundAssign.DoResolve): Resolve target and original_source here.
20156
20157 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
20158
20159         * expression.cs (ArrayAccess): dropped debugging information. 
20160
20161         * typemanager.cs: Small bug fix: I was always returning i_members,
20162         instead of one of i_members or s_members (depending on which had
20163         the content).
20164
20165         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
20166         method is invoked before any code generation takes place, and it
20167         is a mechanism to inform that the expression will be invoked more
20168         than once, and that the method should use temporary values to
20169         avoid having side effects
20170
20171         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
20172
20173         * ecore.cs (Expression.CacheTemporaries): Provide empty default
20174         implementation.
20175
20176         * expression.cs (Indirection, ArrayAccess): Add support for
20177         CacheTemporaries in these two bad boys. 
20178
20179         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
20180         ldobj or ldind_ref.  
20181         (StoreFromPtr): Handle stobj as well.
20182
20183         * expression.cs (UnaryMutator): Share more code.
20184
20185         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
20186         down: I was not tracking the Filter function as well, which
20187         was affecting the results of the cache.
20188
20189 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
20190
20191         * attribute.cs: Remove the hack to handle the CharSet property on
20192         StructLayouts. 
20193
20194 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
20195
20196         * attribute.cs (DoResolve): More uglyness, we now only try to
20197         resolve the attribute partially, to extract the CharSet
20198         information (only if we are a StructLayout attribute).  Otherwise 
20199
20200         (GetExtraTypeInfo): Add some code to conditionally kill in the
20201         future this.   I am more and more convinced that the .NET
20202         framework has special code to handle the attribute setting on
20203         certain elements.
20204
20205         * expression.cs (IsParamsMethodApplicable): Revert my previous
20206         foreach change here, it was wrong.
20207
20208 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
20209
20210         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
20211         (pp_expr): do not abort on unknown input, just return.
20212         (eval): abort if there are pending chars.
20213
20214         * attribute.cs (Attribute.Resolve): Positional parameters are
20215         optional.  Deal with that case.
20216
20217         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
20218         the Ansi/Unicode/Auto information for the type.
20219
20220         (TypeContainer.DefineType): instantiate the EmitContext here, as
20221         we will be using it during the type definition (to resolve
20222         attributes) and during the emit phase.
20223
20224         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
20225         to pull type information out of the attributes
20226
20227         (Attribute.Resolve): track the constructor builder, and allow for
20228         multiple invocations (structs and classes will use this).
20229
20230         * ecore.cs (MemberLookupFinal): new version with all the
20231         parameters customizable.
20232
20233         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
20234         constructors.  Return if the result value is null (as the error
20235         would have been flagged already by MemberLookupFinal)
20236
20237         Do not allow instances of abstract classes or interfaces to be
20238         created.
20239
20240         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
20241         We have to compare the assembly property here when dealing with
20242         FamANDAssem and Assembly access modifiers, because we might be
20243         creating an assembly from *modules* (that means that we are not
20244         getting TypeBuilders for types defined in other modules that are
20245         part of this assembly).
20246
20247         (Method.Emit): If the method is marked abstract and has a body,
20248         emit an error. 
20249
20250         (TypeContainer.DefineMembers): If both the defined member and the
20251         parent name match are methods, then do not emit any warnings: let
20252         the Method.Define routine take care of flagging warnings.  But if
20253         there is a mismatch (method overrides something else, or method is
20254         overriwritten by something, then emit warning).
20255
20256         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
20257         set to null, this means `do not check for the return type on the
20258         signature'. 
20259
20260         (Method.Define): set the return type for the method signature to
20261         null, so that we get methods with the same name and parameters and
20262         different return types.  This is used to flag warning 114 (you are
20263         hiding a method, and you probably want to use the new/override
20264         keywords instead).
20265
20266         * typemanager.cs (MemberLookup): Implemented proper access
20267         control, closing a long standing set of bug reports.  The problem
20268         was that the Framework only has two bits: Public and NonPublic,
20269         and NonPublic includes private and protected methods, but we need
20270         to enforce the FamANDAssem, FamOrAssem and Family. 
20271
20272 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
20273
20274         * statement.cs (GotoCase): Return true: Ammounts to giving up
20275         knowledge on whether we return or not, and letting the other case
20276         be responsible for it.
20277
20278 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
20279
20280         * driver.cs: Do not load directories for each file processed, only
20281         do it if there is a pattern.
20282
20283         * ecore.cs: Report readonly assigns here as well, as we might have
20284         been resolved only by MemberAccess.
20285
20286         (SimpleName.SimpleNameResolve): Also be useful for LValue
20287         resolution.   We need this to propagate assign to local readonly variables
20288
20289         * typemanager.cs: Use a ptrhashtable for the criteria, because we
20290         do not want to reuse potential criteria memory.
20291
20292         * class.cs (MyEventBuilder): Set reflected_type;
20293
20294         * ecore.cs (Constantify): Added support for constifying bools.
20295
20296         (RootContext.LookupType): Added a cache for values looked up in
20297         the declaration space.
20298
20299         * typemanager.cs (FindMembers): Now is a front-end to
20300         RealFindMembers, and provides a two-level hashtable-based cache to
20301         the request.  
20302
20303         15% performance improvement: from 22.5 to 19.2 seconds.
20304
20305         * expression.cs (IsParamsMethodApplicable): use foreach.
20306         (Invocation.DoResolve): ditto.
20307         (New.DoResolve): ditto.
20308         (ArrayCreation.DoResolve): ditto.
20309
20310         * ecore.cs (FindMostEncompassingType): use foreach.
20311
20312         * delegate.cs (NewDelegate.DoResolve): Use foreach
20313
20314         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
20315         (RemoveMethods): use foreach.
20316
20317         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
20318         nested foreach statements instead of for, and also break out of
20319         the inner loop once a match is found.
20320
20321         (Invocation.OverloadResolve): Use foreach, simplify the code. 
20322
20323 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
20324
20325         * cfold.cs (BinaryFold): During an enumeration evaluation context,
20326         we actually unwrap the expression to allow for extra information
20327         to be extracted. 
20328
20329         * expression.cs: Use Shr_Un on unsigned operations. 
20330
20331 2002-05-08  Ravi Pratap  <ravi@ximian.com>
20332
20333         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
20334         applicable operators was not being considered correctly. This closes
20335         the bug Miguel reported.
20336
20337 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
20338
20339         * attribute.cs: check that the type derives from System.Attribute
20340         and report the correct error in that case (moved the duplicate code to
20341         its own method, too).
20342
20343 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
20344
20345         * attribute.cs: lookup attribute type name as the spec says: first the
20346         bare attribute name and then name + "Attribute" (nant compiles with
20347         mcs after this fix).
20348
20349 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
20350
20351         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
20352         Because of the way we parse things, we should try to see if a
20353         UIntConstant can fit in an integer.
20354
20355 2002-05-07  Ravi Pratap  <ravi@ximian.com>
20356
20357         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
20358         when we are in an explicit context.
20359
20360         (ConvertReferenceExplicit): When converting from Iface type S to Class
20361         T make sure the rules are implemented as an OR.
20362
20363         * parameter.cs (ParameterType): Make it a property for now although the
20364         purpose really isn't anything immediate.
20365
20366         * expression.cs (Is*Applicable): Do better checking on the parameter type
20367         of a ref/out parameter. The ones from the system assemblies are already 
20368         marked with the correct type so we don't need to do any correction.
20369
20370         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
20371         the object type is standard too so include that.
20372
20373 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20374
20375         * ecore.cs (StandardConversionExists): Augment with missing code:
20376         deal with IntConstant, LongConstants and Enumerations.
20377
20378         * assign.cs: Report the error, instead of failing silently
20379
20380         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
20381         typecontainer that they are declared, because the
20382         typecontainer/namespace will have the list of using clauses that
20383         need to be applied.
20384
20385         Assembly Attributes were escaping the normal registration
20386         mechanism. 
20387
20388         (EmitCode): Apply attributes within an EmitContext that represents
20389         the container they were declared on.
20390
20391         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
20392
20393 2002-05-06  Ravi Pratap  <ravi@ximian.com>
20394
20395         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
20396         Revamp completely - make much cleaner as we now operate only
20397         on a set of Types.
20398
20399         (FindMostSpecificSource, FindMostSpecificTarget): New methods
20400         to implement the logic detailed in the spec more correctly.
20401
20402         (UserDefinedConversion): Update accordingly.
20403
20404 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20405
20406         * statement.cs: Return flow analysis information up.
20407
20408         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
20409         and the default.
20410
20411         (token): Do not consume an extra character before calling
20412         decimal_digits.
20413
20414 2002-05-06  Piers Haken <piersh@friskit.com>
20415
20416         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
20417
20418 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20419
20420         * class.cs (Constructor.Emit): Set the IsStatic flag in the
20421         EmitContext during the instance constructor initializer
20422         resolution, to stop access to instance variables.
20423
20424         This is mandated by the spec, last paragraph of the `constructor
20425         initializers' section. 
20426
20427 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
20428
20429         * cs-parser.jay, class.cs (Accessor): new class used to represent
20430         an accessor (get or set).  In the past we used `null' to represent
20431         a missing accessor.  But this is ambiguous because there was no
20432         way to tell in abstract indexers/properties if one of them was
20433         specified.
20434
20435         Now there is a way of addressing that.
20436
20437         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
20438         instead of FindMembers.
20439
20440         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
20441         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
20442
20443         * attribute.cs: Treat indexers and properties as the same in terms
20444         of applying attributes
20445
20446         * ecore.cs (FindMostEncompassedType): Use statically initialized
20447         EmptyExpressions()s like we do elsewhere to avoid creating useless
20448         objects (and we take this out of the tight loop).
20449
20450         (GetConversionOperators): Move the code to extract the actual
20451         operators to a separate routine to clean things up.
20452
20453 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
20454
20455         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
20456         events are always registered FieldBuilders.
20457
20458         * class.cs (FieldBase): New class shared by Fields 
20459
20460         * delegate.cs: If we are a toplevel delegate, use our full name.
20461         If we are a nested delegate, then only use our tail name.
20462
20463 2002-05-02  Ravi Pratap  <ravi@ximian.com>
20464
20465         * expression.cs (IsApplicable): Ensure that we add the "&" to
20466         ref/out types before comparing it with the type of the argument.
20467
20468         (IsParamsMethodApplicable): Ditto.
20469
20470         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
20471         silly me ;-)
20472
20473         * delegate.cs : Handle the case when we have more than one applicable
20474         method. Flag an error only when we finish checking all.
20475
20476 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
20477
20478         * expression.cs: Add support for boolean static initializers.
20479
20480 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
20481
20482         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
20483
20484         * parameter.cs (ComputeParameterTypes,
20485         ComputeAndDefineParameterTypes): Better error handling: now we
20486         clear the `types' cache if we fail during any of the type lookups.
20487         We also return the status code correctly to our caller
20488
20489         * delegate.cs: If we fail to define a delegate, abort the extra
20490         steps. 
20491
20492         * expression.cs (Binary.ResolveOperator): for
20493         operator==(object,object) and operator !=(object, object) we also
20494         have to verify that there is an implicit conversion from one to
20495         the other.
20496
20497         (ArrayAccess.DoResolve): Array Access can operate on
20498         non-variables. 
20499
20500 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
20501
20502         * assign.cs (CompoundAssign): A new class used as a "flag" that
20503         the assignment actually is happening as part of a compound
20504         assignment operator.
20505
20506         During compound assignment, a few new rules exist to enable things
20507         like:
20508
20509         byte b |= 1 + 2
20510
20511         From the spec:
20512
20513         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
20514         to the type of x) if y is implicitly convertible to the type of x,
20515         and the operator is a builtin operator and the return type of the
20516         operator is explicitly convertible to the type of x. 
20517
20518         * rootcontext.cs: Reset warning level to 2.  4 catches various
20519         "interesting" features in mcs, we must clean this up at some
20520         point, but currently am trying to kill other bugs ;-)
20521
20522         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
20523         in container classes as well.  
20524
20525         * expression.cs (Binary.ResolveOperator): Handle string case
20526         before anything else (as operator overloading does emit an error
20527         before doing anything else).
20528
20529         This code could go away when we move to a table driven model, but
20530         i could not come up with a good plan last night.
20531
20532 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
20533
20534         * typemanager.cs (CSharpName): reimplementation using regex.
20535         * class.cs: added null check for fields in Emit
20536         * rootcontext.cs: set warninglevel to 4
20537
20538 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
20539
20540         * typemanager.cs (CSharpName): reimplemented with Lupus
20541         suggestion.
20542
20543 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
20544
20545         * statement.cs (If): correclty implement Resolve, because we were
20546         not catching sem errors in there.  The same process is needed
20547         everywhere else. 
20548         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
20549
20550
20551         (Statement.Warning_DeadCodeFound): Factorize code.
20552         (While): Report dead code here too.
20553
20554         (Statement): Added Resolve virtual method to allow
20555         for resolution split from the emit code.
20556
20557 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
20558
20559         * statement.cs (EmitBoolExpression): No longer try to resolve the
20560         expression here.    
20561         (MakeBoolean): New utility function that resolve, implicitly
20562         converts to boolean and tags the expression. 
20563
20564
20565         (If, Do): Implement dead code elimination.
20566         (While): Implement loop inversion
20567
20568         (Do, While, For, If): Resolve the expression prior to calling our
20569         code generation.
20570
20571 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
20572
20573         * class.cs:
20574           - added method Report28 (warning: program has more than one entry point)
20575           - added method IsEntryPoint, implements paragraph 10.1 of the spec
20576           - modified method Method.Define, the part at the end of the method
20577
20578         * rootcontext.cs: added static public Location EntryPointLocation;
20579           
20580         * ../errors/cs0028.cs : Add test case for the above warning.              
20581
20582         * typemanager.cs:
20583           - modified method CSharpName to allow arrays of primitive type to
20584             be printed nicely (e.g. instead of System.Int32[][] it now prints
20585             int[][])
20586           - added method CSharpSignature: returns the signature of a method
20587             in string format to be used in reporting errors, warnings, etc.
20588
20589         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
20590         with String.Empty.
20591
20592 2002-04-26  Ravi Pratap  <ravi@ximian.com>
20593
20594         * delegate.cs (Define): Fix extremely silly bug where I was
20595         setting the type of the 'object' parameter of the BeginInvoke
20596         method to System.IAsyncResult instead of System.Object ;-)
20597
20598 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
20599
20600         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
20601         here. 
20602
20603         (Constructor.Emit): return if we fail to initialize the
20604         constructor.  Another door closed!  
20605
20606         * expression.cs (New.DoResolve): Improve error message (from -6 to
20607         1501).  Use DeclaredOnly lookup to find the exact constructor.
20608
20609         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
20610         loop.  This is useful.
20611
20612         * cs-parser.jay: Adjust the default parameters so that destructors
20613         have the proper signature.
20614
20615 2002-04-26  Martin Baulig  <martin@gnome.org>
20616
20617         * driver.cs (LoadAssembly): If `assembly' contains any characters
20618         which are only valid in path names and not in assembly names
20619         (currently slash, backslash and point), use Assembly.LoadFrom ()
20620         instead of Assembly.Load () on the `assembly' (before iteration
20621         over the link_paths).
20622
20623 2002-04-26  Martin Baulig  <martin@gnome.org>
20624
20625         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
20626
20627 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
20628
20629         * class.cs (Property): use the new typemanager.MemberLookup
20630
20631         (TypeContainer.MemberLookup): Implement using the
20632         TypeManager.MemberLookup now. 
20633
20634         * typemanager.cs: Make MemberLookup a function of the TypeManager,
20635         and return MemberInfos, so that these can be used without an
20636         EmitContext (what we had before).
20637
20638 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
20639
20640         * expression.cs: Fix the case where the argument to params if the
20641         type of the params.  I omitted handling this before.   Fixed
20642
20643 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
20644
20645         * driver.cs: Call BootCorlib_PopulateCoreType
20646
20647         * class.cs (Property.CheckBase): Check for properties only, not
20648         for all members. 
20649
20650         * interface.cs: Temporary hack: try/catch around the
20651         CustomAttributeBuilder, because I am getting an exception that I
20652         do not understand.
20653
20654         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
20655         types whose definitions are required to be there (attributes are
20656         defined before standard types).
20657
20658         Compute definitions as we boot the various types, as they are used
20659         immediately (value_type class will need object_type, but if we do
20660         not initialize object_type, we will pass a null, which will let
20661         the runtime pick the System.Object from the existing corlib, which
20662         is not what we want).
20663
20664 2002-04-22  Patrik Torstensson <totte@labs2.com>
20665
20666         * cs-tokenizer.cs: fixed a number of trim() issues.
20667
20668 2002-04-22  Ravi Pratap  <ravi@ximian.com>
20669
20670         * expression.cs (Argument.Type): Ensure that we return the correct
20671         type when we have out or ref parameters [in which case we 
20672         append a "&"].
20673
20674 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
20675
20676         * class.cs (Property, Indexer): Allow extern modifier in there. 
20677
20678         * typemanager.cs (InitBaseTypes): Initializes object_type and
20679         value_type, since those will be used early on during the bootstrap
20680         process to compile corlib.
20681
20682         (InitCoreTypes): Move code from here to InitBaseTypes.
20683
20684 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
20685
20686         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
20687         single-dimension arrays as using the ldlen opcode.  
20688
20689         Daniel Lewis discovered this optimization.  
20690
20691         * typemanager.cs: Add signature for System.Array::get_Length
20692
20693 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20694
20695         * statement.cs: report the error when the foreach does not apply to an
20696         array nor a collection.
20697
20698 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
20699
20700         * expression.cs: Add implicit conversions to the operator ~.
20701
20702         * constant.cs (DecimalConstant.Emit): Emit decimal value.
20703
20704         * typemanager.cs: Locate the decimal constructor.
20705
20706 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20707
20708         * attribute.cs: use the new property of TypeOf.
20709         * expression.cs: added 'get' property around typearg.
20710
20711         These changes fix a build breaker reported by NickD. Is this the
20712         correct way to fix?  If not, please, revert my changes and make it
20713         work :-).
20714
20715 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
20716
20717         * attribute.cs: Add support for typeof in attribute invocations.
20718         I am not sure that this is right though.
20719
20720 2002-04-14  Duncan Mak  <duncan@ximian.com>
20721
20722         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
20723         Binary.Operator.Division case.
20724
20725 2002-04-13  Ravi Pratap  <ravi@ximian.com>
20726
20727         * class.cs (DefineType): Ensure that we do a proper check on
20728         attribute types and also register it with the TypeManager.
20729
20730         (TypeContainer.Targets): The default for attribute types is
20731         AttributeTargets.All.
20732
20733         * attribute.cs (ApplyAttributes): Registering the attribute type
20734         is done elsewhere, not when we discover we have a Usage attribute.
20735
20736 2002-04-12  Ravi Pratap  <ravi@ximian.com>
20737
20738         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
20739         and get rid of is_delegate parameter.
20740
20741         * everywhere : update.
20742
20743 2002-04-12  Ravi Pratap  <ravi@ximian.com>
20744
20745         * cs-parser.jay (compilation_unit): Revamp completely to use
20746         some new ideas that I got from Rhys' grammar to solve the problems
20747         with assembly level attributes.
20748
20749         (outer_declaration): New grammar production.
20750
20751         (attribute_sections): Add.
20752
20753         (opt_attributes): Base on attribute_sections
20754
20755         (namespace_declaration): Allow opt_attributes to tackle the case
20756         when we have assembly level attributes - we are clever in this
20757         regard now ;-)
20758
20759         * attribute.cs (ApplyAttributes): Do not worry about assembly 
20760         attributes in the non-global context.
20761
20762         * rootcontext.cs (AddGlobalAttributes): Go back to using this
20763         instead of SetGlobalAttributes.
20764
20765         * class.cs, rootcontext.cs : Ensure we define and generate 
20766         attribute types before anything else.
20767
20768         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
20769         and flag the new error -20 for the case when the attribute type
20770         does not have valid targets specified. csc does not catch this.
20771
20772         * ../errors/errors.txt : update for error # -20
20773
20774 2002-04-11  Ravi Pratap  <ravi@ximian.com>
20775
20776         * support.cs (InternalParameters.ParameterModifier): Do some null
20777         checking and return sane values.
20778
20779         * class.cs (Method.Define): If we are a PInvoke method, ensure
20780         that we are static and extern. Report error # 601
20781
20782         * ../errors/cs0601.cs : Add test case for the above error.
20783
20784 2002-04-07  Ravi Pratap  <ravi@ximian.com>
20785
20786         * rootcontext.cs (attribute_types): We need to keep type of
20787         all attribute types separately and emit code for them first.
20788
20789         (RegisterAttribute) : Implement.
20790
20791         * class.cs (DefineType): Check if the current Type is a custom
20792         attribute type and register it accordingly.
20793
20794         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
20795         adding the first attribute twice and rename to
20796
20797         (SetGlobalAttributes): this.
20798
20799         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
20800         lookups.
20801
20802         * attribute.cs (ApplyAttributes): Take an additional argument telling us
20803         if we are processing global arguments. Hmm, I am unsure of this.
20804
20805 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20806
20807         * expression.cs: added static array of strings to avoid calling
20808         Enum.ToString () for Operator in Binary. Significant recover of
20809         performance.
20810
20811 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
20812
20813         * class.cs (FindMembers): Allow the Builders of the various
20814         members to be null.  If they are skip them.  This only happens
20815         during the PInvoke declaration.
20816
20817 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
20818
20819         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
20820         failure, so we do not keep going afterwards.
20821
20822         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
20823         wanted to pass `false' as the `is_delegate' argument.  If this is
20824         the case, why not use delegate_type == null to mean `is_delegate =
20825         false' and anything else as is_delegate = true.
20826
20827 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
20828
20829         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
20830         code for the section, not the beginning of the tests.
20831
20832 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
20833
20834         * cfold.cs: Handle operator + (Enum x, Underlying x) 
20835
20836         * expression.cs (Binary): same.  Warn about errors where we have
20837         Enum/Enum in operator + as well.
20838
20839 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
20840
20841         * statement.cs:
20842                 - added support for switch(bool)
20843                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
20844                 - add TableSwitchEmit() to handle table-based switch statements
20845
20846 2002-04-05  Ravi Pratap  <ravi@ximian.com>
20847
20848         * expression.cs (Invocation.OverloadResolve): Factor out code which
20849         does parameter compatibility checking with arguments so that we can 
20850         re-use the code even from Delegate.VerifyApplicability
20851
20852         (VerifyArgumentsCompat): Move above code here.
20853
20854         * delegate.cs (VerifyApplicability): Get rid of duplicate code
20855         and instead make a call to the above method.
20856
20857 2002-03-31  Ravi Pratap  <ravi@ximian.com>
20858
20859         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
20860         We use it to keep track of classes which are attribute types.
20861
20862 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
20863
20864         * delegate.cs (Delegate.Define): Correctly define the types in the
20865         presence of fixed and array parameters.
20866
20867         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
20868         doing FindMembers.
20869
20870         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
20871         include NonPublic after the first iteration.
20872
20873         * class.cs (Indexer.CheckBase): Only check if both parents are
20874         non-null. 
20875
20876         * cs-parser.jay (accessor_body): If empty, set to null.
20877
20878         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
20879         same code path here to resolve constants names that we did have in
20880         MemberAccess.DoResolve.  There is too much code duplicated here.
20881
20882 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
20883
20884         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
20885
20886         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
20887         to MakeUnionSet.
20888
20889         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
20890         tokens, numbers and strings.
20891
20892         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
20893         parenthesis.
20894
20895         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
20896         asyncronous parameters and the regular parameters.  
20897
20898         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
20899         specify the target directory.
20900
20901         * expression.cs: (This.DoResolve): Simplify
20902         (As.Emit): Optimize, do not generate IsInst if the expression is
20903         always of the given type.
20904
20905         (Is.DoResolve): Bug fix, we were reporting both always/never for
20906         the is expression.
20907
20908         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
20909         creating too many unnecessary arrays.
20910
20911 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
20912
20913         * class.cs (EmitFieldInitializer): Use Assign expression to assign
20914         fields instead of rolling our own initializer.   Takes care of all
20915         implicit conversions, and drops unnecessary static checks/argument.
20916
20917 2002-03-31  Dick Porter  <dick@ximian.com>
20918
20919         * driver.cs: use the GetDirectories() return values properly, and
20920         use "/" as path separator.
20921
20922 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
20923
20924         * expression.cs (Unary): Optimize - - expr into expr.
20925         (Binary): Optimize a + (-b) into a -b.
20926
20927         * codegen.cs (CodeGen): Made all methods static.
20928
20929 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
20930
20931         * rootcontext.cs: 
20932
20933         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
20934         TypeBuilder property.
20935
20936         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
20937         instead. 
20938
20939         * tree.cs: Removed the various RecordXXXX, and replaced with a
20940         single RecordDecl.  Removed all the accessor methods, and just
20941         left a single access point Type 
20942
20943         * enum.cs: Rename DefineEnum to DefineType.
20944
20945         * decl.cs: New abstract method `DefineType' used to unify the
20946         Defines for Enumerations, Interfaces, TypeContainers and
20947         Delegates.
20948
20949         (FindType): Moved LookupInterfaceOrClass here.  Moved the
20950         LookupBaseClasses method that used to live in class.cs and
20951         interface.cs here, and renamed to FindType.
20952
20953         * delegate.cs: Implement DefineType.  Take advantage of the
20954         refactored pattern for locating the parent builder without taking
20955         the parent_builder argument (which we know does not work if we are
20956         nested, and triggering a toplevel definition).
20957
20958 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
20959
20960         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
20961         accessibility of a member has changed during override and report
20962         an error if so.
20963
20964         * class.cs (Method.Define, Property.Define): Only complain on
20965         overrides if the method is private, any other accessibility is
20966         fine (and since we just checked the permission is the same, we are
20967         good to go).
20968
20969         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
20970         and elif are processed always.  The other pre-processing
20971         directives are only processed if we are "taking" the path
20972
20973 2002-03-29  Martin Baulig  <martin@gnome.org>
20974
20975         * class.cs (Method.Emit): Only emit symbolic debugging info if the
20976         current location is not Null.
20977
20978         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
20979         a separate method so we can profile it.
20980
20981         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
20982         `span.Seconds' are just seconds, but no minutes or hours.
20983         (MainDriver): Profile the CodeGen.SaveSymbols calls.
20984
20985 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
20986
20987         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
20988         Remove the gratuitous set of Final:
20989
20990                                 // If an interface implementation, then we can set Final.
20991                                 if (((flags & MethodAttributes.Abstract) == 0) &&
20992                                     implementing.DeclaringType.IsInterface)
20993                                         flags |= MethodAttributes.Final;
20994
20995         I do not know what I was smoking when I used that.
20996
20997
20998         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
20999         step into fixing the name resolution issues for delegates and
21000         unifying the toplevel name resolution.
21001
21002 2002-03-28  Martin Baulig  <martin@gnome.org>
21003
21004         * class.cs (Method.Emit): If we have a symbol writer, call its
21005         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
21006         tell it about the current method.
21007
21008         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
21009         writer that we're going to emit the first byte of IL code for a new
21010         statement (a new source line).
21011         (EmitContext.EmitTopBlock): If we have a symbol writer, call
21012         EmitContext.Mark() before emitting any code.
21013
21014         * location.cs (SymbolDocument): Return null when we're Null.
21015
21016         * statement.cs (Statement): Moved the `Location loc' variable here.
21017         (Statement.EmitBoolExpression): If we have a symbol writer, call
21018         ec.Mark() before emitting any code to tell it that we're at the
21019         beginning of a new statement.
21020         (StatementExpression): Added `Location' argument to the constructor.
21021         (Block): Added public readonly variable `StartLocation' and public
21022         variable `EndLocation'.  The latter is to be set using SetEndLocation().
21023         (Block): Added constructor which takes a start and end location.
21024         (Block.SetEndLocation): New method. This sets the end location.
21025         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
21026         local variables we create.
21027         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
21028         each statement and do also mark the begin and end of the block.
21029
21030         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
21031         tell it the current lexer.Location, use Location.Null for the end of the
21032         block.
21033         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
21034         current block, set its end location using SetEndLocation().
21035         (statement_expression): StatementExpression constructor now takes the
21036         lexer.Location as additional argument.
21037         (for_statement, declare_local_variables): Likewise.
21038         (declare_local_variables): When creating a new implicit block, use the
21039         new Block constructor and pass it the lexer.Location.
21040
21041 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
21042
21043         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
21044         members also on the parent interfaces recursively.
21045
21046 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
21047
21048         * report.cs: Use new formats, since Gonzalo finished the missing
21049         bits. 
21050
21051         * expression.cs (Binary.ResolveOperator): added missing operator|
21052         operator& and operator^ for bool/bool.
21053
21054         * cs-parser.jay: CheckDef now takes a Location argument that is
21055         used to report errors more precisly (instead of reporting the end
21056         of a definition, we try to track something which is a lot closer
21057         to the source of the problem).
21058
21059         * cs-tokenizer.cs: Track global token use, so we can properly flag
21060         the use of #define/#undef after the first token has been seen.
21061
21062         Also, rename the reportXXXX to Error_DescriptiveName
21063
21064         * decl.cs (DeclSpace.IsTopLevel): Move property here from
21065         TypeContainer, so that Enum and Interface can use this too.
21066
21067         * class.cs (TypeContainer.LookupInterfaceOrClass,
21068         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
21069         `builder' argument.  Typically this was used to pass the parent
21070         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
21071         the definition).  
21072
21073         The problem is that a nested class could trigger the definition of
21074         a toplevel class, and the builder would be obviously wrong in that
21075         case. 
21076
21077         So we drop this argument, and we compute dynamically the
21078         TypeBuilder/ModuleBuilder (the correct information was available
21079         to us anyways from DeclSpace.Parent)
21080
21081         * interface.cs (Interface.DefineInterface): Drop builder
21082         parameter cleanup like class.cs
21083
21084         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
21085         like class.cs
21086
21087         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
21088         values. 
21089
21090         (Try.Emit): Propagate the returns value from the statement.
21091
21092         (Return.Emit): Even if we are leavning 
21093
21094         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
21095
21096         * modifiers.cs: Fix the computation of MethodAttributes flags.
21097
21098 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
21099
21100         * driver.cs: allow compilation of files that start with '/'.
21101         Add a default case when checking the argument of --target.
21102
21103 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
21104
21105         * interface.cs: Implement the same search algorithm for types in
21106         the interface code.
21107
21108         * delegate.cs: Do not allow multiple definition.
21109
21110         * Recovered ChangeLog that got accidentally amputated
21111
21112         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
21113
21114         * rootcontext.cs: Load manually enum to allow core classes to
21115         contain enumerations.
21116
21117         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
21118         Update to new static methods in TypeManager.
21119
21120         * typemanager.cs (GetMethod, GetConstructor): Use our
21121         implementation of FindMembers to find the members, since during
21122         corlib compilation, the types are TypeBuilders and GetMethod and
21123         GetConstructor do not work.
21124
21125         Make all methods in TypeManager static.
21126
21127         (InitCodeHelpers): Split the functionality from
21128         the InitCodeTypes function.
21129
21130         * driver.cs: Call InitCodeHelpers after we have populated the
21131         types. 
21132
21133         * cs-parser.jay (delegate_declaration): we did not used to compute
21134         the delegate name correctly for void delegates.
21135
21136 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
21137
21138         * rootcontext.cs (RootContext): Init the interface_resolve_order
21139         and type_container_resolve_order always.
21140
21141         (ResolveCore, BootstrapCorlib_ResolveClass,
21142         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
21143         compiler when compiling with --nostdlib
21144
21145         * class.cs (TypeContainer.DefineType): Check that our parent is
21146         not null.  This test is most important when we are bootstraping
21147         the core types.
21148
21149         * codegen.cs: Split out the symbol writing code.
21150
21151 2002-03-25  Martin Baulig  <martin@gnome.org>
21152
21153         * driver.cs (-g): Made -g an alias for --debug.
21154
21155 2002-03-24  Martin Baulig  <martin@gnome.org>
21156
21157         * codegen.cs (SymbolWriter): New public variable. Returns the
21158         current symbol writer.
21159         (CodeGen): Added `bool want_debugging_support' argument to the
21160          constructor. If true, tell the ModuleBuild that we want debugging
21161         support and ask it for the ISymbolWriter.
21162         (Save): If we have a symbol writer, call it's Close() method after
21163         saving the assembly.
21164
21165         * driver.c (--debug): New command line argument to create a
21166         debugger information file.
21167
21168         * location.cs (SymbolDocument): New public property. Returns an
21169         ISymbolDocumentWriter object for the current source file or null
21170         if we don't have a symbol writer.
21171
21172 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
21173
21174         * driver.cs (LoadAssembly): Correctly return when all the paths
21175         have been tried and not before.
21176
21177         * statement.cs (Switch.Emit): return the actual coverage for this
21178         statement (returns/not-returns)
21179
21180         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
21181         switch of the statement if we are the last switch section.  That
21182         kills two problems: try/catch problems (we used to emit an empty
21183         nop at the end) and switch statements where all branches would
21184         return. 
21185
21186 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
21187
21188         * driver.cs: Add default assemblies (the equivalent to the
21189         Microsoft CSC.RSP file)
21190
21191         * cs-tokenizer.cs: When updating `cols and setting it to zero,
21192         also update tokens_seen and set it to false.
21193
21194         * driver.cs: Implement --recurse for Mike.
21195
21196         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
21197         correctly splitting out the paths.
21198
21199 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
21200
21201         * interface.cs (Interface.PopulateProperty): Instead of using
21202         `parent' as the declaration space for the set parameters, use
21203         `this' 
21204
21205         * support.cs (InternalParameters): InternalParameters constructor
21206         takes a DeclSpace instead of a TypeContainer.
21207
21208         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
21209         types are being initialized, load the address of it before calling
21210         the function.  
21211
21212         (New): Provide a mechanism to disable the generation of local
21213         value type temporaries when the caller will be providing us with
21214         an address to store it.
21215
21216         (ArrayCreation.EmitDynamicInitializers): Use it.
21217
21218 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
21219
21220         * expression.cs (Invocation.EmitArguments): Only probe for array
21221         property if there is more than one argument.  Sorry about that.
21222
21223         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
21224         empty param arrays.
21225
21226         * class.cs (Method.LabelParameters): Fix incorrect code path that
21227         prevented the `ParamArrayAttribute' from being applied to the
21228         params attribute.
21229
21230 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
21231
21232         * support.cs (ReflectionParameters): Correctly compute whether the
21233         last argument is a params array.  Fixes the problem with
21234         string.Split ('a')
21235
21236         * typemanager.cs: Make the assemblies array always be non-null
21237         (empty, but non-null)
21238
21239         * tree.cs (RecordDecl): New function that abstracts the recording
21240         of names.  This reports error 101, and provides a pointer to the
21241         previous declaration.  Fixes a crash in the compiler.
21242
21243         * cs-parser.jay (constructor_declaration): Update to new grammar,
21244         and provide a constructor_body that can be empty.
21245
21246 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
21247
21248         * driver.cs: Add support for --resources.
21249
21250         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
21251         Make all types for the various array helper methods be integer.
21252
21253         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
21254         CheckState to ConvCast.
21255
21256         (ConvCast): Now it takes a `checked' state argument, to avoid
21257         depending on the emit context for the conversion, and just using
21258         the resolve time setting.
21259
21260         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
21261         instead of Invocation.EmitArguments.  We do not emit the original
21262         arguments, instead we emit those which have been converted to
21263         unsigned int expressions.
21264
21265         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
21266
21267         * codegen.cs: ditto.
21268
21269         * expression.cs (LocalVariableReference): Drop the use of the
21270         Store function that depended on the variable index.
21271
21272         * statement.cs (VariableInfo): Drop the `Idx' property from this
21273         class, as this is not taking into account the indexes for
21274         temporaries tat we generate during the execution, getting the
21275         indexes wrong.
21276
21277         * class.cs: First emit class initializers, then call the parent
21278         constructor. 
21279
21280         * expression.cs (Binary): Fix opcode emision.
21281         (UnaryMutator.EmitCode): Support checked code generation
21282
21283         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
21284         matches for events for both the Static and Instance scans,
21285         pointing to the same element.   Fix that.
21286
21287 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
21288
21289         * rootcontext.cs (ResolveTree): Always set the
21290         interface_resolve_order, because nested interfaces will be calling
21291         into us.
21292
21293         * class.cs (GetInterfaceOrClass): Track the same resolution
21294         process used by TypeManager.LookupType.  This fixes the nested
21295         type lookups in class declarations (separate path from
21296         LookupType). 
21297
21298         (TypeContainer.DefineType): Also define nested interfaces.
21299         (TypeContainer.RegisterOrder): New public function used to
21300         register the order in which child interfaces need to be closed.
21301
21302         Nested interfaces need to be closed after their parents have been
21303         created. 
21304
21305         * interface.cs (InterfaceAttr): Put all the logic for computing
21306         the interface attribute here. 
21307
21308         (DefineInterface): Register our interface order with the
21309         RootContext or with the TypeContainer depending on the case.
21310
21311 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
21312
21313         * cs-parser.jay: rework foreach statement to work with the new
21314         changes to the policy on SimpleNames.
21315
21316         * report.cs: support Stacktrace on warnings as well.
21317
21318         * makefile: drop --unsafe and /unsafe from the compile.
21319
21320 2002-03-13  Ravi Pratap  <ravi@ximian.com>
21321
21322         * ecore.cs (StandardConversionExists): Modify to take an Expression
21323         as the first parameter. Ensure we do null -> reference type conversion
21324         checking.
21325
21326         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
21327         temporary Expression objects.
21328
21329 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
21330
21331         * interface.cs: workaround bug in method overloading resolution
21332         (there is already a bugzilla bug for it).
21333
21334 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
21335
21336         We could also solve this problem by having a separate path for
21337         performing type lookups, instead of DoResolve, we could have a
21338         ResolveType entry point, and only participating pieces of the
21339         production (simplename, deref, array) would implement this. 
21340
21341         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
21342         signal SimpleName to only resolve type names and not attempt to
21343         resolve anything else.
21344
21345         * expression.cs (Cast): Set the flag.
21346
21347         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
21348
21349         * class.cs: Only report 108 if there is no `new' modifier.
21350
21351         * cs-parser.jay: rework foreach statement to work with the new
21352         changes to the policy on SimpleNames.
21353         
21354         * report.cs: support Stacktrace on warnings as well.
21355
21356         * makefile: drop --unsafe and /unsafe from the compile.
21357
21358 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
21359
21360         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
21361         lookups here, instead of doing that at parse time.  This means
21362         that our grammar will not introduce `LocalVariableReferences' as
21363         expressions at this point.  That solves the problem of code like
21364         this:
21365
21366         class X {
21367            static void Main ()
21368            { int X = 1;
21369             { X x = null }}}
21370
21371         This is only half the fix.  The full fix requires parameters to
21372         also be handled in this way.
21373
21374         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
21375         makes the use more obvious of the DeclSpace.  The
21376         ec.TypeContainer.TypeBuilder is now only used to pull the
21377         TypeBuilder for it.
21378
21379         My theory is that I can get rid of the TypeBuilder completely from
21380         the EmitContext, and have typecasts where it is used (from
21381         DeclSpace to where it matters).  
21382
21383         The only pending problem is that the code that implements Aliases
21384         is on TypeContainer, and probably should go in DeclSpace.
21385
21386         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
21387         lookups here, instead of doing that at parse time.  This means
21388         that our grammar will not introduce `LocalVariableReferences' as
21389         expressions at this point.  That solves the problem of code like
21390         this:
21391
21392         class X {
21393            static void Main ()
21394            { int X = 1;
21395             { X x = null }}}
21396
21397         This is only half the fix.  The full fix requires parameters to
21398         also be handled in this way.
21399
21400         * class.cs (Property.DefineMethod): When implementing an interface
21401         method, set newslot, when implementing an abstract method, do not
21402         set the flag (before we tried never setting it, or always setting
21403         it, which is the difference).
21404         (Indexer.DefineMethod): same.
21405         (Method.DefineMethod): same.
21406
21407         * ecore.cs: Only set the status used flag if we get back a Field.
21408
21409         * attribute.cs: Temporary hack, so Paolo can keep working.
21410
21411 2002-03-08  Ravi Pratap  <ravi@ximian.com>
21412
21413         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
21414         the unmanaged type in the case we have a MarshalAs attribute.
21415
21416         (Resolve): Handle the case when we are parsing the special MarshalAs
21417         attribute [we need to store the unmanaged type to use later]
21418
21419         * typemanager.cs (marshal_as_attr_type): Built in type for the 
21420         MarshalAs Attribute.
21421
21422         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
21423         on parameters and accordingly set the marshalling info.
21424
21425 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
21426
21427         * class.cs: Optimizing slightly by removing redundant code after
21428         we switched to the `NoTypes' return value.
21429         (Property.DefineMethod): use NoTypes here too.
21430
21431         This fixes the bug I introduced in my last batch of changes.
21432
21433 2002-03-05  Ravi Pratap  <ravi@ximian.com>
21434
21435         * tree.cs (RecordEnum): Add. We now keep track of enums too.
21436
21437         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
21438         Enums since those are types too. 
21439
21440         * cs-parser.jay (enum_declaration): Record enums as we parse them.
21441
21442         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
21443         thanks to a call during the lookup process.
21444
21445 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
21446
21447         * statement.cs (Foreach): Lots of work to accomodate a particular
21448         kind of foreach statement that I had not kept in mind.  It is
21449         possible to have foreachs on classes that provide a GetEnumerator
21450         method that return objects that implement the "pattern" for using
21451         a foreach, there is no need to support GetEnumerator
21452         specifically. 
21453
21454         This is needed to compile nant.
21455
21456         * decl.cs: Only report 114 if the member is not `Finalize' and if
21457         the warning level is at least 2.
21458
21459         * class.cs: Moved the compare function from Method to
21460         MethodSignature. 
21461
21462         (MethodSignature.InheritableMemberSignatureCompare): Add new
21463         filter function that is used to extract inheritable methods from a
21464         class. 
21465
21466         (Method.Define): Use the new `inheritable_method_signature_filter'
21467         delegate
21468
21469         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
21470         command. 
21471
21472 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
21473
21474         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
21475
21476         * cs-parser.jay: Add opt_semicolon to the interface declaration.
21477
21478         * expression.cs: Pass location information to
21479         ConvertImplicitStandard. 
21480
21481         * class.cs: Added debugging code to track return values from
21482         interfaces. 
21483
21484 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
21485
21486         * expression.cs (Is.DoResolve): If either side of the `is' is an
21487         interface, do not flag the warning.
21488
21489         * ecore.cs (ImplicitReferenceConversion): We need a separate test
21490         for interfaces
21491
21492         * report.cs: Allow for --fatal to be used with --probe.
21493
21494         * typemanager.cs (NoTypes): Move the definition for the empty Type
21495         array here. 
21496
21497         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
21498         properties. 
21499         (TypeContainer.DefineProxy): New function used to proxy to parent
21500         implementations when implementing interfaces.
21501         (TypeContainer.ParentImplements): used to lookup if our parent
21502         implements a public function that is required by an interface.
21503         (TypeContainer.VerifyPendingMethods): Hook this up.
21504
21505         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
21506         `modules' and `assemblies' arraylists into arrays.  We only grow
21507         these are the very early start up of the program, so this improves
21508         the speedof LookupType (nicely measured).
21509
21510         * expression.cs (MakeByteBlob): Replaced unsafe code with
21511         BitConverter, as suggested by Paolo.
21512
21513         * cfold.cs (ConstantFold.Binary): Special case: perform constant
21514         folding of string concatenation, but if either side is a string,
21515         and the other is not, then return null, and let the runtime use
21516         the concatenation on the string plus the object (using
21517         `Object.ToString'). 
21518
21519 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
21520
21521         Constant Folding has been implemented now.
21522
21523         * expression.cs (Unary.Reduce): Do not throw an exception, catch
21524         the error instead on types that are not supported in one's
21525         complement. 
21526
21527         * constant.cs (Constant and all children): New set of functions to
21528         perform implict and explicit conversions.
21529
21530         * ecore.cs (EnumConstant): Implement the new functions to perform
21531         conversion by proxying to the child expression.
21532
21533         * codegen.cs: (ConstantCheckState): Constant evaluation has its
21534         own separate setting that can not be turned off from the command
21535         line using --unchecked or --checked and is only controlled using
21536         the checked/unchecked statements and expressions.  This setting is
21537         used by the constant folder to flag errors.
21538
21539         * expression.cs (CheckedExpr, UncheckedExpr): Set the
21540         ConstantCheckState as well.   
21541
21542         During Resolve, they also have to flag the state, because the
21543         constant folder runs completely in the Resolve phase.
21544
21545         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
21546         well.
21547
21548 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
21549
21550         * cfold.cs: New file, this file contains the constant folder.
21551
21552         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
21553         argument to track whether we are using the resulting address to
21554         load or store a value and provide better error messages. 
21555
21556         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
21557         new AddressOf arguments.
21558
21559         * statement.cs (Foreach.EmitCollectionForeach): Update
21560
21561         * expression.cs (Argument.Emit): Call AddressOf with proper
21562         arguments to track usage.
21563
21564         (New.DoEmit): Call AddressOf with new arguments.
21565
21566         (Unary.Emit): Adjust AddressOf call.
21567
21568 2002-03-01  Ravi Pratap  <ravi@ximian.com>
21569
21570         * cs-parser.jay (member_access): Change the case for pre-defined types
21571         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
21572         this suggestion.
21573
21574         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
21575         a method body.
21576
21577         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
21578         essentially like methods and apply attributes like MethodImplOptions to them too.
21579
21580         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
21581         not being null.
21582
21583         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
21584         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
21585         is the DeclSpace.
21586
21587         * Update code everywhere accordingly.
21588
21589         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
21590
21591         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
21592
21593 2002-02-28  Ravi Pratap  <ravi@ximian.com>
21594
21595         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
21596         try performing lookups against those instead of jumping straight into using
21597         the 'using' clauses.
21598
21599         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
21600
21601         (LookupType): Perform lookups in implicit parents too.
21602
21603         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
21604         sequence as RootContext.LookupType. 
21605
21606         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
21607         the various cases of namespace lookups into this method.
21608
21609 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
21610
21611         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
21612         in positional arguments)
21613
21614         * class.cs (Operator): Update the AllowedModifiers to contain
21615         extern. 
21616
21617         * cs-parser.jay: Update operator declaration to allow for the
21618         operator body to be empty.
21619
21620         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
21621         values. 
21622
21623 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
21624
21625         * class.cs (Method.Emit): Label parameters.
21626
21627         * driver.cs: Return 1 or 0 as the program exit code.
21628
21629 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
21630
21631         * expression.cs: Special case the `null' object when trying to
21632         auto-compute the type, as anything can be explicitly converted to
21633         that. 
21634
21635         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
21636         spotting this Paolo.
21637
21638         (Expression.ImplicitNumericConversion): Perform comparissions of
21639         the type using the underlying type in the case of an enumeration
21640         rather than using the enumeration type for the compare.
21641
21642         Cope with the underlying == type case, which is not possible to
21643         catch before. 
21644
21645         (Expression.ConvertNumericExplicit): Perform comparissions of
21646         the type using the underlying type in the case of an enumeration
21647         rather than using the enumeration type for the compare.
21648
21649         * driver.cs: If the user does not supply an extension, assume .exe
21650
21651         * cs-parser.jay (if_statement): Rewrote so that we can track the
21652         location for the if statement.
21653
21654         * expression.cs (Binary.ConstantFold): Only concat strings when
21655         the operation is "+", not everything ;-)
21656
21657         * statement.cs (Statement.EmitBoolExpression): Take a location
21658         argument. 
21659         (If, While, Do): Track location.
21660
21661         * expression.cs (Binary.ResolveOperator): In the object + string
21662         case, I was missing a call to ConvertImplicit
21663
21664 2002-02-25  Ravi Pratap  <ravi@ximian.com>
21665
21666         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
21667         Location arguments. Ensure we use RootContext.LookupType to do our work
21668         and not try to do a direct Type.GetType and ModuleBuilder.GetType
21669
21670         * interface.cs (PopulateMethod): Handle the type of the parameter being
21671         null gracefully.
21672
21673         * expression.cs (Invocation.BetterFunction): Handle the case when we 
21674         have a params method with no fixed arguments and a call is made with no
21675         arguments.
21676
21677 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
21678
21679         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
21680         the verbatim-string-literal
21681
21682         * support.cs (InternalParameters.ParameterModifier): handle null
21683         fixed parameters.
21684         (InternalParameters.ParameterType): ditto.
21685
21686         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
21687         duplicating the name of the variable parameter.
21688         (GetParameterByName): Fix bug where we were not looking up array
21689         paramters if they were the only present (thanks Paolo!).
21690         (GetParameterInfo): We only have an empty set of types if both
21691         fixed and array are set to null.
21692         (GetParameterInfo-idx): Handle FixedParameter == null
21693
21694         * cs-parser.jay: Handle the case where there is no catch
21695         statements (missing null test).
21696
21697 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
21698
21699         * driver.cs (MainDriver): Be conservative on our command line
21700         handling.
21701
21702         Catch DirectoryNotFoundException when calling GetFiles.
21703
21704         (SplitPathAndPattern): Used to split the input specification into
21705         a path and a pattern that we can feed to Directory.GetFiles.
21706
21707 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
21708
21709         * statement.cs (Fixed): Implement the last case of the Fixed
21710         statement (string handling).
21711
21712         * expression.cs (StringPtr): New class used to return a char * to
21713         a string;  Used by the Fixed statement.
21714
21715         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
21716
21717         * expression.cs (Binary.ResolveOperator): Remove redundant
21718         MemberLookup pn parent type.
21719         Optimize union call, we do not need a union if the types are the same.
21720         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
21721         type.
21722
21723         Specialize the use of MemberLookup everywhere, instead of using
21724         the default settings. 
21725
21726         (StackAlloc): Implement stackalloc keyword.
21727
21728         * cs-parser.jay: Add rule to parse stackalloc.
21729
21730         * driver.cs: Handle /h, /help, /?
21731
21732         * expression.cs (MakeByteBlob): Removed the hacks we had in place
21733         before we supported unsafe code.
21734
21735         * makefile: add --unsafe to the self compilation of mcs.
21736
21737 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
21738
21739         * expression.cs (PointerArithmetic): New class that is used to
21740         perform pointer arithmetic.
21741         (Binary.Resolve): Handle pointer arithmetic
21742         Handle pointer comparission.
21743         (ArrayPtr): Utility expression class that is used to take the
21744         address of an array.
21745
21746         (ElementAccess): Implement array access for pointers
21747
21748         * statement.cs (Fixed): Implement fixed statement for arrays, we
21749         are missing one more case before we are done.
21750
21751         * expression.cs (Indirection): Implement EmitAssign and set the
21752         ExprClass to Variable.  This allows pointer dereferences to be
21753         treated as variables, and to have values assigned to them.
21754
21755         * ecore.cs (Expression.StoreFromPtr): New utility function to
21756         store values dereferencing.
21757
21758 2002-02-20  Ravi Pratap  <ravi@ximian.com>
21759
21760         * expression.cs (Binary.ResolveOperator): Ensure that we are
21761         not trying to operate on a void type - this fixes the reported
21762         bug.
21763
21764         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
21765         the parent implementation is sealed.
21766
21767         * ../errors/cs0239.cs : Add.
21768
21769         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
21770
21771         * typemanager.cs (unverifiable_code_type): Corresponds to 
21772         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
21773         which have unsafe code in them.
21774
21775         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
21776         unsafe context.
21777
21778 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
21779
21780         * cs-tokenizer.cs: Add support for @"litreal strings"
21781
21782         Make tokenizer accept pre-processor directives
21783         on any column (remove the old C-like limitation). 
21784
21785         * rootcontext.cs (EmitCode): Emit any global attributes.
21786         (AddGlobalAttributes): Used to keep track of assembly attributes. 
21787
21788         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
21789
21790         * cs-parser.jay: Add support for global attributes.  
21791
21792 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
21793
21794         * expression.cs (Indirection): New helper class.  Unary will
21795         create Indirection classes to be able to implement the
21796         IMemoryLocation interface on it.
21797
21798 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
21799
21800         * cs-parser.jay (fixed_statement): reference the right statement.
21801
21802         * statement.cs (Fixed.Emit): Finish implementing the fixed
21803         statement for the &x case.
21804
21805 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
21806
21807         * class.cs (Property.Define, Method.Define): Remove newslot when
21808         `implementing'.  
21809
21810         * modifiers.cs: My use of NewSlot when `Abstract' was set was
21811         wrong.  NewSlot should only be used if the `new' keyword is present.
21812
21813         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
21814         locating our system dir.  Sorry about this.
21815
21816 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
21817
21818         * driver.cs (GetSystemDir): Compute correctly the location of our
21819         system assemblies.  I was using the compiler directory instead of
21820         the library directory.
21821
21822 2002-02-13  Ravi Pratap  <ravi@ximian.com>
21823
21824         * expression.cs (BetterFunction): Put back in what Miguel commented out
21825         since it is the correct fix. The problem is elsewhere ;-)
21826
21827         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
21828         parameters of the parms method are themselves compatible or not !
21829
21830         (StandardConversionExists): Fix very dangerous bug where we were forgetting
21831         to check that a class implements an interface before saying that an implicit
21832         conversion was allowed. Use ImplementsInterface to do the checking.
21833
21834 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
21835
21836         * class.cs (Method.Define): Track whether we are an explicit
21837         implementation or not.  And only call DefineMethodOverride if we
21838         are an explicit implementation.
21839
21840         (Property.DefineMethod): Ditto.
21841
21842 2002-02-11  Ravi Pratap  <ravi@ximian.com>
21843
21844         * expression.cs (BetterFunction): Catch hideous bug which was
21845          preventing us from detecting ambiguous calls due to implicit casts i.e
21846         cs0121.
21847
21848 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
21849
21850         * support.cs (Pair): Remove un-needed method.  I figured why I was
21851         getting the error in cs-parser.jay, the variable in a foreach loop
21852         is readonly, and the compiler does not really treat this as a variable.
21853
21854         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
21855         instead of EQUALS in grammar.  
21856
21857         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
21858
21859         * expression.cs (Unary.DoResolve): Check whether the argument is
21860         managed or not.
21861
21862 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
21863
21864         * support.cs: Api for Pair to set a value.  Despite the fact that
21865         the variables are public the MS C# compiler refuses to compile
21866         code that accesses the field if the variable is part of a foreach
21867         statement. 
21868
21869         * statement.cs (Fixed): Begin implementation of the fixed
21870         statement.
21871
21872         (Block.AddVariable): Return the VariableInfo on success and null
21873         on failure instead of true/false. 
21874
21875         * cs-parser.jay (foreach): Catch errors on variables already
21876         defined (we were ignoring this value before) and properly unwind
21877         the block hierarchy
21878
21879         (fixed_statement): grammar for the fixed statement.
21880
21881 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
21882
21883         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
21884         pointer types to be incretemented.
21885
21886         (SizeOf): Implement.
21887
21888         * cs-parser.jay (pointer_member_access): Implement
21889         expr->IDENTIFIER production.
21890
21891         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
21892         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
21893         on safe contexts.
21894
21895         (Unary): Implement indirection.
21896
21897         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
21898         use in non-unsafe context).
21899
21900         (SimpleName.DoResolve): Check for pointers in field access on safe
21901         contexts. 
21902
21903         (Expression.LoadFromPtr): Factor the load-indirect code in this
21904         function.  This was duplicated in UnboxCast and ParameterReference
21905
21906 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
21907
21908         * expression.cs (ComposedCast): report an error if a pointer cast
21909         is used in a safe region.
21910
21911         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
21912         pointer type casts in unsafe context.
21913
21914         * codegen.cs (EmitContext): Set up IsUnsafe.
21915
21916         * cs-parser.jay (non_expression_type): Add productions for pointer
21917         casts. 
21918
21919         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
21920         code.  We should not use force into static mode if the method is
21921         not virtual.  Fixes bug in MIS
21922
21923         * statement.cs (Do.Emit, While.Emit, For.Emit,
21924         Statement.EmitBoolExpression): Add support to Do and While to
21925         propagate infinite loop as `I do return' semantics.
21926
21927         Improve the For case to also test for boolean constants.
21928
21929         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
21930         to the list of attributes we can add.
21931
21932         Remove `EmitContext' argument.
21933
21934         * class.cs (Method.Define): Apply parameter attributes.
21935         (Constructor.Define): Apply parameter attributes.
21936         (MethodCore.LabelParameters): Move here the core of labeling
21937         parameters. 
21938
21939         * support.cs (ReflectionParameters.ParameterModifier,
21940         InternalParameters.ParameterModifier): Use IsByRef on the type and
21941         only return the OUT bit for these parameters instead of in/out/ref
21942         flags.
21943
21944         This is because I miss-understood things.  The ParameterInfo.IsIn
21945         and IsOut represent whether the parameter has the [In] and [Out]
21946         attributes set.  
21947
21948 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
21949
21950         * ecore.cs (FieldExpr.Emit): Release temporaries.
21951
21952         * assign.cs (LocalTemporary.Release): new function.
21953
21954         * codegen.cs (EmitContext.GetTemporaryStorage,
21955         EmitContext.FreeTemporaryStorage): Rework the way we deal with
21956         temporary storage.  Now we can "put back" localbuilders when we
21957         are done with them
21958
21959 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
21960
21961         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
21962         need to make a copy of the variable to generate verifiable code.
21963
21964 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
21965
21966         * driver.cs: Compute dynamically the system directory.
21967
21968         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
21969         Slower, but more generally useful.  Used by the abstract
21970         registering implementation. 
21971
21972         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
21973         the rules for the special rule on Type/instances.  First check if
21974         we have the same name, and if so, try that special static path
21975         rather than the instance path.
21976
21977 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
21978
21979         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
21980         for, while and if.
21981
21982         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
21983         Enum, ValueType, Delegate or Array for non-corlib compiles.
21984
21985         * cs-tokenizer.cs: Catch long identifiers (645)
21986
21987         * typemanager.cs (IndexerPropetyName): Ravi never tested this
21988         piece of code.
21989
21990         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
21991         fix, we were returning too early, so we were not registering
21992         pending methods from abstract classes.
21993
21994         Do not register pending methods if the class is abstract.
21995
21996         * expression.cs (Conditional.DoResolve): Report circular implicit
21997         conversions when we neecd to compute it for conditional
21998         expressions. 
21999
22000         (Is.DoResolve): If the expression is always of the provided type,
22001         flag warning 183.  If the expression can not ever be of the
22002         provided type flag warning 184.
22003
22004         * class.cs: Catch 169 as well.
22005
22006         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
22007         read. 
22008
22009 2002-01-18  Nick Drochak  <ndrochak@gol.com>
22010
22011         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
22012
22013 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
22014
22015         * interface.cs: (PopulateMethod): Check for pointers being defined
22016         only if the unsafe context is active.
22017         (PopulateProperty): ditto.
22018         (PopulateIndexer): ditto.
22019
22020         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
22021         specified.  If pointers are present, make sure that they are
22022         present in an unsafe context.
22023         (Constructor, Constructor.Define): ditto.
22024         (Field, Field.Define): ditto.
22025         (Property, Property.Define): ditto.
22026         (Event, Event.Define): ditto.
22027
22028         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
22029         hashtable if there are classes or structs defined.
22030
22031         * expression.cs (LocalVariableReference.DoResolve): Simplify this
22032         code, as the constant resolution moved.
22033
22034         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
22035         the metadata, so we can flag error 133. 
22036
22037         * decl.cs (MemberCore.UnsafeOK): New function to test that a
22038         pointer is being declared in an unsafe context.
22039
22040 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
22041
22042         * modifiers.cs (Modifiers.Check): Require a Location argument.
22043         Report error 227 for Unsafe use.
22044
22045         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
22046
22047         * statement.cs (For.Emit): If the test is null, then report that
22048         we do `return', as we wont reach anything afterwards.
22049
22050         (Switch.SwitchGoverningType): Track the expression that matched
22051         the conversion.
22052
22053         * driver.cs: Allow negative numbers as an error code to flag.
22054
22055         * cs-parser.jay: Handle 1551.
22056
22057         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
22058
22059 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
22060
22061         * cs-parser.jay: Report 1518 (type declaration can only contain
22062         class, struct, interface, enum or delegate)
22063
22064         (switch_label): Report 1523 (keywords `case' or `default' must
22065         preced code)
22066
22067         (opt_switch_sections): Report 1522 (empty switch)
22068
22069         * driver.cs: Report 1515 (response file specified multiple times)
22070         Report 1516 (Source file specified multiple times).
22071
22072         * expression.cs (Argument.Resolve): Signal 1510
22073
22074         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
22075         access not allowed in static code)
22076
22077 2002-01-11  Ravi Pratap  <ravi@ximian.com>
22078
22079         * typemanager.cs (IsPointerType): Utility method which we are going
22080         to need a lot.
22081
22082         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
22083         the object type, so we take care of that.
22084
22085         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
22086
22087         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
22088         added to non-params parameters :-)
22089
22090         * typemanager.cs (CSharpName): Include 'void' type too. 
22091
22092         (void_ptr_type): Include in the set of core types.
22093
22094         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
22095         duplicating code.
22096
22097         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
22098         an unsafe context.
22099
22100         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
22101         completely forgotten about it.
22102
22103 2002-01-10  Ravi Pratap  <ravi@ximian.com>
22104
22105         * cs-parser.jay (pointer_type): Add. This begins our implementation
22106         of parsing rules for unsafe code.
22107
22108         (unsafe_statement): Implement.
22109
22110         (embedded_statement): Modify to include the above.
22111
22112         * statement.cs (Unsafe): Implement new class for unsafe blocks.
22113
22114         * codegen.cs (EmitContext.InUnsafe): Add. This determines
22115         if the current context is an unsafe one.
22116
22117         * cs-parser.jay (local_variable_pointer_type): Since local variable types
22118         are handled differently, we need separate rules for them.
22119
22120         (local_variable_declaration): Update to use local_variable_pointer_type
22121         to allow variable declarations of unmanaged pointer types.
22122
22123         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
22124         in unsafe contexts.
22125
22126         * ../errors/cs0214.cs : Add.
22127
22128 2002-01-16  Nick Drochak  <ndrochak@gol.com>
22129
22130         * makefile: remove 'response' file when cleaning.
22131
22132 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
22133
22134         * cs-parser.jay: Report 1524.
22135
22136 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
22137
22138         * typemanager.cs (RegisterMethod): drop checking if we have
22139         registered this from here
22140
22141 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
22142
22143         * class.cs (Method.EmitDestructor): Implement calling our base
22144         destructor. 
22145
22146         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
22147         value of InFinally.
22148
22149         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
22150         this routine and will wrap the call in a try/catch block.  Deal
22151         with the case.
22152
22153 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
22154
22155         * ecore.cs (Expression.MemberLookup): instead of taking a
22156         parameter `same_type' that was used to tell whether we could
22157         access private members we compute our containing type from the
22158         EmitContext.
22159
22160         (FieldExpr): Added partial support for volatile fields.  This does
22161         not work for volatile fields exposed from assemblies, as I can not
22162         figure out how to extract the modreq from it.
22163
22164         Updated all the source files to use this.
22165
22166         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
22167         because it is referenced by MemberLookup very often. 
22168
22169 2002-01-09  Ravi Pratap  <ravi@ximian.com>
22170
22171         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
22172         TypeBuilder.GetCustomAttributes to retrieve what we need.
22173
22174         Get rid of redundant default_member_attr_type as this is the same as
22175         default_member_type which already exists.
22176
22177         * interface.cs, attribute.cs : Update accordingly.
22178
22179 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
22180
22181         * typemanager.cs: Enable IndexerPropertyName again.  It does not
22182         work for TYpeBuilders though.  Ravi, can you please fix this?
22183
22184         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
22185
22186         * expression.cs (Argument.Emit): Handle the case of ref objects
22187         being passed to ref functions;  
22188
22189         (ParameterReference.EmitLoad): Loads the content of the pointer
22190         without dereferencing.
22191
22192 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
22193
22194         * cs-tokenizer.cs: Implemented the pre-processing expressions.
22195
22196 2002-01-08  Ravi Pratap  <ravi@ximian.com>
22197
22198         * class.cs (Indexer.DefineMethod): Incorporate the interface
22199         type in the name of the method if we are doing explicit interface
22200         implementation.
22201
22202         * expression.cs (ConversionExists): Remove as it is completely obsolete.
22203
22204         (BetterConversion): Fix extremely trivial bug where we were referring to
22205         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
22206         again !
22207
22208         * ../errors/bug16.cs : Add although we have fixed it.
22209
22210 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
22211
22212         * expression.cs (BaseIndexer): Begin implementation.
22213
22214         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
22215
22216         * cs-parser.jay (indexer_declarator): Use qualified_identifier
22217         production directly to remove a shift/reduce, and implement
22218         explicit interface implementation.
22219
22220         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
22221         after a floating point suffix.
22222
22223         * expression.cs (DoNumericPromotions): Improved the conversion for
22224         uint/uint.  If we have a constant, we avoid doing a typecast to a
22225         larger type.
22226
22227         * class.cs (Indexer): Implement explicit interface implementation
22228         for indexers.
22229
22230 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
22231
22232         * class.cs: make the default instance constructor public and hidebysig.
22233
22234 2001-01-03  Ravi Pratap  <ravi@ximian.com>
22235
22236         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
22237         so we can call it from elsewhere.
22238
22239         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
22240         we emit it internally if the class has a defined indexer; otherwise the user
22241         emits it by decorating the class definition with the DefaultMemberAttribute.
22242
22243         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
22244         attribute is not used on a type which defines an indexer.
22245
22246         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
22247         character when we skip whitespace.
22248
22249         * ../errors/cs0646.cs : Add.
22250
22251 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
22252
22253         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
22254         again. 
22255
22256         * makefile: Add practical target `mcs3.exe' which builds the third
22257         generation compiler. 
22258
22259         * expression.cs (New): Fix structures constructor calling.
22260
22261         * class.cs (Property, Method, Indexer): Emit Final flag on the
22262         method if we are an interface implementation and we are not
22263         abstract. 
22264
22265         * ecore.cs (PropertyExpr): New public field `IsBase', tells
22266         whether this property is referencing a `base' method.
22267
22268         * expression.cs (Invocation.EmitCall): take an extra argument:
22269         is_base, this is used to determine whether the `call' or
22270         `callvirt' opcode should be used.
22271
22272
22273         * delegate.cs: update EmitCall.
22274
22275         * class.cs (Method.Define): Set NewSlot for the cases where we are
22276         not implementing an interface method.
22277
22278         (Property.Define): ditto.
22279
22280 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
22281
22282         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
22283         'r'.  Allows mcs to parse itself fully.
22284
22285 2002-01-02  Ravi Pratap  <ravi@ximian.com>
22286
22287         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
22288         of the number of initializers that require the InitializeArray method.
22289
22290         (CheckIndices): Store the Expression in all cases - not the plain value. Also
22291         update the above field where necessary.
22292
22293         (MakeByteBlob): Update accordingly.
22294
22295         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
22296         greater than 2.
22297
22298         (EmitDynamicInitializers): Update in accordance with the new optimization.
22299
22300         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
22301         same OpCode applies.
22302
22303         * cs-parser.jay : Fix some glaring errors I introduced.
22304
22305 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
22306
22307         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
22308         so that we can check for name clashes there too.
22309
22310         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
22311         for interface indexers.
22312
22313         * interfaces.cs (Define): Emit the default member attribute.
22314
22315         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
22316         variable was being referred to while setting the value ;-)
22317
22318 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
22319
22320         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
22321         byte-by-byte information when we know the data is zero.
22322
22323         Make the block always a multiple of 4, because
22324         DefineInitializedData has a bug.
22325
22326         * assign.cs: Fix, we should assign from the temporary, not from
22327         the source. 
22328
22329         * expression.cs (MakeByteBlob): Fix my incorrect code.
22330
22331 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
22332
22333         * typemanager.cs (EnumToUnderlying): This function is used to get
22334         the underlying type from an enumeration, because it does not
22335         always work. 
22336
22337         * constant.cs: Use the I4_S form for values between -128 and 127.
22338
22339         * statement.cs (Block.LookupLabel): Looks up a label.
22340         (Block): Drop support for labeled blocks.
22341
22342         (LabeledStatement): New kind of statement that represents a label
22343         only.
22344
22345         (Goto): Finally implement this bad boy.
22346
22347         * cs-parser.jay: Update to reflect new mechanism to implement
22348         labels.
22349
22350 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
22351
22352         * codegen.cs (EmitContext.This): a codegen property that keeps the
22353         a single instance of this instead of creating many different this
22354         instances. 
22355
22356         * delegate.cs (Delegate.DoResolve): Update to use the property;
22357
22358         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
22359
22360         * expression.cs (BaseAccess.DoResolve): Ditto.
22361
22362 2001-12-29  Ravi Pratap  <ravi@ximian.com>
22363
22364         * typemanager.cs (methodimpl_attr_type): Add to hold the type
22365         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
22366
22367         (InitCoreTypes): Update accordingly.
22368
22369         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
22370         so we can quickly store the state.
22371
22372         (ApplyAttributes): Set the correct implementation flags
22373         for InternalCall methods.
22374
22375 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
22376
22377         * expression.cs (EmitCall): if a method is not virtual, then do
22378         not use callvirt on it.
22379
22380         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
22381         user defined stuff) requires the use of stobj, which takes an
22382         address on the stack instead of an array and an index.  So emit
22383         the Ldelema operation for it.
22384
22385         (EmitStoreOpcode): Use stobj for valuetypes.
22386
22387         (UnaryMutator.EmitCode): Use the right 1 value depending on
22388         whether we are dealing with int64/uint64, float or doubles.
22389
22390         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
22391         constructors that I implemented last night.
22392
22393         (Constructor.IsDefault): Fix to work properly for static
22394         constructors.
22395
22396         * cs-parser.jay (CheckDef): report method signature errors.
22397         Update error number 103 to be 132.
22398
22399         * decl.cs: New AdditionResult enumeration value: MethodExists.
22400         Although we do this check for methods later on in the semantic
22401         analysis, catching repeated default constructors is so easy that
22402         we catch these here. 
22403
22404         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
22405         promotions code.
22406
22407         (ParameterReference.EmitAssign, Emit): handle
22408         bools as bytes.
22409
22410         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
22411         (ArrayAccess.EmitStoreOpcode): ditto.
22412
22413         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
22414
22415         * expression.cs (MakeByteBlob): Complete all the missing types
22416         (uint, short, ushort, byte, sbyte)
22417
22418         * class.cs: Only init instance field initializers on instance
22419         constructors. 
22420
22421         Rename `constructors' to instance_constructors. 
22422
22423         (TypeContainer.AddConstructor): Only add constructors to the list
22424         if it is not static.
22425
22426         Make sure that we handle default_static_constructor independently
22427         everywhere where we handle instance_constructors
22428
22429 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
22430
22431         * class.cs: Do not lookup or create a base initializer for a
22432         static constructor.
22433
22434         (ConstructorInitializer.Resolve): use the proper type to lookup
22435         for constructors.
22436
22437         * cs-parser.jay: Report error 1585 (modifiers between type and name).
22438
22439         * enum.cs, interface.cs: Remove CloseType, this is taken care by
22440         in DeclSpace. 
22441
22442         * decl.cs: CloseType is now an virtual method, the default
22443         implementation just closes this type.
22444
22445 2001-12-28  Ravi Pratap  <ravi@ximian.com>
22446
22447         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
22448         to PreserveSig by default. Also emit HideBySig on such methods.
22449
22450         Basically, set the defaults to standard values.
22451
22452         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
22453         argument, if candidate is better, it can't be worse than the best !
22454
22455         (Invocation): Re-write bits to differentiate between methods being
22456         applicable in their expanded form and their normal form - for params
22457         methods of course.
22458
22459         Get rid of use_standard everywhere as only standard conversions are allowed
22460         in overload resolution. 
22461
22462         More spec conformance.
22463
22464 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
22465
22466         * driver.cs: Add --timestamp, to see where the compiler spends
22467         most of its time.
22468
22469         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
22470         `this' in static code.
22471
22472         (SimpleName.DoResolve): Implement in terms of a helper function
22473         that allows static-references to be passed upstream to
22474         MemberAccess.
22475
22476         (Expression.ResolveWithSimpleName): Resolve specially simple
22477         names when called by MemberAccess to implement the special
22478         semantics. 
22479
22480         (Expression.ImplicitReferenceConversion): Handle conversions from
22481         Null to reference types before others, as Null's type is
22482         System.Object. 
22483
22484         * expression.cs (Invocation.EmitCall): Handle the special case of
22485         calling methods declared on a reference type from a ValueType
22486         (Base classes System.Object and System.Enum)
22487
22488         (MemberAccess.Resolve): Only perform lookups on Enumerations if
22489         the left hand side is a TypeExpr, not on every enumeration. 
22490
22491         (Binary.Resolve): If types are reference types, then do a cast to
22492         object on operators != and == of both arguments.
22493
22494         * typemanager.cs (FindMembers): Extract instance and static
22495         members if requested.
22496
22497         * interface.cs (PopulateProperty): Use void_type instead of null
22498         as the return type for the setter method.
22499
22500         (PopulateIndexer): ditto.
22501
22502 2001-12-27  Ravi Pratap  <ravi@ximian.com>
22503
22504         * support.cs (ReflectionParameters): Fix minor bug where we
22505         were examining the wrong parameter for the ParamArray attribute.
22506
22507         Cope with requests for the type of the parameter at position
22508         greater than the params parameter's. We now return the element
22509         type of the params array as that makes more sense.
22510
22511         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
22512         accordingly as we no longer have to extract the element type
22513         ourselves.
22514
22515         (Invocation.OverloadResolve): Update.
22516
22517 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
22518
22519         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
22520         against IEnumerator, test whether the return value is a descendant
22521         of the IEnumerator interface.
22522
22523         * class.cs (Indexer.Define): Use an auxiliary method to implement
22524         the other bits of the method definition.  Begin support for
22525         explicit interface implementation.
22526
22527         (Property.DefineMethod): Use TypeManager.void_type instead of null
22528         for an empty return value.
22529
22530 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
22531
22532         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
22533         dealing with a FieldExpr which is composed of a FieldBuilder, in
22534         the code path we did extract the constant, but we should have
22535         obtained the underlying value to be able to cast it (otherwise we
22536         end up in an infinite loop, this is what Ravi was running into).
22537
22538         (ArrayCreation.UpdateIndices): Arrays might be empty.
22539
22540         (MemberAccess.ResolveMemberAccess): Add support for section
22541         14.5.4.1 that deals with the special case of E.I when E is a type
22542         and something else, that I can be a reference to a static member.
22543
22544         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
22545         handle a particular array type to create byte blobs, it is just
22546         something we dont generate byteblobs for.
22547
22548         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
22549         arguments. 
22550
22551         * location.cs (Push): remove the key from the hashtable that we
22552         are about to add.   This happens for empty files.
22553
22554         * driver.cs: Dispose files after we have parsed them.
22555
22556         (tokenize): new function that only runs the tokenizer on its
22557         input, for speed testing.
22558
22559 2001-12-26  Ravi Pratap  <ravi@ximian.com>
22560
22561         * class.cs (Event.Define): Define the private field only if there
22562         are no accessors defined.
22563
22564         * expression.cs (ResolveMemberAccess): If there is no associated
22565         field with the event, that means we have an event defined with its
22566         own accessors and we should flag error cs0070 since transforming
22567         ourselves into a field is not valid in that case.
22568
22569         * ecore.cs (SimpleName.DoResolve): Same as above.
22570
22571         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
22572         and charset to sane values.
22573
22574 2001-12-25  Ravi Pratap  <ravi@ximian.com>
22575
22576         * assign.cs (DoResolve): Perform check on events only if they 
22577         are being accessed outside the declaring type.
22578
22579         * cs-parser.jay (event_declarations): Update rules to correctly
22580         set the type of the implicit parameter etc.
22581
22582         (add_accessor, remove_accessor): Set current local parameters.
22583
22584         * expression.cs (Binary): For delegate addition and subtraction,
22585         cast the return value from the method into the appropriate delegate
22586         type.
22587
22588 2001-12-24  Ravi Pratap  <ravi@ximian.com>
22589
22590         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
22591         of these as the workaround is unnecessary.
22592
22593         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
22594         delegate data - none of that is needed at all.
22595
22596         Re-write bits to extract the instance expression and the delegate method
22597         correctly.
22598
22599         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
22600         on delegates too.
22601
22602         * attribute.cs (ApplyAttributes): New method to take care of common tasks
22603         of attaching attributes instead of duplicating code everywhere.
22604
22605         * everywhere : Update code to do attribute emission using the above method.
22606
22607 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
22608
22609         * expression.cs (IsParamsMethodApplicable): if there are not
22610         parameters, return immediately.
22611
22612         * ecore.cs: The 0 literal can be implicity converted to an enum
22613         type. 
22614
22615         (SimpleName.DoResolve): First lookup the type, then lookup the
22616         members. 
22617
22618         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
22619         want to get its address.  If the InstanceExpression is not
22620         addressable, store the result in a temporary variable, then get
22621         the address of it.
22622
22623         * codegen.cs: Only display 219 errors on warning level or above. 
22624
22625         * expression.cs (ArrayAccess): Make it implement the
22626         IMemoryLocation interface.
22627
22628         (Binary.DoResolve): handle the operator == (object a, object b)
22629         and operator != (object a, object b) without incurring into a
22630         BoxedCast (because 5 != o should never be performed).
22631
22632         Handle binary enumerator operators.
22633
22634         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
22635         value type, otherwise use Ldelem_ref.
22636
22637         Use precomputed names;
22638
22639         (AddressOf): Implement address of
22640
22641         * cs-parser.jay (labeled_statement): Fix recursive block
22642         addition by reworking the production.
22643
22644         * expression.cs (New.DoEmit): New has a special case:
22645                 
22646                  If we are dealing with a ValueType, we have a few
22647                  situations to deal with:
22648                 
22649                     * The target of New is a ValueType variable, that is
22650                       easy, we just pass this as the variable reference
22651                 
22652                     * The target of New is being passed as an argument,
22653                       to a boxing operation or a function that takes a
22654                       ValueType.
22655                 
22656                       In this case, we need to create a temporary variable
22657                       that is the argument of New.
22658
22659
22660 2001-12-23  Ravi Pratap  <ravi@ximian.com>
22661
22662         * rootcontext.cs (LookupType): Check that current_type is not null before
22663         going about looking at nested types.
22664
22665         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
22666         not implement the IAssignMethod interface any more.
22667
22668         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
22669         where we tranform them into FieldExprs if they are being resolved from within
22670         the declaring type.
22671
22672         * ecore.cs (SimpleName.DoResolve): Do the same here.
22673
22674         * assign.cs (DoResolve, Emit): Clean up code considerably. 
22675
22676         * ../errors/bug10.cs : Add.
22677
22678         * ../errors/cs0070.cs : Add.
22679
22680         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
22681
22682         * assign.cs : Get rid of EventIsLocal everywhere.
22683
22684 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
22685
22686         * ecore.cs (ConvertIntLiteral): finished the implementation.
22687
22688         * statement.cs (SwitchLabel): Convert the value we are using as a
22689         key before looking up the table.
22690
22691 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
22692
22693         * codegen.cs (EmitTopBlock): Require a Location argument now.
22694
22695         * cs-parser.jay (constructor_declarator): We need to setup
22696         current_local_parameters before we parse the
22697         opt_constructor_initializer, to allow the variables to be bound
22698         to the constructor arguments.
22699
22700         * rootcontext.cs (LookupType): First lookup nested classes in our
22701         class and our parents before we go looking outside our class.
22702
22703         * expression.cs (ConstantFold): Extract/debox the values at the
22704         beginnning. 
22705
22706         * rootcontext.cs (EmitCode): Resolve the constants first before we
22707         resolve the types.  This is not really needed, but it helps debugging.
22708
22709         * statement.cs: report location.
22710
22711         * cs-parser.jay: pass location to throw statement.
22712
22713         * driver.cs: Small bug fix.
22714
22715         * report.cs: Updated format to be 4-zero filled digits.
22716
22717 2001-12-22  Ravi Pratap  <ravi@ximian.com>
22718
22719         * expression.cs (CheckIndices): Fix minor bug where the wrong
22720         variable was being referred to ;-)
22721
22722         (DoEmit): Do not call EmitStaticInitializers when the 
22723         underlying type is System.Object.
22724
22725 2001-12-21  Ravi Pratap  <ravi@ximian.com>
22726
22727         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
22728         and do the usual workaround for SRE.
22729
22730         * class.cs (MyEventBuilder.EventType): New member to get at the type
22731         of the event, quickly.
22732
22733         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
22734
22735         * assign.cs (Assign.DoResolve): Handle the case when the target
22736         is an EventExpr and perform the necessary checks.
22737
22738         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
22739         interface.
22740
22741         (SimpleName.MemberStaticCheck): Include check for EventExpr.
22742
22743         (EventExpr): Set the type in the constructor itself since we 
22744         are meant to be born fully resolved.
22745
22746         (EventExpr.Define): Revert code I wrote earlier.
22747                 
22748         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
22749         instance expression is null. The instance expression is a This in that case
22750         or a null, depending on whether it is a static method or not.
22751
22752         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
22753         refers to more than one method.
22754
22755         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
22756         and accordingly flag errors.
22757
22758 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
22759
22760         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
22761
22762 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
22763
22764         * location.cs (ToString): Provide useful rutine.
22765
22766 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
22767
22768         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
22769         objects, return the actual integral boxed.
22770
22771         * statement.cs (SwitchLabel): define an ILLabel for each
22772         SwitchLabel. 
22773
22774         (Switch.CheckSwitch): If the value is a Literal, extract
22775         the underlying literal.
22776
22777         Also in the unused hashtable we had, add the SwitchLabel so we can
22778         quickly look this value up.
22779
22780         * constant.cs: Implement a bunch of new constants.  Rewrite
22781         Literal based on this.  Made changes everywhere to adapt to this.
22782
22783         * expression.cs (Expression.MakeByteBlob): Optimize routine by
22784         dereferencing array only once, and also copes with enumrations.
22785
22786         bytes are two bytes wide, not one.
22787
22788         (Cast): Perform constant conversions.
22789
22790         * ecore.cs (TryImplicitIntConversion): Return literals instead of
22791         wrappers to the literals here.
22792
22793         * expression.cs (DoNumericPromotions): long literals can converted
22794         to ulong implicity (this is taken care of elsewhere, but I was
22795         missing this spot).
22796
22797         * ecore.cs (Expression.Literalize): Make the return type Literal,
22798         to improve type checking.
22799
22800         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
22801
22802 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
22803
22804         * literal.cs: Revert code from ravi that checked the bounds.  The
22805         bounds are sane by the definition of the type itself. 
22806
22807         * typemanager.cs: Fix implementation of ImplementsInterface.  We
22808         need to actually look up in our parent hierarchy for interfaces
22809         implemented. 
22810
22811         * const.cs: Use the underlying type for enumerations
22812
22813         * delegate.cs: Compute the basename for the delegate creation,
22814         that should fix the delegate test case, and restore the correct
22815         Type Lookup semantics in rootcontext
22816
22817         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
22818         referencing a nested type with the Reflection API is using the "+"
22819         sign. 
22820
22821         * cs-parser.jay: Do not require EOF token at the end.
22822
22823 2001-12-20  Ravi Pratap  <ravi@ximian.com>
22824
22825         * rootcontext.cs (LookupType): Concatenate type names with
22826         a '.' instead of a '+' The test suite passes again.
22827
22828         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
22829         field of the enumeration.
22830
22831         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
22832         the case when the member is an EventExpr.
22833
22834         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
22835         static has an associated instance expression.
22836
22837         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
22838
22839         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
22840
22841         * class.cs (Event.Define): Register event and perform appropriate checks
22842         for error #111.
22843
22844         We define the Add and Remove methods even if the use provides none because
22845         in that case, we provide default implementations ourselves.
22846
22847         Define a private field of the type of the event. This is done by the CSC compiler
22848         and we should be doing it too ;-)
22849
22850         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
22851         More methods we use in code we generate.
22852
22853         (multicast_delegate_type, delegate_type): Two separate types since the distinction
22854         is important.
22855
22856         (InitCoreTypes): Update accordingly for the above.
22857
22858         * class.cs (Event.Emit): Generate code for default accessors that we provide
22859
22860         (EmitDefaultMethod): Do the job in the above.
22861
22862         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
22863         appropriate place.
22864
22865 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
22866
22867         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
22868         builders even if we were missing one.
22869
22870         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
22871         pass the Basename as our class name instead of the Name.  The
22872         basename will be correctly composed for us.
22873
22874         * parameter.cs (Paramters): Now takes a Location argument.
22875
22876         * decl.cs (DeclSpace.LookupType): Removed convenience function and
22877         make all the code call directly LookupType in RootContext and take
22878         this chance to pass the Location information everywhere.
22879
22880         * Everywhere: pass Location information.
22881
22882 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
22883
22884         * class.cs (Constructor.Define): Updated way of detecting the
22885         length of the parameters.
22886
22887         (TypeContainer.DefineType): Use basename as the type name for
22888         nested types.
22889
22890         (TypeContainer.Define): Do not recursively define types here, as
22891         definition is taken care in order by the RootContext.
22892
22893         * tree.cs: Keep track of namespaces in a per-file basis.
22894
22895         * parameter.cs (Parameter.ComputeSignature): Update to use
22896         DeclSpace. 
22897
22898         (Parameters.GetSignature): ditto.
22899
22900         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
22901         instead of a TypeContainer.
22902
22903         (Interface.SemanticAnalysis): Use `this' instead of our parent to
22904         resolve names.  Because we need to be resolve in our context, not
22905         our parents.
22906
22907         * driver.cs: Implement response files.
22908
22909         * class.cs (TypeContainer.DefineType): If we are defined, do not
22910         redefine ourselves.
22911
22912         (Event.Emit): Emit the code for add/remove handlers.
22913         (Event.Define): Save the MethodBuilders for add/remove.
22914
22915         * typemanager.cs: Use pair here too.
22916
22917         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
22918         DictionaryEntry requires the first argument to be non-null.  
22919
22920         (enum_declaration): Compute full name for registering the
22921         enumeration.
22922
22923         (delegate_declaration): Instead of using
22924         formal_parameter_list, use opt_formal_parameter_list as the list
22925         can be empty.
22926
22927         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
22928         (EventParsing): New property that controls whether `add' and
22929         `remove' are returned as tokens or identifiers (for events);
22930
22931 2001-12-19  Ravi Pratap  <ravi@ximian.com>
22932
22933         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
22934         use MyEventBuilder only and let it wrap the real builder for us.
22935
22936         (MyEventBuilder): Revamp constructor etc.
22937
22938         Implement all operations that we perform on EventBuilder in precisely the same
22939         way here too.
22940
22941         (FindMembers): Update to use the EventBuilder member.
22942
22943         (Event.Emit): Update accordingly.
22944
22945 2001-12-18  Ravi Pratap  <ravi@ximian.com>
22946
22947         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
22948         by calling the appropriate methods.
22949
22950         (GetCustomAttributes): Make stubs as they cannot possibly do anything
22951         useful.
22952
22953         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
22954
22955 2001-12-17  Ravi Pratap  <ravi@ximian.com>
22956
22957         * delegate.cs (Delegate.Populate): Check that the return type
22958         and various parameters types are indeed accessible.
22959
22960         * class.cs (Constructor.Define): Same here.
22961
22962         (Field.Define): Ditto.
22963
22964         (Event.Define): Ditto.
22965
22966         (Operator.Define): Check that the underlying Method defined itself
22967         correctly - so it's MethodBuilder should not be null.
22968
22969         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
22970         expression happens to be null.
22971
22972         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
22973         members but as of now we don't seem to be able to do anything really useful with it.
22974
22975         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
22976         not the EventBuilder.
22977
22978 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
22979
22980         * cs-tokenizer.cs: Add support for defines.
22981         Add support for #if, #elif, #else, #endif
22982
22983         (eval_var): evaluates a variable.
22984         (eval): stubbed for evaluating functions.
22985
22986         * cs-parser.jay: Pass the defines information
22987
22988         * driver.cs: Add --define command line option.
22989
22990         * decl.cs: Move MemberCore here.
22991
22992         Make it the base class for DeclSpace.  This allows us to catch and
22993         report 108 and 109 for everything now.
22994
22995         * class.cs (TypeContainer.Define): Extract all the members
22996         before populating and emit the warning 108 (new keyword required
22997         to override) instead of having each member implement this.
22998
22999         (MemberCore.Define): New abstract method, we will be using this in
23000         the warning reporting engine in Populate.
23001
23002         (Operator.Define): Adjust to new MemberCore protocol. 
23003
23004         * const.cs (Const): This does not derive from Expression, it is a
23005         temporary object we use to create fields, it is a MemberCore. 
23006
23007         * class.cs (Method.Define): Allow the entry point to be in a
23008         specific class.
23009
23010         * driver.cs: Rewrite the argument handler to clean it up a bit.
23011
23012         * rootcontext.cs: Made it just an auxiliary namespace feature by
23013         making everything static.
23014
23015         * driver.cs: Adapt code to use RootContext type name instead of
23016         instance variable.
23017
23018         * delegate.cs: Remove RootContext argument.
23019
23020         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
23021         argument. 
23022
23023         * class.cs (Event.Define): The lookup can fail.
23024
23025         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
23026
23027         * expression.cs: Resolve the this instance before invoking the code.
23028
23029 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
23030
23031         * cs-parser.jay: Add a production in element_access that allows
23032         the thing to become a "type" reference.  This way we can parse
23033         things like "(string [])" as a type.
23034
23035         Note that this still does not handle the more complex rules of
23036         casts. 
23037
23038
23039         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
23040
23041         * ecore.cs: (CopyNewMethods): new utility function used to
23042         assemble the list of methods from running FindMembers.
23043
23044         (MemberLookup): Rework FindMembers so that 
23045
23046 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
23047
23048         * class.cs (TypeContainer): Remove Delegates who fail to be
23049         defined.
23050
23051         * delegate.cs (Populate): Verify that we dont get null return
23052         values.   TODO: Check for AsAccessible.
23053
23054         * cs-parser.jay: Use basename to emit error 574 (destructor should
23055         have the same name as container class), not the full name.
23056
23057         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
23058         possible representation.  
23059
23060         Also implements integer type suffixes U and L.
23061
23062 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
23063
23064         * expression.cs (ArrayCreation.DoResolve): We need to do the
23065         argument resolution *always*.
23066
23067         * decl.cs: Make this hold the namespace.  Hold the root context as
23068         well.
23069         (LookupType): Move here.
23070
23071         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
23072
23073         * location.cs (Row, Name): Fixed the code, it was always returning
23074         references to the first file.
23075
23076         * interface.cs: Register properties defined through interfaces.
23077
23078         * driver.cs: Add support for globbing on the command line
23079
23080         * class.cs (Field): Make it derive from MemberCore as well.
23081         (Event): ditto.
23082
23083 2001-12-15  Ravi Pratap  <ravi@ximian.com>
23084
23085         * class.cs (Event::Define): Check that the type of the event is a delegate
23086         type else flag error #66.
23087
23088         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
23089         same.
23090
23091         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
23092         values of EntryPoint, CharSet etc etc.
23093
23094         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
23095
23096         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
23097         be null and we should ignore this. I am not sure if this is really clean. Apparently,
23098         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
23099         which needs this to do its work.
23100
23101         * ../errors/cs0066.cs : Add.
23102
23103 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
23104
23105         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
23106         helper functions.
23107
23108         * class.cs: (MethodSignature.MethodSignature): Removed hack that
23109         clears out the parameters field.
23110         (MemberSignatureCompare): Cleanup
23111
23112         (MemberCore): New base class used to share code between MethodCore
23113         and Property.
23114
23115         (RegisterRequiredImplementations) BindingFlags.Public requires
23116         either BindingFlags.Instace or Static.  Use instance here.
23117
23118         (Property): Refactored code to cope better with the full spec.
23119
23120         * parameter.cs (GetParameterInfo): Return an empty array instead
23121         of null on error.
23122
23123         * class.cs (Property): Abstract or extern properties have no bodies.
23124
23125         * parameter.cs (GetParameterInfo): return a zero-sized array.
23126
23127         * class.cs (TypeContainer.MethodModifiersValid): Move all the
23128         method modifier validation to the typecontainer so we can reuse
23129         this on properties.
23130
23131         (MethodCore.ParameterTypes): return an empty sized array of types.
23132
23133         (Property.Define): Test property modifier validity.
23134
23135         Add tests for sealed/override too.
23136
23137         (Method.Emit): abstract or extern methods have no bodies.
23138
23139 2001-12-14  Ravi Pratap  <ravi@ximian.com>
23140
23141         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
23142         thing.
23143
23144         (Method::Define, ::Emit): Modify accordingly.
23145
23146         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
23147
23148         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
23149
23150         * makefile: Pass in /unsafe.
23151
23152 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
23153
23154         * class.cs (MakeKey): Kill routine.
23155
23156         * class.cs (TypeContainer.Define): Correctly define explicit
23157         method implementations (they require the full interface name plus
23158         the method name).
23159
23160         * typemanager.cs: Deply the PtrHashtable here and stop using the
23161         lame keys.  Things work so much better.
23162
23163         This of course broke everyone who depended on `RegisterMethod' to
23164         do the `test for existance' test.  This has to be done elsewhere.
23165
23166         * support.cs (PtrHashtable): A hashtable that avoid comparing with
23167         the object stupid Equals method (because, that like fails all over
23168         the place).  We still do not use it.
23169
23170         * class.cs (TypeContainer.SetRequiredInterface,
23171         TypeContainer.RequireMethods): Killed these two routines and moved
23172         all the functionality to RegisterRequiredImplementations.
23173
23174         (TypeContainer.RegisterRequiredImplementations): This routine now
23175         registers all the implementations required in an array for the
23176         interfaces and abstract methods.  We use an array of structures
23177         which can be computed ahead of time to reduce memory usage and we
23178         also assume that lookups are cheap as most classes will not
23179         implement too many interfaces.
23180
23181         We also avoid creating too many MethodSignatures.
23182
23183         (TypeContainer.IsInterfaceMethod): Update and optionally does not
23184         clear the "pending" bit if we find that there are problems with
23185         the declaration.
23186
23187         (TypeContainer.VerifyPendingMethods): Update to report errors of
23188         methods that look like implementations but are not.
23189
23190         (TypeContainer.Define): Add support for explicit interface method
23191         implementation. 
23192
23193 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
23194
23195         * typemanager.cs: Keep track of the parameters here instead of
23196         being a feature of the TypeContainer.
23197
23198         * class.cs: Drop the registration of parameters here, as
23199         InterfaceMethods are also interface declarations.
23200
23201         * delegate.cs: Register methods with the TypeManager not only with
23202         the TypeContainer.  This code was buggy.
23203
23204         * interface.cs: Full registation here.
23205
23206 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
23207
23208         * expression.cs: Remove reducer for binary expressions, it can not
23209         be done this way.
23210
23211         * const.cs: Put here the code that used to go into constant.cs
23212
23213         * constant.cs: Put here the code for constants, this is a new base
23214         class for Literals.
23215
23216         * literal.cs: Make Literal derive from Constant.
23217
23218 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
23219
23220         * statement.cs (Return.Emit): Report error 157 if the user
23221         attempts to return from a finally block.
23222
23223         (Return.Emit): Instead of emitting a return, jump to the end of
23224         the function.
23225
23226         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
23227         LocalBuilder to store the result of the function.  ReturnLabel is
23228         the target where we jump.
23229
23230
23231 2001-12-09  Radek Doulik  <rodo@ximian.com>
23232
23233         * cs-parser.jay: remember alias in current namespace
23234
23235         * ecore.cs (SimpleName::DoResolve): use aliases for types or
23236         namespaces
23237
23238         * class.cs (LookupAlias): lookup alias in my_namespace
23239
23240         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
23241         aliases hashtable
23242         (LookupAlias): lookup alias in this and if needed in parent
23243         namespaces
23244
23245 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
23246
23247         * support.cs: 
23248
23249         * rootcontext.cs: (ModuleBuilder) Made static, first step into
23250         making things static.  I need this to avoid passing the
23251         TypeContainer when calling ParameterType.
23252
23253         * support.cs (InternalParameters.ParameterType): Remove ugly hack
23254         that did string manipulation to compute the type and then call
23255         GetType.  Use Parameter.ParameterType instead.
23256
23257         * cs-tokenizer.cs: Consume the suffix for floating values.
23258
23259         * expression.cs (ParameterReference): figure out whether this is a
23260         reference parameter or not.  Kill an extra variable by computing
23261         the arg_idx during emission.
23262
23263         * parameter.cs (Parameters.GetParameterInfo): New overloaded
23264         function that returns whether a parameter is an out/ref value or not.
23265
23266         (Parameter.ParameterType): The type of the parameter (base,
23267         without ref/out applied).
23268
23269         (Parameter.Resolve): Perform resolution here.
23270         (Parameter.ExternalType): The full type (with ref/out applied).
23271
23272         * statement.cs (Using.Emit, Using.EmitExpression): Implement
23273         support for expressions on the using statement.
23274
23275 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
23276
23277         * statement.cs (Using.EmitLocalVariableDecls): Split the
23278         localvariable handling of the using statement.
23279
23280         (Block.EmitMeta): Keep track of variable count across blocks.  We
23281         were reusing slots on separate branches of blocks.
23282
23283         (Try.Emit): Emit the general code block, we were not emitting it. 
23284
23285         Check the type of the declaration to be an IDisposable or
23286         something that can be implicity converted to it. 
23287
23288         Emit conversions if required.
23289
23290         * ecore.cs (EmptyExpression): New utility class.
23291         (Expression.ImplicitConversionExists): New utility function.
23292
23293 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
23294
23295         * statement.cs (Using): Implement.
23296
23297         * expression.cs (LocalVariableReference): Support read only variables.
23298
23299         * statement.cs: Remove the explicit emit for the Leave opcode.
23300         (VariableInfo): Add a readonly field.
23301
23302 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
23303
23304         * ecore.cs (ConvCast): new class used to encapsulate the various
23305         explicit integer conversions that works in both checked and
23306         unchecked contexts.
23307
23308         (Expression.ConvertNumericExplicit): Use new ConvCast class to
23309         properly generate the overflow opcodes.
23310
23311 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
23312
23313         * statement.cs: The correct type for the EmptyExpression is the
23314         element_type, not the variable type.  Ravi pointed this out.
23315
23316 2001-12-04  Ravi Pratap  <ravi@ximian.com>
23317
23318         * class.cs (Method::Define): Handle PInvoke methods specially
23319         by using DefinePInvokeMethod instead of the usual one.
23320
23321         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
23322         above to do the task of extracting information and defining the method.
23323
23324 2001-12-04  Ravi Pratap  <ravi@ximian.com>
23325
23326         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
23327         of the condition for string type.
23328
23329         (Emit): Move that here. 
23330
23331         (ArrayCreation::CheckIndices): Keep string literals in their expression
23332         form.
23333
23334         (EmitDynamicInitializers): Handle strings appropriately.
23335
23336 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
23337
23338         * codegen.cs (EmitContext): Replace multiple variables with a
23339         single pointer to the current Switch statement.
23340
23341         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
23342         EmitContext.
23343
23344 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
23345
23346         * statement.cs 
23347
23348         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
23349         default'.
23350
23351         (Foreach.Emit): Foreach on arrays was not setting
23352         up the loop variables (for break/continue).
23353
23354         (GotoCase): Semi-implented.
23355
23356 2001-12-03  Ravi Pratap  <ravi@ximian.com>
23357
23358         * attribute.cs (CheckAttribute): Handle system attributes by using
23359         Attribute.GetAttributes to examine information we need.
23360
23361         (GetValidPlaces): Same here.
23362
23363         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
23364
23365         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
23366
23367         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
23368
23369         (Method::Define): Set appropriate flags if we have a DllImport attribute.
23370
23371         (Method::Emit): Handle the case when we are a PInvoke method.
23372
23373 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
23374
23375         * expression.cs: Use ResolveWithSimpleName on compound names.
23376
23377 2001-12-02  Ravi Pratap  <ravi@ximian.com>
23378
23379         * constant.cs (EmitConstant): Make sure we resolve the associated expression
23380         before trying to reduce it.
23381
23382         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
23383
23384         * constant.cs (LookupConstantValue): Implement.
23385
23386         (EmitConstant): Use the above in emitting the constant.
23387
23388         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
23389         that are user-defined by doing a LookupConstantValue on them.
23390
23391         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
23392         too, like above.
23393
23394 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
23395
23396         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
23397
23398         (BaseAccess.DoResolve): Implement.
23399
23400         (MemberAccess.DoResolve): Split this routine into a
23401         ResolveMemberAccess routine that can be used independently
23402
23403 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
23404
23405         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
23406         As that share bits of the implementation.  Is returns a boolean,
23407         while As returns the Type that is being probed.
23408
23409 2001-12-01  Ravi Pratap  <ravi@ximian.com>
23410
23411         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
23412         instead of a Literal - much easier.
23413
23414         (EnumInTransit): Remove - utterly useless :-)
23415
23416         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
23417
23418         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
23419
23420         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
23421         chain when we have no associated expression.
23422
23423 2001-11-30  Ravi Pratap  <ravi@ximian.com>
23424
23425         * constant.cs (Define): Use Location while reporting the errror.
23426
23427         Also emit a warning when 'new' is used and there is no inherited
23428         member to hide.
23429
23430         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
23431         populated.
23432
23433         (LookupEnumValue): Implement to lookup an enum member's value and define it
23434         if necessary.
23435
23436         (Populate): Re-write accordingly to use the above routine.
23437
23438 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
23439
23440         * expression.cs (This): Fix prototype for DoResolveLValue to
23441         override the base class DoResolveLValue.
23442
23443         * cs-parser.cs: Report errors cs574 and cs575 (destructor
23444         declarations) 
23445
23446         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
23447         (we need to load the address of the field here).  This fixes
23448         test-22. 
23449
23450         (FieldExpr.DoResolveLValue): Call the DoResolve
23451         function to initialize the Instance expression.
23452
23453         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
23454         correctly the GetEnumerator operation on a value type.
23455
23456         * cs-parser.jay: Add more simple parsing error catches.
23457
23458         * statement.cs (Switch): Add support for string switches.
23459         Handle null specially.
23460
23461         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
23462
23463 2001-11-28  Ravi Pratap  <ravi@ximian.com>
23464
23465         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
23466
23467         (declare_local_constant): New helper function.
23468
23469         * statement.cs (AddConstant): Keep a separate record of constants
23470
23471         (IsConstant): Implement to determine if a variable is a constant.
23472
23473         (GetConstantExpression): Implement.
23474
23475         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
23476
23477         * statement.cs (IsVariableDefined): Re-write.
23478
23479 2001-11-27  Ravi Pratap  <ravi@ximian.com>
23480
23481         * class.cs (TypeContainer::FindMembers): Look for constants
23482         in the case when we are looking for MemberTypes.Field
23483
23484         * expression.cs (MemberAccess::DoResolve): Check that in the
23485         case we are a FieldExpr and a Literal, we are not being accessed
23486         by an instance reference.
23487
23488         * cs-parser.jay (local_constant_declaration): Implement.
23489
23490         (declaration_statement): Implement for constant declarations.
23491
23492 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
23493
23494         * statement.cs (Switch): Catch double defaults.
23495
23496         (Switch): More work on the switch() statement
23497         implementation.  It works for integral values now, need to finish
23498         string support.
23499
23500
23501 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
23502
23503         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
23504         integer literals into other integer literals.  To be used by
23505         switch. 
23506
23507 2001-11-24  Ravi Pratap  <ravi@ximian.com>
23508
23509         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
23510         some memory.
23511
23512         (EmitDynamicInitializers): Cope with the above since we extract data
23513         directly from ArrayData now.
23514
23515         (ExpectInitializers): Keep track of whether initializers are mandatory
23516         or not.
23517
23518         (Bounds): Make it a hashtable to prevent the same dimension being 
23519         recorded for every element in that dimension.
23520
23521         (EmitDynamicInitializers): Fix bug which prevented the Set array method
23522         from being found.
23523
23524         Also fix bug which was causing the indices to be emitted in the reverse
23525         order.
23526
23527 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
23528
23529         * expression.cs (ArrayCreation): Implement the bits that Ravi left
23530         unfinished.  They do not work, because the underlying code is
23531         sloppy.
23532
23533 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23534
23535         * cs-parser.jay: Remove bogus fixme.
23536
23537         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
23538         on Switch statement.
23539
23540 2001-11-23  Ravi Pratap  <ravi@ximian.com>
23541
23542         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
23543         the same. 
23544
23545         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
23546         parameter. Apparently, any expression is allowed. 
23547
23548         (ValidateInitializers): Update accordingly.
23549
23550         (CheckIndices): Fix some tricky bugs thanks to recursion.
23551
23552         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
23553         I was being completely brain-dead.
23554
23555         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
23556         and re-write acordingly.
23557
23558         (DelegateInvocation): Re-write accordingly.
23559
23560         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
23561
23562         (MakeByteBlob): Handle types more correctly.
23563
23564         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
23565         initialization from expressions but it is incomplete because I am a complete
23566         Dodo :-|
23567
23568 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23569
23570         * statement.cs (If.Emit): Fix a bug that generated incorrect code
23571         on If.  Basically, we have to return `true' (ie, we do return to
23572         our caller) only if both branches of the if return.
23573
23574         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
23575         short-circuit operators, handle them as short circuit operators. 
23576
23577         (Cast.DoResolve): Resolve type.
23578         (Cast.Cast): Take an expression as the target type.
23579
23580         * cs-parser.jay (cast_expression): Remove old hack that only
23581         allowed a limited set of types to be handled.  Now we take a
23582         unary_expression and we resolve to a type during semantic
23583         analysis.
23584
23585         Use the grammar productions from Rhys to handle casts (this is
23586         not complete like Rhys syntax yet, we fail to handle that corner
23587         case that C# has regarding (-x), but we will get there.
23588
23589 2001-11-22  Ravi Pratap  <ravi@ximian.com>
23590
23591         * class.cs (EmitFieldInitializer): Take care of the case when we have a
23592         field which is an array type.
23593
23594         * cs-parser.jay (declare_local_variables): Support array initialization too.
23595
23596         * typemanager.cs (MakeKey): Implement.
23597
23598         (everywhere): Use the above appropriately.
23599
23600         * cs-parser.jay (for_statement): Update for array initialization while
23601         declaring variables.
23602
23603         * ecore.cs : The error message was correct, it's the variable's names that
23604         were misleading ;-) Make the code more readable.
23605
23606         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
23607         the correct type etc.
23608
23609         (ConvertExplicit): Handle Enum types by examining the underlying type.
23610
23611 2001-11-21  Ravi Pratap  <ravi@ximian.com>
23612
23613         * parameter.cs (GetCallingConvention): Always return
23614         CallingConventions.Standard for now.
23615
23616 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23617
23618         * expression.cs (Binary.ResolveOperator): Update the values of `l'
23619         and `r' after calling DoNumericPromotions.
23620
23621         * ecore.cs: Fix error message (the types were in the wrong order).
23622
23623         * statement.cs (Foreach.ProbeCollectionType): Need to pass
23624         BindingFlags.Instance as well 
23625
23626         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
23627         implicit int literal conversion in an empty cast so that we
23628         propagate the right type upstream.
23629
23630         (UnboxCast): new class used to unbox value types.
23631         (Expression.ConvertExplicit): Add explicit type conversions done
23632         by unboxing.
23633
23634         (Expression.ImplicitNumericConversion): Oops, forgot to test for
23635         the target type before applying the implicit LongLiterals to ULong
23636         literal cast.
23637
23638 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
23639
23640         * cs-parser.jay (for_statement): Reworked the way For works: now
23641         we declare manually any variables that are introduced in
23642         for_initializer to solve the problem of having out-of-band code
23643         emition (that is what got for broken).
23644
23645         (declaration_statement): Perform the actual variable declaration
23646         that used to be done in local_variable_declaration here.
23647
23648         (local_variable_declaration): Do not declare anything, just pass
23649         the information on a DictionaryEntry
23650
23651 2001-11-20  Ravi Pratap  <ravi@ximian.com>
23652
23653         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
23654         re-write of the logic to now make it recursive.
23655
23656         (UpdateIndices): Re-write accordingly.
23657
23658         Store element data in a separate ArrayData list in the above methods.
23659
23660         (MakeByteBlob): Implement to dump the array data into a byte array.
23661
23662 2001-11-19  Ravi Pratap  <ravi@ximian.com>
23663
23664         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
23665         into CheckIndices.
23666
23667         * constant.cs (Define): Implement.
23668
23669         (EmitConstant): Re-write fully.
23670
23671         Pass in location info.
23672
23673         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
23674         respectively.
23675
23676         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
23677         DictionaryEntry since we need location info too.
23678
23679         (constant_declaration): Update accordingly.
23680
23681         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
23682         code into another method : UpdateIndices.
23683
23684 2001-11-18  Ravi Pratap  <ravi@ximian.com>
23685
23686         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
23687         some type checking etc.
23688
23689 2001-11-17  Ravi Pratap  <ravi@ximian.com>
23690
23691         * expression.cs (ArrayCreation::ValidateInitializers): Implement
23692         bits to provide dimension info if the user skips doing that.
23693
23694         Update second constructor to store the rank correctly.
23695
23696 2001-11-16  Ravi Pratap  <ravi@ximian.com>
23697
23698         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
23699         and try to implement.
23700
23701         * ../errors/cs0150.cs : Add.
23702
23703         * ../errors/cs0178.cs : Add.
23704
23705 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
23706
23707         * statement.cs: Implement foreach on multi-dimensional arrays. 
23708
23709         * parameter.cs (Parameters.GetParameterByName): Also lookup the
23710         name of the params argument.
23711
23712         * expression.cs: Use EmitStoreOpcode to get the right opcode while
23713         initializing the array.
23714
23715         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
23716         we can use this elsewhere.
23717
23718         * statement.cs: Finish implementation of foreach for single
23719         dimension arrays.
23720
23721         * cs-parser.jay: Use an out-of-band stack to pass information
23722         around, I wonder why I need this.
23723
23724         foreach_block: Make the new foreach_block the current_block.
23725
23726         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
23727         function used to return a static Parameters structure.  Used for
23728         empty parameters, as those are created very frequently.
23729
23730         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
23731
23732 2001-11-15  Ravi Pratap  <ravi@ximian.com>
23733
23734         * interface.cs : Default modifier is private, not public. The
23735         make verify test passes again.
23736
23737 2001-11-15  Ravi Pratap  <ravi@ximian.com>
23738
23739         * support.cs (ReflectionParameters): Fix logic to determine
23740         whether the last parameter is a params one. Test 9 passes again.
23741
23742         * delegate.cs (Populate): Register the builders we define with
23743         RegisterParameterForBuilder. Test 19 passes again.
23744
23745         * cs-parser.jay (property_declaration): Reference $6 instead
23746         of $$ to get at the location.
23747
23748         (indexer_declaration): Similar stuff.
23749
23750         (attribute): Ditto.
23751
23752         * class.cs (Property): Register parameters for the Get and Set methods
23753         if they exist. Test 23 passes again.
23754
23755         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
23756         call to EmitArguments as we are sure there aren't any params arguments. 
23757         Test 32 passes again.
23758
23759         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
23760         IndexOutOfRangeException. 
23761
23762         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
23763         Test 33 now passes again.
23764
23765 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
23766
23767         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
23768         broke a bunch of things.  Will have to come up with a better way
23769         of tracking locations.
23770
23771         * statement.cs: Implemented foreach for single dimension arrays.
23772
23773 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
23774
23775         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
23776         an error.  This removes the lookup from the critical path.
23777
23778         * cs-parser.jay: Removed use of temporary_loc, which is completely
23779         broken. 
23780
23781 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
23782
23783         * support.cs (ReflectionParameters.ParameterModifier): Report
23784         whether the argument is a PARAMS argument or not.
23785
23786         * class.cs: Set the attribute `ParamArrayAttribute' on the
23787         parameter argument.
23788
23789         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
23790         and cons_param_array_attribute (ConstructorInfo for
23791         ParamArrayAttribute)., 
23792
23793         * codegen.cs: Emit the return using the `Return' statement, that
23794         way we can report the error correctly for missing return values. 
23795
23796         * class.cs (Method.Emit): Clean up.
23797
23798         * expression.cs (Argument.Resolve): Take another argument: the
23799         location where this argument is used.  Notice that this is not
23800         part of the "Argument" class as to reduce the size of the
23801         structure (we know the approximate location anyways).
23802
23803         Test if the argument is a variable-reference, if not, then
23804         complain with a 206.
23805
23806         (Argument.Emit): Emit addresses of variables.
23807
23808         (Argument.FullDesc): Simplify.
23809
23810         (Invocation.DoResolve): Update for Argument.Resolve.
23811
23812         (ElementAccess.DoResolve): ditto.
23813
23814         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
23815         method should be virtual, as this method is always virtual.
23816
23817         (NewDelegate.DoResolve): Update for Argument.Resolve.
23818
23819         * class.cs (ConstructorInitializer.DoResolve): ditto.
23820
23821         * attribute.cs (Attribute.Resolve): ditto.
23822
23823 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
23824
23825         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
23826
23827         * expression.cs (ParameterReference): Drop IStackStorage and implement
23828         IAssignMethod instead. 
23829
23830         (LocalVariableReference): ditto.
23831
23832         * ecore.cs (FieldExpr): Drop IStackStorage and implement
23833         IAssignMethod instead. 
23834
23835 2001-11-13  Miguel de Icaza <miguel@ximian.com>
23836
23837         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
23838         enumerations that are used in heavily used structures derive from
23839         byte in a laughable and pathetic attempt to reduce memory usage.
23840         This is the kind of pre-optimzations that you should not do at
23841         home without adult supervision.
23842
23843         * expression.cs (UnaryMutator): New class, used to handle ++ and
23844         -- separatedly from the other unary operators.  Cleans up the
23845         code, and kills the ExpressionStatement dependency in Unary.
23846
23847         (Unary): Removed `method' and `Arguments' from this class, making
23848         it smaller, and moving it all to SimpleCall, so I can reuse this
23849         code in other locations and avoid creating a lot of transient data
23850         strucutres when not required.
23851
23852         * cs-parser.jay: Adjust for new changes.
23853
23854 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
23855
23856         * enum.cs (Enum.Populate): If there is a failure during
23857         definition, return
23858
23859         * cs-parser.jay (opt_enum_base): we used to catch type errors
23860         here, but this is really incorrect.  The type error should be
23861         catched during semantic analysis.
23862
23863 2001-12-11  Ravi Pratap  <ravi@ximian.com>
23864
23865         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
23866         current_local_parameters as expected since I, in my stupidity, had forgotten
23867         to do this :-)
23868
23869         * attribute.cs (GetValidPlaces): Fix stupid bug.
23870
23871         * class.cs (Method::Emit): Perform check on applicability of attributes.
23872
23873         (Constructor::Emit): Ditto.
23874
23875         (Field::Emit): Ditto.
23876
23877         (Field.Location): Store location information.
23878
23879         (Property, Event, Indexer, Operator): Ditto.
23880
23881         * cs-parser.jay (field_declaration): Pass in location for each field.
23882
23883         * ../errors/cs0592.cs : Add.
23884
23885 2001-11-12  Ravi Pratap  <ravi@ximian.com>
23886
23887         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
23888
23889         (InitCoreTypes): Update accordingly.
23890
23891         (RegisterAttrType, LookupAttr): Implement.
23892
23893         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
23894         info about the same.
23895
23896         (Resolve): Update to populate the above as necessary.
23897
23898         (Error592): Helper.
23899
23900         (GetValidPlaces): Helper to the above.
23901
23902         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
23903
23904         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
23905
23906 2001-11-12  Ravi Pratap  <ravi@ximian.com>
23907
23908         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
23909
23910         * ../errors/cs0617.cs : Add.
23911
23912 2001-11-11  Ravi Pratap  <ravi@ximian.com>
23913
23914         * enum.cs (Emit): Rename to Populate to be more consistent with what
23915         we expect it to do and when exactly it is called.
23916
23917         * class.cs, rootcontext.cs : Update accordingly.
23918
23919         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
23920         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
23921
23922         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
23923
23924         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
23925         of a fieldinfo using the above, when dealing with a FieldBuilder.
23926
23927 2001-11-10  Ravi Pratap  <ravi@ximian.com>
23928
23929         * ../errors/cs0031.cs : Add.
23930
23931         * ../errors/cs1008.cs : Add.
23932
23933         * ../errrors/cs0543.cs : Add.
23934
23935         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
23936         enum type.
23937
23938         (FindMembers): Implement.
23939
23940         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
23941         enums and delegates too.
23942
23943         (enum_types): Rename to builder_to_enum.
23944
23945         (delegate_types): Rename to builder_to_delegate.
23946
23947         * delegate.cs (FindMembers): Implement.
23948
23949 2001-11-09  Ravi Pratap  <ravi@ximian.com>
23950
23951         * typemanager.cs (IsEnumType): Implement.
23952
23953         * enum.cs (Emit): Re-write parts to account for the underlying type
23954         better and perform checking etc.
23955
23956         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
23957         of the underlying type.
23958
23959         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
23960         value
23961
23962         * enum.cs (error31): Helper to report error #31.
23963
23964         * cs-parser.jay (enum_declaration): Store location of each member too.
23965
23966         * enum.cs (member_to_location): New hashtable. 
23967
23968         (AddEnumMember): Update location hashtable.
23969
23970         (Emit): Use the location of each member while reporting errors.
23971
23972 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
23973
23974         * cs-parser.jay: A for_initializer if is a
23975         local_variable_declaration really ammount to have an implicit
23976         block with the variable declaration and no initializer for for.
23977
23978         * statement.cs (For.Emit): Cope with null initializers.
23979
23980         This fixes the infinite loop on for initializers.
23981
23982 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
23983
23984         * enum.cs: More cleanup.
23985
23986         * ecore.cs: Remove dead code.
23987
23988         * class.cs (Property.Emit): More simplification.
23989         (Event.Emit): ditto.
23990
23991         Reworked to have less levels of indentation.
23992
23993 2001-11-08  Ravi Pratap  <ravi@ximian.com>
23994
23995         * class.cs (Property): Emit attributes.
23996
23997         (Field): Ditto.
23998
23999         (Event): Ditto.
24000
24001         (Indexer): Ditto.
24002
24003         (Operator): Ditto.
24004
24005         * enum.cs (Emit): Ditto.
24006
24007         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
24008         Enums too.
24009
24010         * class.cs (Field, Event, etc.): Move attribute generation into the
24011         Emit method everywhere.
24012
24013         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
24014         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
24015         as we had no way of defining nested enums !
24016
24017         * rootcontext.cs : Adjust code accordingly.
24018
24019         * typemanager.cs (AddEnumType): To keep track of enum types separately.
24020
24021 2001-11-07  Ravi Pratap  <ravi@ximian.com>
24022
24023         * expression.cs (EvalConstantExpression): Move into ecore.cs
24024
24025         * enum.cs (Enum): Rename some members and make them public and readonly
24026         according to our convention.
24027
24028         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
24029         nothing else.
24030
24031         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
24032
24033         (Enum::Emit): Write a simple version for now which doesn't try to compute
24034         expressions. I shall modify this to be more robust in just a while.
24035
24036         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
24037
24038         (TypeContainer::CloseType): Create the Enum types too.
24039
24040         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
24041
24042         * expression.cs (EvalConstantExpression): Get rid of completely.
24043
24044         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
24045         user-defined values and other cases.
24046
24047         (IsValidEnumLiteral): Helper function.
24048
24049         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
24050         out there in the case we had a literal FieldExpr.
24051
24052         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
24053
24054         (Literalize): Revamp a bit to take two arguments.
24055
24056         (EnumLiteral): New class which derives from Literal to wrap enum literals.
24057
24058 2001-11-06  Ravi Pratap  <ravi@ximian.com>
24059
24060         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
24061
24062         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
24063
24064         (Resolve): Use the above to ensure we have proper initializers.
24065
24066 2001-11-05  Ravi Pratap  <ravi@ximian.com>
24067
24068         * expression.cs (Expression::EvalConstantExpression): New method to 
24069         evaluate constant expressions.
24070
24071         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
24072
24073 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
24074
24075         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
24076         in an array.
24077
24078         (Binary.ResolveOperator): Handle operator != (object a, object b)
24079         and operator == (object a, object b);
24080
24081         (Binary.DoNumericPromotions): Indicate whether the numeric
24082         promotion was possible.
24083
24084         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
24085         Implement.  
24086
24087         Made the ArrayAccess implement interface IAssignMethod instead of
24088         IStackStore as the order in which arguments are passed reflects
24089         this.
24090
24091         * assign.cs: Instead of using expr.ExprClass to select the way of
24092         assinging, probe for the IStackStore/IAssignMethod interfaces.
24093
24094         * typemanager.cs: Load InitializeArray definition.
24095
24096         * rootcontext.cs (RootContext.MakeStaticData): Used to define
24097         static data that can be used to initialize arrays. 
24098
24099 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
24100
24101         * expression.cs: Handle operator== and operator!= for booleans.
24102
24103         (Conditioal.Reduce): Implement reducer for the ?: operator.
24104
24105         (Conditional.Resolve): Implement dead code elimination.
24106
24107         (Binary.Resolve): Catch string literals and return a new
24108         concatenated string.
24109
24110         (Unary.Reduce): Implement reduction of unary expressions.
24111
24112         * ecore.cs: Split out the expression core handling here.
24113
24114         (Expression.Reduce): New method used to perform constant folding
24115         and CSE.  This is needed to support constant-expressions. 
24116
24117         * statement.cs (Statement.EmitBoolExpression): Pass true and false
24118         targets, and optimize for !x.
24119
24120 2001-11-04  Ravi Pratap  <ravi@ximian.com>
24121
24122         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
24123         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
24124         set custom atttributes.
24125
24126         * literal.cs (Literal::GetValue): New abstract method to return the actual
24127         value of the literal, cast as an object.
24128
24129         (*Literal): Implement GetValue method.
24130
24131         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
24132         expressions to the arraylist but objects of type Argument.
24133
24134         * class.cs (TypeContainer::Emit): Emit our attributes too.
24135
24136         (Method::Emit, Constructor::Emit): Ditto.
24137
24138         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
24139         to be ignoring earlier.
24140
24141 2001-11-03  Ravi Pratap  <ravi@ximian.com>
24142
24143         * attribute.cs (AttributeSection::Define): Implement to do the business
24144         of constructing a CustomAttributeBuilder.
24145
24146         (Attribute): New trivial class. Increases readability of code.  
24147
24148         * cs-parser.jay : Update accordingly.
24149
24150         (positional_argument_list, named_argument_list, named_argument): New rules
24151
24152         (attribute_arguments): Use the above so that we are more correct.
24153
24154 2001-11-02  Ravi Pratap  <ravi@ximian.com>
24155
24156         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
24157         to perform all checks for a method with a params parameter.
24158
24159         (Invocation::OverloadResolve): Update to use the above method and therefore
24160         cope correctly with params method invocations.
24161
24162         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
24163         params too.
24164
24165         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
24166         constructors in our parent too because we can't afford to miss out on 
24167         protected ones ;-)
24168
24169         * attribute.cs (AttributeSection): New name for the class Attribute
24170
24171         Other trivial changes to improve readability.
24172
24173         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
24174         use the new class names.
24175
24176 2001-11-01  Ravi Pratap  <ravi@ximian.com>
24177
24178         * class.cs (Method::Define): Complete definition for params types too
24179
24180         (Indexer::Define): Ditto.
24181
24182         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
24183         Cope everywhere with a request for info about the array parameter.
24184
24185 2001-11-01  Ravi Pratap  <ravi@ximian.com>
24186
24187         * tree.cs (RecordNamespace): Fix up to check for the correct key.
24188
24189         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
24190         local_variable_type to extract the string corresponding to the type.
24191
24192         (local_variable_type): Fixup the action to use the new helper method.
24193
24194         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
24195         go.
24196
24197         * expression.cs : Clean out code which uses the above.
24198
24199 2001-10-31  Ravi Pratap  <ravi@ximian.com>
24200
24201         * typemanager.cs (RegisterMethod): Check if we already have an existing key
24202         and bale out if necessary by returning a false.
24203
24204         (RegisterProperty): Ditto.
24205
24206         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
24207         and print out appropriate error messages.
24208
24209         * interface.cs (everywhere): Ditto.
24210
24211         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
24212         location to constructor.
24213
24214         * class.cs (Property, Event, Indexer): Update accordingly.
24215
24216         * ../errors/cs111.cs : Added.
24217
24218         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
24219         of a method, as laid down by the spec.
24220
24221         (Invocation::OverloadResolve): Use the above method.
24222
24223 2001-10-31  Ravi Pratap  <ravi@ximian.com>
24224
24225         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
24226         now take a TypeContainer and a Parameters object.
24227
24228         (ParameterData): Modify return type of ParameterModifier method to be 
24229         Parameter.Modifier and not a string.
24230
24231         (ReflectionParameters, InternalParameters): Update accordingly.
24232
24233         * expression.cs (Argument::GetParameterModifier): Same here.
24234
24235         * support.cs (InternalParameters::ParameterType): Find a better way of determining
24236         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
24237         symbol in it at all so maybe this is only for now.
24238
24239 2001-10-30  Ravi Pratap  <ravi@ximian.com>
24240
24241         * support.cs (InternalParameters): Constructor now takes an extra argument 
24242         which is the actual Parameters class.
24243
24244         (ParameterDesc): Update to provide info on ref/out modifiers.
24245
24246         * class.cs (everywhere): Update call to InternalParameters to pass in
24247         the second argument too.
24248
24249         * support.cs (ParameterData): Add ParameterModifier, which is a method 
24250         to return the modifier info [ref/out etc]
24251
24252         (InternalParameters, ReflectionParameters): Implement the above.
24253
24254         * expression.cs (Argument::ParameterModifier): Similar function to return
24255         info about the argument's modifiers.
24256
24257         (Invocation::OverloadResolve): Update to take into account matching modifiers 
24258         too.
24259
24260         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
24261         a new SetFormalParameters object which we pass to InternalParameters.
24262
24263 2001-10-30  Ravi Pratap  <ravi@ximian.com>
24264
24265         * expression.cs (NewArray): Merge into the ArrayCreation class.
24266
24267 2001-10-29  Ravi Pratap  <ravi@ximian.com>
24268
24269         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
24270         NewUserdefinedArray into one as there wasn't much of a use in having
24271         two separate ones.
24272
24273         * expression.cs (Argument): Change field's name to ArgType from Type.
24274
24275         (Type): New readonly property which returns the proper type, taking into 
24276         account ref/out modifiers.
24277
24278         (everywhere): Adjust code accordingly for the above.
24279
24280         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
24281         whether we are emitting for a ref or out parameter.
24282
24283         * expression.cs (Argument::Emit): Use the above field to set the state.
24284
24285         (LocalVariableReference::Emit): Update to honour the flag and emit the
24286         right stuff.
24287
24288         * parameter.cs (Attributes): Set the correct flags for ref parameters.
24289
24290         * expression.cs (Argument::FullDesc): New function to provide a full desc.
24291
24292         * support.cs (ParameterData): Add method ParameterDesc to the interface.
24293
24294         (ReflectionParameters, InternalParameters): Implement the above method.
24295
24296         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
24297         reporting errors.
24298
24299         (Invocation::FullMethodDesc): Ditto. 
24300
24301 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
24302
24303         * cs-parser.jay: Add extra production for the second form of array
24304         creation. 
24305
24306         * expression.cs (ArrayCreation): Update to reflect the above
24307         change. 
24308
24309         * Small changes to prepare for Array initialization.
24310
24311 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
24312
24313         * typemanager.cs (ImplementsInterface): interface might be null;
24314         Deal with this problem;
24315
24316         Also, we do store negative hits on the cache (null values), so use
24317         this instead of calling t.GetInterfaces on the type everytime.
24318
24319 2001-10-28  Ravi Pratap  <ravi@ximian.com>
24320
24321         * typemanager.cs (IsBuiltinType): New method to help determine the same.
24322
24323         * expression.cs (New::DoResolve): Get rid of array creation code and instead
24324         split functionality out into different classes.
24325
24326         (New::FormArrayType): Move into NewBuiltinArray.
24327
24328         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
24329         quite useless.
24330
24331         (NewBuiltinArray): New class to handle creation of built-in arrays.
24332
24333         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
24334         account creation of one-dimensional arrays.
24335
24336         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
24337
24338         (NewUserdefinedArray::DoResolve): Implement.
24339
24340         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
24341
24342         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
24343         we maintain inside the TypeManager. This is necessary to perform lookups on the
24344         module builder.
24345
24346         (LookupType): Update to perform GetType on the module builders too.     
24347
24348         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
24349
24350         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
24351
24352 2001-10-23  Ravi Pratap  <ravi@ximian.com>
24353
24354         * expression.cs (New::DoResolve): Implement guts of array creation.
24355
24356         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
24357
24358 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
24359
24360         * expression.cs: Fix bug I introduced lsat night that broke
24361         Delegates. 
24362
24363         (Expression.Resolve): Report a 246 error (can not resolve name)
24364         if we find a SimpleName in the stream.
24365
24366         (Expression.ResolveLValue): Ditto.
24367
24368         (Expression.ResolveWithSimpleName): This function is a variant of
24369         ResolveName, this one allows SimpleNames to be returned without a
24370         warning.  The only consumer of SimpleNames is MemberAccess
24371
24372 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
24373
24374         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
24375         might arrive here.  I have my doubts that this is correct.
24376
24377         * statement.cs (Lock): Implement lock statement.
24378
24379         * cs-parser.jay: Small fixes to support `lock' and `using'
24380
24381         * cs-tokenizer.cs: Remove extra space
24382
24383         * driver.cs: New flag --checked, allows to turn on integer math
24384         checking. 
24385
24386         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
24387         Threading.Monitor.Exit 
24388
24389 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
24390
24391         * expression.cs (IndexerAccess::DoResolveLValue): Set the
24392         Expression Class to be IndexerAccess.
24393
24394         Notice that Indexer::DoResolve sets the eclass to Value.
24395
24396 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
24397
24398         * class.cs (TypeContainer::Emit): Emit code for indexers.
24399
24400         * assign.cs (IAssignMethod): New interface implemented by Indexers
24401         and Properties for handling assignment.
24402
24403         (Assign::Emit): Simplify and reuse code. 
24404
24405         * expression.cs (IndexerAccess, PropertyExpr): Implement
24406         IAssignMethod, clean up old code. 
24407
24408 2001-10-22  Ravi Pratap  <ravi@ximian.com>
24409
24410         * typemanager.cs (ImplementsInterface): New method to determine if a type
24411         implements a given interface. Provides a nice cache too.
24412
24413         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
24414         method.
24415
24416         (ConvertReferenceExplicit): Ditto.
24417
24418         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
24419         various methods, with correct names etc.
24420
24421         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
24422         Operator.UnaryNegation.
24423
24424         * cs-parser.jay (operator_declarator): Be a little clever in the case where
24425         we have a unary plus or minus operator.
24426
24427         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
24428         UnaryMinus.
24429
24430         * everywhere : update accordingly.
24431
24432         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
24433         respectively.
24434
24435         * class.cs (Method::Define): For the case where we are implementing a method
24436         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
24437         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
24438
24439 2001-10-21  Ravi Pratap  <ravi@ximian.com>
24440
24441         * interface.cs (FindMembers): Implement to work around S.R.E
24442         lameness.
24443
24444         * typemanager.cs (IsInterfaceType): Implement.
24445
24446         (FindMembers): Update to handle interface types too.
24447
24448         * expression.cs (ImplicitReferenceConversion): Re-write bits which
24449         use IsAssignableFrom as that is not correct - it doesn't work.
24450
24451         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
24452         and accordingly override EmitStatement.
24453
24454         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
24455         using the correct logic :-)
24456
24457 2001-10-19  Ravi Pratap  <ravi@ximian.com>
24458
24459         * ../errors/cs-11.cs : Add to demonstrate error -11 
24460
24461 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
24462
24463         * assign.cs (Assign::Resolve): Resolve right hand side first, and
24464         then pass this as a hint to ResolveLValue.
24465
24466         * expression.cs (FieldExpr): Add Location information
24467
24468         (FieldExpr::LValueResolve): Report assignment to readonly
24469         variable. 
24470
24471         (Expression::ExprClassFromMemberInfo): Pass location information.
24472
24473         (Expression::ResolveLValue): Add new method that resolves an
24474         LValue. 
24475
24476         (Expression::DoResolveLValue): Default invocation calls
24477         DoResolve. 
24478
24479         (Indexers): New class used to keep track of indexers in a given
24480         Type. 
24481
24482         (IStackStore): Renamed from LValue, as it did not really describe
24483         what this did.  Also ResolveLValue is gone from this interface and
24484         now is part of Expression.
24485
24486         (ElementAccess): Depending on the element access type
24487
24488         * typemanager.cs: Add `indexer_name_type' as a Core type
24489         (System.Runtime.CompilerServices.IndexerNameAttribute)
24490
24491         * statement.cs (Goto): Take a location.
24492
24493 2001-10-18  Ravi Pratap  <ravi@ximian.com>
24494
24495         * delegate.cs (Delegate::VerifyDelegate): New method to verify
24496         if two delegates are compatible.
24497
24498         (NewDelegate::DoResolve): Update to take care of the case when
24499         we instantiate a delegate from another delegate.
24500
24501         * typemanager.cs (FindMembers): Don't even try to look up members
24502         of Delegate types for now.
24503
24504 2001-10-18  Ravi Pratap  <ravi@ximian.com>
24505
24506         * delegate.cs (NewDelegate): New class to take care of delegate
24507         instantiation.
24508
24509         * expression.cs (New): Split the delegate related code out into 
24510         the NewDelegate class.
24511
24512         * delegate.cs (DelegateInvocation): New class to handle delegate 
24513         invocation.
24514
24515         * expression.cs (Invocation): Split out delegate related code into
24516         the DelegateInvocation class.
24517
24518 2001-10-17  Ravi Pratap  <ravi@ximian.com>
24519
24520         * expression.cs (New::DoResolve): Implement delegate creation fully
24521         and according to the spec.
24522
24523         (New::DoEmit): Update to handle delegates differently.
24524
24525         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
24526         because of which we were printing out arguments in reverse order !
24527
24528         * delegate.cs (VerifyMethod): Implement to check if the given method
24529         matches the delegate.
24530
24531         (FullDelegateDesc): Implement.
24532
24533         (VerifyApplicability): Implement.
24534
24535         * expression.cs (Invocation::DoResolve): Update to accordingly handle
24536         delegate invocations too.
24537
24538         (Invocation::Emit): Ditto.
24539
24540         * ../errors/cs1593.cs : Added.
24541
24542         * ../errors/cs1594.cs : Added.
24543
24544         * delegate.cs (InstanceExpression, TargetMethod): New properties.
24545
24546 2001-10-16  Ravi Pratap  <ravi@ximian.com>
24547
24548         * typemanager.cs (intptr_type): Core type for System.IntPtr
24549
24550         (InitCoreTypes): Update for the same.
24551
24552         (iasyncresult_type, asynccallback_type): Ditto.
24553
24554         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
24555         correct.
24556
24557         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
24558         too.
24559
24560         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
24561         the builders for the 4 members of a delegate type :-)
24562
24563         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
24564         type.
24565
24566         * expression.cs (New::DoResolve): Implement guts for delegate creation.
24567
24568         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
24569
24570 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
24571
24572         * statement.cs (Break::Emit): Implement.   
24573         (Continue::Emit): Implement.
24574
24575         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24576         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24577         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24578         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
24579         end loop
24580
24581         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
24582         properties that track the label for the current loop (begin of the
24583         loop and end of the loop).
24584
24585 2001-10-15  Ravi Pratap  <ravi@ximian.com>
24586
24587         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
24588         use of emitting anything at all.
24589
24590         * class.cs, rootcontext.cs : Get rid of calls to the same.
24591
24592         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
24593
24594         (Populate): Define the constructor correctly and set the implementation
24595         attributes.
24596
24597         * typemanager.cs (delegate_types): New hashtable to hold delegates that
24598         have been defined.
24599
24600         (AddDelegateType): Implement.
24601
24602         (IsDelegateType): Implement helper method.
24603
24604         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
24605
24606         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
24607         and accordingly handle it.
24608
24609         * delegate.cs (Populate): Take TypeContainer argument.
24610         Implement bits to define the Invoke method. However, I still haven't figured out
24611         how to take care of the native int bit :-(
24612
24613         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
24614         Qualify the name of the delegate, not its return type !
24615
24616         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
24617         conversion.
24618
24619         (StandardConversionExists): Checking for array types turns out to be recursive.
24620
24621         (ConvertReferenceExplicit): Implement array conversion.
24622
24623         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
24624
24625 2001-10-12  Ravi Pratap  <ravi@ximian.com>
24626
24627         * cs-parser.jay (delegate_declaration): Store the fully qualified
24628         name as it is a type declaration.
24629
24630         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
24631         readonly.
24632
24633         (DefineDelegate): Renamed from Define. Does the same thing essentially,
24634         as TypeContainer::DefineType.
24635
24636         (Populate): Method in which all the definition of the various methods (Invoke)
24637         etc is done.
24638
24639         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
24640         see.
24641
24642         (CloseDelegate): Finally creates the delegate.
24643
24644         * class.cs (TypeContainer::DefineType): Update to define delegates.
24645         (Populate, Emit and CloseType): Do the same thing here too.
24646
24647         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
24648         delegates in all these operations.
24649
24650 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
24651
24652         * expression.cs: LocalTemporary: a new expression used to
24653         reference a temporary that has been created.
24654
24655         * assign.cs: Handle PropertyAccess back here, so that we can
24656         provide the proper semantic access to properties.
24657
24658         * expression.cs (Expression::ConvertReferenceExplicit): Implement
24659         a few more explicit conversions. 
24660
24661         * modifiers.cs: `NEW' modifier maps to HideBySig.
24662
24663         * expression.cs (PropertyExpr): Make this into an
24664         ExpressionStatement, and support the EmitStatement code path. 
24665
24666         Perform get/set error checking, clean up the interface.
24667
24668         * assign.cs: recognize PropertyExprs as targets, and if so, turn
24669         them into toplevel access objects.
24670
24671 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
24672
24673         * expression.cs: PropertyExpr::PropertyExpr: use work around the
24674         SRE.
24675
24676         * typemanager.cs: Keep track here of our PropertyBuilders again to
24677         work around lameness in SRE.
24678
24679 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
24680
24681         * expression.cs (LValue::LValueResolve): New method in the
24682         interface, used to perform a second resolution pass for LValues. 
24683
24684         (This::DoResolve): Catch the use of this in static methods.
24685
24686         (This::LValueResolve): Implement.
24687
24688         (This::Store): Remove warning, assigning to `this' in structures
24689         is 
24690
24691         (Invocation::Emit): Deal with invocation of
24692         methods on value types.  We need to pass the address to structure
24693         methods rather than the object itself.  (The equivalent code to
24694         emit "this" for structures leaves the entire structure on the
24695         stack instead of a pointer to it). 
24696
24697         (ParameterReference::DoResolve): Compute the real index for the
24698         argument based on whether the method takes or not a `this' pointer
24699         (ie, the method is static).
24700
24701         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
24702         value types returned from functions when we need to invoke a
24703         method on the sturcture.
24704
24705
24706 2001-10-11  Ravi Pratap  <ravi@ximian.com>
24707
24708         * class.cs (TypeContainer::DefineType): Method to actually do the business of
24709         defining the type in the Modulebuilder or Typebuilder. This is to take
24710         care of nested types which need to be defined on the TypeBuilder using
24711         DefineNestedMethod.
24712
24713         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
24714         methods in RootContext, only ported to be part of TypeContainer.
24715
24716         (TypeContainer::GetInterfaceOrClass): Ditto.
24717
24718         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
24719
24720         * interface.cs (Interface::DefineInterface): New method. Does exactly
24721         what RootContext.CreateInterface did earlier, only it takes care of nested types 
24722         too.
24723
24724         (Interface::GetInterfaces): Move from RootContext here and port.
24725
24726         (Interface::GetInterfaceByName): Same here.
24727
24728         * rootcontext.cs (ResolveTree): Re-write.
24729
24730         (PopulateTypes): Re-write.
24731
24732         * class.cs (TypeContainer::Populate): Populate nested types too.
24733         (TypeContainer::Emit): Emit nested members too.
24734
24735         * typemanager.cs (AddUserType): Do not make use of the FullName property,
24736         instead just use the name argument passed in as it is already fully
24737         qualified.
24738
24739         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
24740         to TypeContainer mapping to see if a type is user-defined.
24741
24742         * class.cs (TypeContainer::CloseType): Implement. 
24743
24744         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
24745         the default constructor.
24746
24747         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
24748         twice.
24749
24750         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
24751
24752         * interface.cs (CloseType): Create the type here.
24753
24754         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
24755         the hierarchy.
24756
24757         Remove all the methods which are now in TypeContainer.
24758
24759 2001-10-10  Ravi Pratap  <ravi@ximian.com>
24760
24761         * delegate.cs (Define): Re-write bits to define the delegate
24762         correctly.
24763
24764 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
24765
24766         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
24767
24768         * expression.cs (ImplicitReferenceConversion): handle null as well
24769         as a source to convert to any reference type.
24770
24771         * statement.cs (Return): Perform any implicit conversions to
24772         expected return type.  
24773
24774         Validate use of return statement.  
24775
24776         * codegen.cs (EmitContext): Pass the expected return type here.
24777
24778         * class.cs (Method, Constructor, Property): Pass expected return
24779         type to EmitContext.
24780
24781 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
24782
24783         * expression.cs: Make DoResolve take an EmitContext instead of a
24784         TypeContainer.
24785
24786         Replaced `l' and `location' for `loc', for consistency.
24787
24788         (Error, Warning): Remove unneeded Tc argument.
24789
24790         * assign.cs, literal.cs, constant.cs: Update to new calling
24791         convention. 
24792
24793         * codegen.cs: EmitContext now contains a flag indicating whether
24794         code is being generated in a static method or not.
24795
24796         * cs-parser.jay: DecomposeQI, new function that replaces the old
24797         QualifiedIdentifier.  Now we always decompose the assembled
24798         strings from qualified_identifier productions into a group of
24799         memberaccesses.
24800
24801 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
24802
24803         * rootcontext.cs: Deal with field-less struct types correctly now
24804         by passing the size option to Define Type.
24805
24806         * class.cs: Removed hack that created one static field. 
24807
24808 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
24809
24810         * statement.cs: Moved most of the code generation here. 
24811
24812 2001-10-09  Ravi Pratap  <ravi@ximian.com>
24813
24814         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
24815         seem very right.
24816
24817         (ElementAccess): Remove useless bits for now - keep checks as the spec
24818         says.
24819
24820 2001-10-08  Ravi Pratap  <ravi@ximian.com>
24821
24822         * expression.cs (ElementAccess::DoResolve): Remove my crap code
24823         and start performing checks according to the spec.
24824
24825 2001-10-07  Ravi Pratap  <ravi@ximian.com>
24826
24827         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
24828         rank_specifiers instead.
24829
24830         (rank_specifiers): Change the order in which the rank specifiers are stored
24831
24832         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
24833
24834         * expression.cs (ElementAccess): Implement the LValue interface too.
24835
24836 2001-10-06  Ravi Pratap  <ravi@ximian.com>
24837
24838         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
24839         except that user defined conversions are not included.
24840
24841         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
24842         perform the conversion of the return type, if necessary.
24843
24844         (New::DoResolve): Check whether we are creating an array or an object
24845         and accordingly do the needful.
24846
24847         (New::Emit): Same here.
24848
24849         (New::DoResolve): Implement guts of array creation.
24850
24851         (New::FormLookupType): Helper function.
24852
24853 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
24854
24855         * codegen.cs: Removed most of the code generation here, and move the
24856         corresponding code generation bits to the statement classes. 
24857
24858         Added support for try/catch/finalize and throw.
24859
24860         * cs-parser.jay: Added support for try/catch/finalize.
24861
24862         * class.cs: Catch static methods having the flags override,
24863         virtual or abstract.
24864
24865         * expression.cs (UserCast): This user cast was not really doing
24866         what it was supposed to do.  Which is to be born in fully resolved
24867         state.  Parts of the resolution were being performed at Emit time! 
24868
24869         Fixed this code.
24870
24871 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
24872
24873         * expression.cs: Implicity convert the result from UserCast.
24874
24875 2001-10-05  Ravi Pratap  <ravi@ximian.com>
24876
24877         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
24878         prevented it from working correctly. 
24879
24880         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
24881         merely ConvertImplicit.
24882
24883 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
24884
24885         * typemanager.cs: Make the LookupTypeContainer function static,
24886         and not per-instance.  
24887
24888         * class.cs: Make static FindMembers (the one that takes a Type
24889         argument). 
24890
24891         * codegen.cs: Add EmitForeach here.
24892
24893         * cs-parser.jay: Make foreach a toplevel object instead of the
24894         inline expansion, as we need to perform semantic analysis on it. 
24895
24896 2001-10-05  Ravi Pratap  <ravi@ximian.com>
24897
24898         * expression.cs (Expression::ImplicitUserConversion): Rename to
24899         UserDefinedConversion.
24900
24901         (Expression::UserDefinedConversion): Take an extra argument specifying 
24902         whether we look for explicit user conversions too.
24903
24904         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
24905
24906         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
24907
24908         (ExplicitUserConversion): Make it a call to UserDefinedConversion
24909         with the appropriate arguments.
24910
24911         * cs-parser.jay (cast_expression): Record location too.
24912
24913         * expression.cs (Cast): Record location info.
24914
24915         (Expression::ConvertExplicit): Take location argument.
24916
24917         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
24918         to determine if we are doing explicit conversions.
24919
24920         (UserCast::Emit): Update accordingly.
24921
24922         (Expression::ConvertExplicit): Report an error if everything fails.
24923
24924         * ../errors/cs0030.cs : Add.
24925
24926 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
24927
24928         * modifiers.cs: If the ABSTRACT keyword is present, also set the
24929         virtual and newslot bits. 
24930
24931         * class.cs (TypeContainer::RegisterRequiredImplementations):
24932         Record methods we need.
24933
24934         (TypeContainer::MakeKey): Helper function to make keys for
24935         MethodBases, since the Methodbase key is useless.
24936
24937         (TypeContainer::Populate): Call RegisterRequiredImplementations
24938         before defining the methods.   
24939
24940         Create a mapping for method_builders_to_methods ahead of time
24941         instead of inside a tight loop.
24942
24943         (::RequireMethods):  Accept an object as the data to set into the
24944         hashtable so we can report interface vs abstract method mismatch.
24945
24946 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
24947
24948         * report.cs: Make all of it static.
24949
24950         * rootcontext.cs: Drop object_type and value_type computations, as
24951         we have those in the TypeManager anyways.
24952
24953         Drop report instance variable too, now it is a global.
24954
24955         * driver.cs: Use try/catch on command line handling.
24956
24957         Add --probe option to debug the error reporting system with a test
24958         suite. 
24959
24960         * report.cs: Add support for exiting program when a probe
24961         condition is reached.
24962
24963 2001-10-03  Ravi Pratap  <ravi@ximian.com>
24964
24965         * expression.cs (Binary::DoNumericPromotions): Fix the case when
24966         we do a forcible conversion regardless of type, to check if 
24967         ForceConversion returns a null.
24968
24969         (Binary::error19): Use location to report error.
24970
24971         (Unary::error23): Use location here too.
24972
24973         * ../errors/cs0019.cs : Check in.
24974
24975         * ../errors/cs0023.cs : Check in.
24976
24977         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
24978         case of a non-null MethodInfo object with a length of 0 !
24979
24980         (Binary::ResolveOperator): Flag error if overload resolution fails to find
24981         an applicable member - according to the spec :-)
24982         Also fix logic to find members in base types.
24983
24984         (Unary::ResolveOperator): Same here.
24985
24986         (Unary::report23): Change name to error23 and make first argument a TypeContainer
24987         as I was getting thoroughly confused between this and error19 :-)
24988
24989         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
24990         (::FindMostEncompassedType): Implement.
24991         (::FindMostEncompassingType): Implement.
24992         (::StandardConversionExists): Implement.
24993
24994         (UserImplicitCast): Re-vamp. We now need info about most specific
24995         source and target types so that we can do the necessary conversions.
24996
24997         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
24998         mathematical union with no duplicates.
24999
25000 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
25001
25002         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
25003         in order from base classes to child classes, so that we can in
25004         child classes look up in our parent for method names and
25005         attributes (required for handling abstract, virtual, new, override
25006         constructs: we need to instrospect our base class, and if we dont
25007         populate the classes in order, the introspection might be
25008         incorrect.  For example, a method could query its parent before
25009         the parent has any methods and would determine that the parent has
25010         no abstract methods (while it could have had them)).
25011
25012         (RootContext::CreateType): Record the order in which we define the
25013         classes.
25014
25015 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
25016
25017         * class.cs (TypeContainer::Populate): Also method definitions can
25018         fail now, keep track of this.
25019
25020         (TypeContainer::FindMembers): Implement support for
25021         DeclaredOnly/noDeclaredOnly flag.
25022
25023         (Constructor::Emit) Return the ConstructorBuilder.
25024
25025         (Method::Emit) Return the MethodBuilder. 
25026         Check for abstract or virtual methods to be public.
25027
25028         * rootcontext.cs (RootContext::CreateType): Register all the
25029         abstract methods required for the class to be complete and the
25030         interface methods that must be implemented. 
25031
25032         * cs-parser.jay: Report error 501 (method requires body if it is
25033         not marked abstract or extern).
25034
25035         * expression.cs (TypeOf::Emit): Implement.
25036
25037         * typemanager.cs: runtime_handle_type, new global type.
25038
25039         * class.cs (Property::Emit): Generate code for properties.
25040
25041 2001-10-02  Ravi Pratap  <ravi@ximian.com>
25042
25043         * expression.cs (Unary::ResolveOperator): Find operators on base type
25044         too - we now conform exactly to the spec.
25045
25046         (Binary::ResolveOperator): Same here.
25047
25048         * class.cs (Operator::Define): Fix minor quirk in the tests.
25049
25050         * ../errors/cs0215.cs : Added.
25051
25052         * ../errors/cs0556.cs : Added.
25053
25054         * ../errors/cs0555.cs : Added.
25055
25056 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
25057
25058         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
25059         single integer which is really efficient
25060
25061 2001-10-01  Ravi Pratap  <ravi@ximian.com>
25062
25063         *  expression.cs (Expression::ImplicitUserConversion): Use location
25064         even in the case when we are examining True operators.
25065  
25066         * class.cs (Operator::Define): Perform extensive checks to conform
25067         with the rules for operator overloading in the spec.
25068
25069         * expression.cs (Expression::ImplicitReferenceConversion): Implement
25070         some of the other conversions mentioned in the spec.
25071
25072         * typemanager.cs (array_type): New static member for the System.Array built-in
25073         type.
25074
25075         (cloneable_interface): For System.ICloneable interface.
25076
25077         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
25078         we start resolving the tree and populating types.
25079
25080         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
25081  
25082 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
25083
25084         * expression.cs (Expression::ExprClassFromMemberInfo,
25085         Expression::Literalize): Create literal expressions from
25086         FieldInfos which are literals.
25087
25088         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
25089         type casts, because they were wrong.  The test suite in tests
25090         caught these ones.
25091
25092         (ImplicitNumericConversion): ushort to ulong requires a widening
25093         cast. 
25094
25095         Int32 constant to long requires widening cast as well.
25096
25097         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
25098         for integers because the type on the stack is not i4.
25099
25100 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
25101
25102         * expression.cs (report118): require location argument. 
25103
25104         * parameter.cs: Do not dereference potential null value.
25105
25106         * class.cs: Catch methods that lack the `new' keyword when
25107         overriding a name.  Report warnings when `new' is used without
25108         anything being there to override.
25109
25110         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
25111
25112         * class.cs: Only add constructor to hashtable if it is non-null
25113         (as now constructors can fail on define).
25114
25115         (TypeManager, Class, Struct): Take location arguments.
25116
25117         Catch field instance initialization in structs as errors.
25118
25119         accepting_filter: a new filter for FindMembers that is static so
25120         that we dont create an instance per invocation.
25121
25122         (Constructor::Define): Catch errors where a struct constructor is
25123         parameterless 
25124
25125         * cs-parser.jay: Pass location information for various new
25126         constructs. 
25127
25128         * delegate.cs (Delegate): take a location argument.
25129
25130         * driver.cs: Do not call EmitCode if there were problesm in the
25131         Definition of the types, as many Builders wont be there. 
25132
25133         * decl.cs (Decl::Decl): Require a location argument.
25134
25135         * cs-tokenizer.cs: Handle properly hex constants that can not fit
25136         into integers, and find the most appropiate integer for it.
25137
25138         * literal.cs: Implement ULongLiteral.
25139
25140         * rootcontext.cs: Provide better information about the location of
25141         failure when CreateType fails.
25142
25143 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
25144
25145         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
25146         as well.
25147
25148         * expression.cs (Binary::CheckShiftArguments): Add missing type
25149         computation.
25150         (Binary::ResolveOperator): Add type to the logical and and logical
25151         or, Bitwise And/Or and Exclusive Or code paths, it was missing
25152         before.
25153
25154         (Binary::DoNumericPromotions): In the case where either argument
25155         is ulong (and most signed types combined with ulong cause an
25156         error) perform implicit integer constant conversions as well.
25157
25158 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
25159
25160         * expression.cs (UserImplicitCast): Method should always be
25161         non-null. 
25162         (Invocation::BetterConversion): Simplified test for IntLiteral.
25163
25164         (Expression::ImplicitNumericConversion): Split this routine out.
25165         Put the code that performs implicit constant integer conversions
25166         here. 
25167
25168         (Expression::Resolve): Become a wrapper around DoResolve so we can
25169         check eclass and type being set after resolve.
25170
25171         (Invocation::Badness): Remove this dead function
25172
25173         (Binary::ResolveOperator): Do not compute the expensive argumnets
25174         unless we have a union for it.
25175
25176         (Probe::Emit): Is needs to do an isinst and then
25177         compare against null.
25178
25179         (::CanConvert): Added Location argument.  If the Location argument
25180         is null (Location.Null), then we do not report errors.  This is
25181         used by the `probe' mechanism of the Explicit conversion.  We do
25182         not want to generate an error for something that the user
25183         explicitly requested to be casted.  But the pipeline for an
25184         explicit cast first tests for potential implicit casts.
25185
25186         So for now, if the Location is null, it means `Probe only' to
25187         avoid adding another argument.   Might have to revise this
25188         strategy later.
25189
25190         (ClassCast): New class used to type cast objects into arbitrary
25191         classes (used in Explicit Reference Conversions).
25192
25193         Implement `as' as well.
25194
25195         Reverted all the patches from Ravi below: they were broken:
25196
25197                 * The use of `level' as a mechanism to stop recursive
25198                   invocations is wrong.  That was there just to catch the
25199                   bug with a strack trace but not as a way of addressing
25200                   the problem.
25201
25202                   To fix the problem we have to *understand* what is going
25203                   on and the interactions and come up with a plan, not
25204                   just get things going.
25205
25206                 * The use of the type conversion cache that I proposed
25207                   last night had an open topic: How does this work across
25208                   protection domains.  A user defined conversion might not
25209                   be public in the location where we are applying the
25210                   conversion, a different conversion might be selected
25211                   (ie, private A->B (better) but public B->A (worse),
25212                   inside A, A->B applies, but outside it, B->A will
25213                   apply).
25214
25215                 * On top of that (ie, even if the above is solved),
25216                   conversions in a cache need to be abstract.  Ie, `To
25217                   convert from an Int to a Short use an OpcodeCast', not
25218                   `To convert from an Int to a Short use the OpcodeCast on
25219                   the variable 5' (which is what this patch was doing).
25220
25221 2001-09-28  Ravi Pratap  <ravi@ximian.com>
25222
25223         * expression.cs (Invocation::ConversionExists): Re-write to use
25224         the conversion cache
25225
25226         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
25227         cache all conversions done, not just user-defined ones.
25228
25229         (Invocation::BetterConversion): The real culprit. Use ConversionExists
25230         to determine if a conversion exists instead of acutually trying to 
25231         perform the conversion. It's faster too.
25232
25233         (Expression::ConvertExplicit): Modify to use ConversionExists to check
25234         and only then attempt the implicit conversion.
25235
25236 2001-09-28  Ravi Pratap  <ravi@ximian.com>
25237
25238         * expression.cs (ConvertImplicit): Use a cache for conversions
25239         already found. Check level of recursion and bail out if necessary.
25240
25241 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
25242
25243         * typemanager.cs (string_concat_string_string, string_concat_object_object):
25244         Export standard methods that we expect for string operations.
25245
25246         * statement.cs (Block::UsageWarning): Track usage of variables and
25247         report the errors for not used variables.
25248
25249         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
25250         operator. 
25251
25252 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
25253
25254         * codegen.cs: remove unnneded code 
25255
25256         * expression.cs: Removed BuiltinTypeAccess class
25257
25258         Fix the order in which implicit conversions are
25259         done.  
25260
25261         The previous fixed dropped support for boxed conversions (adding a
25262         test to the test suite now)
25263
25264         (UserImplicitCast::CanConvert): Remove test for source being null,
25265         that code is broken.  We should not feed a null to begin with, if
25266         we do, then we should track the bug where the problem originates
25267         and not try to cover it up here.
25268
25269         Return a resolved expression of type UserImplicitCast on success
25270         rather than true/false.  Ravi: this is what I was talking about,
25271         the pattern is to use a static method as a "constructor" for
25272         objects. 
25273
25274         Also, do not create arguments until the very last minute,
25275         otherwise we always create the arguments even for lookups that
25276         will never be performed. 
25277
25278         (UserImplicitCast::Resolve): Eliminate, objects of type
25279         UserImplicitCast are born in a fully resolved state. 
25280
25281         * typemanager.cs (InitCoreTypes): Init also value_type
25282         (System.ValueType). 
25283
25284         * expression.cs (Cast::Resolve): First resolve the child expression.
25285
25286         (LValue): Add new method AddressOf to be used by
25287         the `&' operator.  
25288
25289         Change the argument of Store to take an EmitContext instead of an
25290         ILGenerator, because things like FieldExpr need to be able to call
25291         their children expression to generate the instance code. 
25292
25293         (Expression::Error, Expression::Warning): Sugar functions for
25294         reporting errors.
25295
25296         (Expression::MemberLookup): Accept a TypeContainer instead of a
25297         Report as the first argument.
25298
25299         (Expression::ResolvePrimary): Killed.  I still want to improve
25300         this as currently the code is just not right.
25301
25302         (Expression::ResolveMemberAccess): Simplify, but it is still
25303         wrong. 
25304
25305         (Unary::Resolve): Catch errors in AddressOf operators.
25306
25307         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
25308         index to a byte for the short-version, or the compiler will choose
25309         the wrong Emit call, which generates the wrong data.
25310
25311         (ParameterReference::Emit, ::Store): same.
25312
25313         (FieldExpr::AddressOf): Implement.
25314
25315         * typemanager.cs: TypeManager: made public variable instead of
25316         property.
25317
25318         * driver.cs: document --fatal.
25319
25320         * report.cs (ErrorMessage, WarningMessage): new names for the old
25321         Error and Warning classes.
25322
25323         * cs-parser.jay (member_access): Turn built-in access to types
25324         into a normal simplename
25325
25326 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25327
25328         * expression.cs (Invocation::BetterConversion): Fix to cope
25329         with q being null, since this was introducing a bug.
25330
25331         * expression.cs (ConvertImplicit): Do built-in conversions first.
25332
25333 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25334
25335         * expression.cs (UserImplicitCast::Resolve): Fix bug.
25336
25337 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25338
25339         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
25340         I had introduced long ago (what's new ?).
25341
25342         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
25343         the work of all the checking. 
25344         (ConvertImplicit): Call CanConvert and only then create object if necessary.
25345         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
25346
25347         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
25348         that is the right way. 
25349
25350         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
25351         overloading resolution. Use everywhere instead of cutting and pasting code.
25352
25353         (Binary::ResolveOperator): Use MakeUnionSet.
25354
25355         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
25356         we have to convert to bool types. Not complete yet.
25357
25358 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
25359
25360         * typemanager.cs (TypeManager::CSharpName): support ushort.
25361
25362         * expression.cs (Expression::TryImplicitIntConversion): Attempts
25363         to provide an expression that performsn an implicit constant int
25364         conversion (section 6.1.6).
25365         (Expression::ConvertImplicitRequired): Reworked to include
25366         implicit constant expression conversions.
25367
25368         (Expression::ConvertNumericExplicit): Finished.
25369
25370         (Invocation::Emit): If InstanceExpression is null, then it means
25371         that we perform a call on this.
25372
25373 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
25374
25375         * expression.cs (Unary::Emit): Remove some dead code.
25376         (Probe): Implement Resolve and Emit for `is'.
25377         (Expression::ConvertImplicitRequired): Attempt to do constant
25378         expression conversions here.  Maybe should be moved to
25379         ConvertImplicit, but I am not sure.
25380         (Expression::ImplicitLongConstantConversionPossible,
25381         Expression::ImplicitIntConstantConversionPossible): New functions
25382         that tell whether is it possible to apply an implicit constant
25383         expression conversion.
25384
25385         (ConvertNumericExplicit): Started work on explicit numeric
25386         conversions.
25387
25388         * cs-parser.jay: Update operator constants.
25389
25390         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
25391         (Parameters::GetSignature): Hook up VerifyArgs here.
25392         (Parameters::VerifyArgs): Verifies that no two arguments have the
25393         same name. 
25394
25395         * class.cs (Operator): Update the operator names to reflect the
25396         ones that the spec expects (as we are just stringizing the
25397         operator names).
25398
25399         * expression.cs (Unary::ResolveOperator): Fix bug: Use
25400         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
25401         previous usage did only work for our methods.
25402         (Expression::ConvertImplicit): Handle decimal implicit numeric
25403         conversions as well.
25404         (Expression::InternalTypeConstructor): Used to invoke constructors
25405         on internal types for default promotions.
25406
25407         (Unary::Emit): Implement special handling for the pre/post
25408         increment/decrement for overloaded operators, as they need to have
25409         the same semantics as the other operators.
25410
25411         (Binary::ResolveOperator): ditto.
25412         (Invocation::ConversionExists): ditto.
25413         (UserImplicitCast::Resolve): ditto.
25414
25415 2001-09-26  Ravi Pratap  <ravi@ximian.com>
25416
25417         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
25418         operator, return after emitting body. Regression tests pass again !
25419
25420         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
25421         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
25422         (Invocation::OverloadResolve): Ditto.
25423         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
25424
25425         * everywhere : update calls to the above methods accordingly.
25426
25427 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
25428
25429         * assign.cs (Assign): Make it inherit from ExpressionStatement.
25430
25431         * expression.cs (ExpressionStatement): New base class used for
25432         expressions that can appear in statements, so that we can provide
25433         an alternate path to generate expression that do not leave a value
25434         on the stack.
25435
25436         (Expression::Emit, and all the derivatives): We no longer return
25437         whether a value is left on the stack or not.  Every expression
25438         after being emitted leaves a single value on the stack.
25439
25440         * codegen.cs (EmitContext::EmitStatementExpression): Use the
25441         facilties of ExpressionStatement if possible.
25442
25443         * cs-parser.jay: Update statement_expression.
25444
25445 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
25446
25447         * driver.cs: Change the wording of message
25448
25449 2001-09-25  Ravi Pratap  <ravi@ximian.com>
25450
25451         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
25452         the type of the expression to the return type of the method if
25453         we have an overloaded operator match ! The regression tests pass again !
25454         (Unary::ResolveOperator): Ditto.
25455
25456         * expression.cs (Invocation::ConversionExists): Correct the member lookup
25457         to find "op_Implicit", not "implicit" ;-)
25458         (UserImplicitCast): New class to take care of user-defined implicit conversions.
25459         (ConvertImplicit, ForceConversion): Take TypeContainer argument
25460
25461         * everywhere : Correct calls to the above accordingly.
25462
25463         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
25464         (ConvertImplicit): Do user-defined conversion if it exists.
25465
25466 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
25467
25468         * assign.cs: track location.
25469         (Resolve): Use implicit conversions on assignment.
25470
25471         * literal.cs: Oops.  Not good, Emit of short access values should
25472         pass (Bytes) or the wrong argument will be selected.
25473
25474         * expression.cs (Unary::Emit): Emit code for -expr.
25475
25476         (Unary::ResolveOperator): Handle `Substract' for non-constants
25477         (substract from zero from the non-constants).
25478         Deal with Doubles as well. 
25479
25480         (Expression::ConvertImplicitRequired): New routine that reports an
25481         error if no implicit conversion exists. 
25482
25483         (Invocation::OverloadResolve): Store the converted implicit
25484         expressions if we make them
25485
25486 2001-09-24  Ravi Pratap  <ravi@ximian.com>
25487
25488         * class.cs (ConstructorInitializer): Take a Location argument.
25489         (ConstructorBaseInitializer): Same here.
25490         (ConstructorThisInitializer): Same here.
25491
25492         * cs-parser.jay : Update all calls accordingly.
25493
25494         * expression.cs (Unary, Binary, New): Take location argument.
25495         Update accordingly everywhere.
25496
25497         * cs-parser.jay : Update all calls to the above to take a location
25498         argument.
25499
25500         * class.cs : Ditto.
25501
25502 2001-09-24  Ravi Pratap  <ravi@ximian.com>
25503
25504         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
25505         (Invocation::BetterConversion): Same here
25506         (Invocation::ConversionExists): Ditto.
25507
25508         (Invocation::ConversionExists): Implement.
25509
25510 2001-09-22  Ravi Pratap  <ravi@ximian.com>
25511
25512         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
25513         Also take an additional TypeContainer argument.
25514
25515         * All over : Pass in TypeContainer as argument to OverloadResolve.
25516
25517         * typemanager.cs (CSharpName): Update to check for the string type and return
25518         that too.
25519
25520         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
25521         a given method.
25522
25523 2001-09-21  Ravi Pratap  <ravi@ximian.com>
25524
25525         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
25526         (Invocation::BetterFunction): Implement.
25527         (Invocation::BetterConversion): Implement.
25528         (Invocation::ConversionExists): Skeleton, no implementation yet.
25529
25530         Okay, things work fine !
25531
25532 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
25533
25534         * typemanager.cs: declare and load enum_type, delegate_type and
25535         void_type. 
25536
25537         * expression.cs (Expression::Emit): Now emit returns a value that
25538         tells whether a value is left on the stack or not.  This strategy
25539         might be reveted tomorrow with a mechanism that would address
25540         multiple assignments.
25541         (Expression::report118): Utility routine to report mismatches on
25542         the ExprClass.
25543
25544         (Unary::Report23): Report impossible type/operator combination
25545         utility function.
25546
25547         (Unary::IsIncrementableNumber): Whether the type can be
25548         incremented or decremented with add.
25549         (Unary::ResolveOperator): Also allow enumerations to be bitwise
25550         complemented. 
25551         (Unary::ResolveOperator): Implement ++, !, ~,
25552
25553         (Invocation::Emit): Deal with new Emit convetion.
25554
25555         * All Expression derivatives: Updated their Emit method to return
25556         whether they leave values on the stack or not.
25557
25558         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
25559         stack for expressions that are statements. 
25560
25561 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
25562
25563         * expression.cs (LValue): New interface.  Must be implemented by
25564         LValue objects.
25565         (LocalVariableReference, ParameterReference, FieldExpr): Implement
25566         LValue interface.
25567
25568         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
25569         interface for generating code, simplifies the code.
25570
25571 2001-09-20  Ravi Pratap  <ravi@ximian.com>
25572
25573         * expression.cs (everywhere): Comment out return statements in ::Resolve
25574         methods to avoid the warnings.
25575
25576 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
25577
25578         * driver.cs (parse): Report error 2001 if we can not open the
25579         source file.
25580
25581         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
25582         not resolve it.
25583
25584         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
25585         object. 
25586
25587         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
25588         otherwise nested blocks end up with the same index.
25589
25590         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
25591
25592         * expression.cs:  Instead of having FIXMEs in the Resolve
25593         functions, throw exceptions so it is obvious that we are facing a
25594         bug. 
25595
25596         * cs-parser.jay (invocation_expression): Pass Location information.
25597
25598         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
25599         Use a basename for those routines because .NET does not like paths
25600         on them. 
25601
25602         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
25603         already defined.
25604
25605 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
25606
25607         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
25608         are loading the correct data types (throws an exception if not).
25609         (TypeManager::InitCoreTypes): Use CoreLookupType
25610
25611         * expression.cs (Unary::ResolveOperator): return the child
25612         expression for expressions which are just +expr.
25613         (Unary::ResolveOperator): Return negative literals for -LITERAL
25614         expressions (otherwise they are Unary {Literal}).
25615         (Invocation::Badness): Take into account `Implicit constant
25616         expression conversions'.
25617
25618         * literal.cs (LongLiteral): Implement long literal class.
25619         (IntLiteral): export the `Value' of the intliteral. 
25620
25621 2001-09-19  Ravi Pratap  <ravi@ximian.com>
25622
25623         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
25624
25625         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
25626         instead of 'Operator'
25627
25628         * expression.cs (Binary::ResolveOperator): Update accordingly.
25629         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
25630         and 'Minus'
25631
25632         * cs-parser.jay (unary_expression): Update to use the new names.
25633
25634         * gen-treedump.cs (GetUnary): Same here.
25635
25636         * expression.cs (Unary::Resolve): Implement.
25637         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
25638         operators are found instead of making noise ;-)
25639         (Unary::ResolveOperator): New method to do precisely the same thing which
25640         Binary::ResolveOperator does for Binary expressions.
25641         (Unary.method, .Arguments): Add.
25642         (Unary::OperName): Implement.   
25643         (Unary::ForceConversion): Copy and Paste !
25644
25645         * class.cs (Operator::Define): Fix a small bug for the case when we have 
25646         a unary operator.
25647
25648         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
25649         for the inbuilt operators. Only overloading works for now ;-)
25650
25651 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
25652
25653         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
25654         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
25655
25656         * expression.cs (This::Emit): Implement. 
25657         (This::Resolve): Implement.
25658         (TypeOf:Resolve): Implement.
25659         (Expression::ResolveSimpleName): Add an implicit this to instance
25660         field references. 
25661         (MemberAccess::Resolve): Deal with Parameters and Fields. 
25662         Bind instance variable to Field expressions.
25663         (FieldExpr::Instance): New field used to track the expression that
25664         represents the object instance.
25665         (FieldExpr::Resolve): Track potential errors from MemberLookup not
25666         binding 
25667         (FieldExpr::Emit): Implement.
25668
25669         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
25670         the last instruction contains a return opcode to avoid generating
25671         the last `ret' instruction (this generates correct code, and it is
25672         nice to pass the peverify output).
25673
25674         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
25675         initializer for static and instance variables.
25676         (Constructor::Emit): Allow initializer to be null in the case of
25677         static constructors.  Only emit initializer for instance
25678         constructors. 
25679
25680         (TypeContainer::FindMembers): Return a null array if there are no
25681         matches.
25682
25683         Also fix the code for the MemberTypes.Method branch, as it was not
25684         scanning that for operators (or tried to access null variables before).
25685
25686         * assign.cs (Assign::Emit): Handle instance and static fields. 
25687
25688         * TODO: Updated.
25689
25690         * driver.cs: Stop compilation if there are parse errors.
25691
25692         * cs-parser.jay (constructor_declaration): Provide default base
25693         initializer for non-static constructors.
25694         (constructor_declarator): Do not provide a default base
25695         initializers if none was specified.
25696         Catch the fact that constructors should not have parameters.
25697
25698         * class.cs: Do not emit parent class initializers for static
25699         constructors, that should be flagged as an error.
25700
25701 2001-09-18  Ravi Pratap  <ravi@ximian.com>
25702
25703         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
25704         Move back code into TypeContainer::Populate.
25705
25706 2001-09-18  Ravi Pratap  <ravi@ximian.com>
25707
25708         * class.cs (TypeContainer::AddConstructor): Fix the check to
25709         compare against Name, not Basename. 
25710         (Operator::OpType): Change Plus and Minus to Add and Subtract.
25711
25712         * cs-parser.jay : Update accordingly.
25713
25714         * class.cs (TypeContainer::FindMembers): For the case where we are searching
25715         for methods, don't forget to look into the operators too.
25716         (RegisterMethodBuilder): Helper method to take care of this for
25717         methods, constructors and operators.
25718         (Operator::Define): Completely revamp.
25719         (Operator.OperatorMethod, MethodName): New fields.
25720         (TypeContainer::Populate): Move the registering of builders into
25721         RegisterMethodBuilder.
25722         (Operator::Emit): Re-write.
25723
25724         * expression.cs (Binary::Emit): Comment out code path to emit method
25725         invocation stuff for the case when we have a user defined operator. I am
25726         just not able to get it right !
25727
25728 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
25729
25730         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
25731         argument. 
25732
25733         (Expression::MemberLookup): Provide a version that allows to
25734         specify the MemberTypes and BindingFlags. 
25735
25736         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
25737         so it was not fetching variable information from outer blocks.
25738
25739         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
25740         Beforefieldinit as it was buggy.
25741
25742         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
25743         that Ravi put here.  
25744
25745         * class.cs (Constructor::Emit): Only emit if block is not null.
25746         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
25747         deal with this by semantically definining it as if the user had
25748         done it.
25749
25750         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
25751         constructors as we now "emit" them at a higher level.
25752
25753         (TypeContainer::DefineDefaultConstructor): Used to define the
25754         default constructors if none was provided.
25755
25756         (ConstructorInitializer): Add methods Resolve and Emit. 
25757
25758         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
25759
25760 2001-09-17  Ravi Pratap  <ravi@ximian.com>
25761
25762         * class.cs (TypeContainer::EmitDefaultConstructor): Register
25763         the default constructor builder with our hashtable for methodbuilders
25764         to methodcores.
25765
25766         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
25767         and argument_count is 0 in which case we have a match.
25768         (Binary::ResolveOperator): More null checking and miscellaneous coding
25769         style cleanup.
25770
25771 2001-09-17  Ravi Pratap  <ravi@ximian.com>
25772
25773         * rootcontext.cs (IsNameSpace): Compare against null.
25774
25775         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
25776
25777         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
25778         and Unary::Operator.
25779
25780         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
25781         accordingly.
25782
25783         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
25784         we have overloaded operators.
25785         (Binary::ResolveOperator): Implement the part which does the operator overload
25786         resolution.
25787
25788         * class.cs (Operator::Emit): Implement.
25789         (TypeContainer::Emit): Emit the operators we have too.
25790
25791         * expression.cs (Binary::Emit): Update to emit the appropriate code for
25792         the case when we have a user-defined operator.
25793
25794 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
25795
25796         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
25797
25798 2001-09-16  Ravi Pratap  <ravi@ximian.com>
25799
25800         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
25801         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
25802         (Constructor::Emit): Implement.
25803         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
25804         if we have no work to do. 
25805         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
25806         Emit method.
25807
25808         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
25809         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
25810
25811         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
25812         of parent.parent.
25813
25814 2001-09-15  Ravi Pratap  <ravi@ximian.com>
25815
25816         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
25817         in the source.
25818         (Tree::RecordNamespace): Method to do what the name says ;-)
25819         (Tree::Namespaces): Property to get at the namespaces hashtable.
25820
25821         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
25822         keep track.
25823
25824         * rootcontext.cs (IsNamespace): Fixed it :-)
25825
25826 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
25827
25828         * class.cs (TypeContainer::FindMembers): Add support for
25829         constructors. 
25830         (MethodCore): New class that encapsulates both the shared aspects
25831         of a Constructor and a Method.  
25832         (Method, Constructor): Factored pieces into MethodCore.
25833
25834         * driver.cs: Added --fatal which makes errors throw exceptions.
25835         Load System assembly as well as part of the standard library.
25836
25837         * report.cs: Allow throwing exceptions on errors for debugging.
25838
25839         * modifiers.cs: Do not use `parent', instead use the real type
25840         container to evaluate permission settings.
25841
25842         * class.cs: Put Ravi's patch back in.  He is right, and we will
25843         have to cope with the
25844
25845 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25846
25847         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
25848         FamORAssem, not FamANDAssem.
25849
25850 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
25851
25852         * driver.cs: Added --parse option that only parses its input files
25853         and terminates.
25854
25855         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
25856         incorrect.  IsTopLevel is not used to tell whether an object is
25857         root_types or not (that can be achieved by testing this ==
25858         root_types).  But to see if this is a top-level *class* (not
25859         necessarly our "toplevel" container). 
25860
25861 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25862
25863         * enum.cs (Enum::Define): Modify to call the Lookup method on the
25864         parent instead of a direct call to GetType.
25865
25866 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25867
25868         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
25869         Modifiers.TypeAttr. This should just be a call to that method.
25870
25871         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
25872         object so that we can determine if we are top-level or not.
25873
25874         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
25875         TypeContainer too.
25876
25877         * enum.cs (Enum::Define): Ditto.
25878
25879         * modifiers.cs (FieldAttr): Re-write.
25880
25881         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
25882         (TypeContainer::HaveStaticConstructor): New property to provide access
25883         to precisely that info.
25884
25885         * modifiers.cs (MethodAttr): Re-write.
25886         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
25887
25888         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
25889         of top-level types as claimed.
25890
25891 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
25892
25893         * expression.cs (MemberLookup): Fruitless attempt to lookup
25894         constructors.  Maybe I need to emit default constructors?  That
25895         might be it (currently .NET emits this for me automatically).
25896         (Invocation::OverloadResolve): Cope with Arguments == null.
25897         (Invocation::EmitArguments): new function, shared by the new
25898         constructor and us.
25899         (Invocation::Emit): Handle static and instance methods.  Emit
25900         proper call instruction for virtual or non-virtual invocations.
25901         (New::Emit): Implement.
25902         (New::Resolve): Implement.
25903         (MemberAccess:Resolve): Implement.
25904         (MethodGroupExpr::InstanceExpression): used conforming to the spec
25905         to track instances.
25906         (FieldExpr::Resolve): Set type.
25907
25908         * support.cs: Handle empty arguments.
25909                 
25910         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
25911         SimpleLookup): Auxiliary routines to help parse a qualifier
25912         identifier.  
25913
25914         Update qualifier_identifier rule.
25915
25916         * codegen.cs: Removed debugging messages.
25917
25918         * class.cs: Make this a global thing, this acts just as a "key" to
25919         objects that we might have around.
25920
25921         (Populate): Only initialize method_builders_to_methods once.
25922
25923         * expression.cs (PropertyExpr): Initialize type from the
25924         PropertyType. 
25925
25926         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
25927         Resolve pattern.  Attempt to implicitly convert value to boolean.
25928         Emit code.
25929
25930         * expression.cs: Set the type for the int32/int32 argument case.
25931         (Binary::ResolveOperator): Set the return type to boolean for
25932         comparission operators
25933
25934         * typemanager.cs: Remove debugging print code.
25935
25936         (Invocation::Resolve): resolve type.
25937
25938         * class.cs: Allocate a MemberInfo of the correct size, as the code
25939         elsewhere depends on the test to reflect the correct contents.
25940
25941         (Method::) Keep track of parameters, due to System.Reflection holes
25942
25943         (TypeContainer::Populate): Keep track of MethodBuilders to Method
25944         mapping here.
25945
25946         (TypeContainer::FindMembers): Use ArrayList and then copy an array
25947         of the exact size and return that.
25948
25949         (Class::LookupMethodByBuilder): New function that maps
25950         MethodBuilders to its methods.  Required to locate the information
25951         on methods because System.Reflection bit us again.
25952
25953         * support.cs: New file, contains an interface ParameterData and
25954         two implementations: ReflectionParameters and InternalParameters
25955         used to access Parameter information.  We will need to grow this
25956         as required.
25957
25958         * expression.cs (Invocation::GetParameterData): implement a cache
25959         and a wrapper around the ParameterData creation for methods. 
25960         (Invocation::OverloadResolve): Use new code.
25961
25962 2001-09-13  Ravi Pratap  <ravi@ximian.com>
25963
25964         * class.cs (TypeContainer::EmitField): Remove and move into 
25965         (Field::Define): here and modify accordingly.
25966         (Field.FieldBuilder): New member.
25967         (TypeContainer::Populate): Update accordingly.
25968         (TypeContainer::FindMembers): Implement.
25969
25970 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
25971
25972         * statement.cs: (VariableInfo::VariableType): New field to be
25973         initialized with the full type once it is resolved. 
25974
25975 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
25976
25977         * parameter.cs (GetParameterInfo): Use a type cache to compute
25978         things only once, and to reuse this information
25979
25980         * expression.cs (LocalVariableReference::Emit): Implement.
25981         (OpcodeCast::Emit): fix.
25982
25983         (ParameterReference::Resolve): Implement.
25984         (ParameterReference::Emit): Implement.
25985
25986         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
25987         that are expressions need to stay as Expressions.
25988
25989         * typemanager.cs (CSharpName): Returns the C# name of a type if
25990         possible. 
25991
25992         * expression.cs (Expression::ConvertImplicit): New function that
25993         implements implicit type conversions.
25994
25995         (Expression::ImplicitReferenceConversion): Implements implicit
25996         reference conversions.
25997
25998         (EmptyCast): New type for transparent casts.
25999
26000         (OpcodeCast): New type for casts of types that are performed with
26001         a sequence of bytecodes.
26002
26003         (BoxedCast): New type used for casting value types into reference
26004         types.  Emits a box opcode.
26005
26006         (Binary::DoNumericPromotions): Implements numeric promotions of
26007         and computation of the Binary::Type.
26008
26009         (Binary::EmitBranchable): Optimization.
26010
26011         (Binary::Emit): Implement code emission for expressions.
26012
26013         * typemanager.cs (TypeManager): Added two new core types: sbyte
26014         and byte.
26015
26016 2001-09-12  Ravi Pratap  <ravi@ximian.com>
26017
26018         * class.cs (TypeContainer::FindMembers): Method which does exactly
26019         what Type.FindMembers does, only we don't have to use reflection. No
26020         implementation yet.
26021
26022         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
26023         typecontainer objects as we need to get at them.
26024         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
26025
26026         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
26027         typecontainer object.
26028
26029         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
26030         of just a Report object.
26031
26032 2001-09-11  Ravi Pratap  <ravi@ximian.com>
26033
26034         * class.cs (Event::Define): Go back to using the prefixes "add_" and
26035         "remove_"
26036         (TypeContainer::Populate): Now define the delegates of the type too.
26037         (TypeContainer.Delegates): Property to access the list of delegates defined
26038         in the type.
26039
26040         * delegates.cs (Delegate::Define): Implement partially.
26041
26042         * modifiers.cs (TypeAttr): Handle more flags.
26043
26044 2001-09-11  Ravi Pratap  <ravi@ximian.com>
26045
26046         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
26047         and not <=
26048         (Operator::Define): Re-write logic to get types by using the LookupType method
26049         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
26050         (Indexer::Define): Ditto.
26051         (Event::Define): Ditto.
26052         (Property::Define): Ditto.
26053
26054 2001-09-10  Ravi Pratap  <ravi@ximian.com>
26055
26056         * class.cs (TypeContainer::Populate): Now define operators too. 
26057         (TypeContainer.Operators): New property to access the list of operators
26058         in a type.
26059         (Operator.OperatorMethodBuilder): New member to hold the method builder
26060         for the operator we are defining.
26061         (Operator::Define): Implement.
26062
26063 2001-09-10  Ravi Pratap  <ravi@ximian.com>
26064
26065         * class.cs (Event::Define): Make the prefixes of the accessor methods
26066         addOn_ and removeOn_ 
26067
26068         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
26069         of the location being passed in too. Ideally, this should go later since all
26070         error reporting should be done through the Report object.
26071
26072         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
26073         (Populate): Iterate thru the indexers we have and define them too.
26074         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
26075         for the get and set accessors.
26076         (Indexer::Define): Implement.
26077
26078 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
26079
26080         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
26081         my previous implementation, did not work.
26082
26083         * typemanager.cs: Add a couple of missing types (the longs).
26084
26085         * literal.cs: Use TypeManager.bool_type instead of getting it.
26086
26087         * expression.cs (EventExpr): New kind of expressions.
26088         (Expressio::ExprClassFromMemberInfo): finish
26089
26090 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
26091
26092         * assign.cs: Emit stores to static fields differently.
26093
26094 2001-09-08  Ravi Pratap  <ravi@ximian.com>
26095
26096         * Merge in changes and adjust code to tackle conflicts. Backed out my
26097         code in Assign::Resolve ;-) 
26098
26099 2001-09-08  Ravi Pratap  <ravi@ximian.com>
26100
26101         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
26102         instead Report.Error and also pass in the location.
26103         (CSharpParser::Lexer): New readonly property to return the reference
26104         to the Tokenizer object.
26105         (declare_local_variables): Use Report.Error with location instead of plain 
26106         old error.
26107         (CheckDef): Ditto.
26108
26109         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
26110         (Operator.CheckBinaryOperator): Ditto.
26111
26112         * cs-parser.jay (operator_declarator): Update accordingly.
26113
26114         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
26115         (CheckBinaryOperator): Same here.
26116
26117         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
26118         on the name without any prefixes of namespace names etc. This is because we
26119         already might have something already fully qualified like 
26120         'System.Console.WriteLine'
26121
26122         * assign.cs (Resolve): Begin implementation. Stuck ;-)
26123
26124 2001-09-07  Ravi Pratap  <ravi@ximian.com>
26125
26126         * cs-tokenizer.cs (location): Return a string which also contains
26127         the file name.
26128
26129         * expression.cs (ElementAccess): New class for expressions of the
26130         type 'element access.'
26131         (BaseAccess): New class for expressions of the type 'base access.'
26132         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
26133         respectively.
26134
26135         * cs-parser.jay (element_access): Implement action.
26136         (base_access): Implement actions.
26137         (checked_expression, unchecked_expression): Implement.
26138
26139         * cs-parser.jay (local_variable_type): Correct and implement.
26140         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
26141
26142         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
26143
26144         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
26145         name and the specifiers.
26146
26147         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
26148
26149         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
26150         making them all public ;-)
26151
26152         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
26153         class anyways.
26154
26155 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
26156
26157         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
26158         PropertyExprs.
26159         (FieldExpr, PropertyExprs): New resolved expressions.
26160         (SimpleName::MemberStaticCheck): Perform static checks for access
26161         to non-static fields on static methods. Maybe this should be
26162         generalized for MemberAccesses. 
26163         (SimpleName::ResolveSimpleName): More work on simple name
26164         resolution. 
26165
26166         * cs-parser.jay (primary_expression/qualified_identifier): track
26167         the parameter index.
26168
26169         * codegen.cs (CodeGen::Save): Catch save exception, report error.
26170         (EmitContext::EmitBoolExpression): Chain to expression generation
26171         instead of temporary hack.
26172         (::EmitStatementExpression): Put generic expression code generation.
26173
26174         * assign.cs (Assign::Emit): Implement variable assignments to
26175         local variables, parameters and fields.
26176
26177 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
26178
26179         * statement.cs (Block::GetVariableInfo): New method, returns the
26180         VariableInfo for a variable name in a block.
26181         (Block::GetVariableType): Implement in terms of GetVariableInfo
26182
26183         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
26184         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
26185
26186 2001-09-06  Ravi Pratap  <ravi@ximian.com>
26187
26188         * cs-parser.jay (operator_declaration): Continue on my quest : update
26189         to take attributes argument.
26190         (event_declaration): Ditto.
26191         (enum_declaration): Ditto.
26192         (indexer_declaration): Ditto.
26193
26194         * class.cs (Operator::Operator): Update constructor accordingly.
26195         (Event::Event): Ditto.
26196
26197         * delegate.cs (Delegate::Delegate): Same here.
26198
26199         * enum.cs (Enum::Enum): Same here.
26200
26201 2001-09-05  Ravi Pratap  <ravi@ximian.com>
26202
26203         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
26204
26205         * ../tests/cs0658.cs : New file to demonstrate error 0658.
26206
26207         * attribute.cs (Attributes): New class to encapsulate all attributes which were
26208         being passed around as an arraylist.
26209         (Attributes::AddAttribute): Method to add attribute sections.
26210
26211         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
26212         (struct_declaration): Update accordingly.
26213         (constant_declaration): Update.
26214         (field_declaration): Update.
26215         (method_header): Update.
26216         (fixed_parameter): Update.
26217         (parameter_array): Ditto.
26218         (property_declaration): Ditto.
26219         (destructor_declaration): Ditto.
26220
26221         * class.cs (Struct::Struct): Update constructors accordingly.
26222         (Class::Class): Ditto.
26223         (Field::Field): Ditto.
26224         (Method::Method): Ditto.
26225         (Property::Property): Ditto.
26226         (TypeContainer::OptAttribute): update property's return type.
26227
26228         * interface.cs (Interface.opt_attributes): New member.
26229         (Interface::Interface): Update to take the extra Attributes argument.
26230
26231         * parameter.cs (Parameter::Parameter): Ditto.
26232
26233         * constant.cs (Constant::Constant): Ditto.
26234
26235         * interface.cs (InterfaceMemberBase): New OptAttributes field.
26236         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
26237         the attributes as a parameter.
26238         (InterfaceProperty): Update constructor call.
26239         (InterfaceEvent): Ditto.
26240         (InterfaceMethod): Ditto.
26241         (InterfaceIndexer): Ditto.
26242
26243         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
26244         pass the attributes too.
26245         (interface_event_declaration): Ditto.
26246         (interface_property_declaration): Ditto.
26247         (interface_method_declaration): Ditto.
26248         (interface_declaration): Ditto.
26249
26250 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
26251
26252         * class.cs (Method::Define): Track the "static Main" definition to
26253         create an entry point. 
26254
26255         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
26256         EntryPoint if we find it. 
26257
26258         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
26259         (EmitContext::ig): Make this variable public.
26260
26261         * driver.cs: Make the default output file be the first file name
26262         with the .exe extension.  
26263
26264         Detect empty compilations
26265
26266         Handle various kinds of output targets.  Handle --target and
26267         rename -t to --dumper.
26268
26269         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
26270         methods inherited from Expression return now an Expression.  This
26271         will is used during the tree rewriting as we resolve them during
26272         semantic analysis.
26273
26274         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
26275         the spec.  Missing entirely is the information about
26276         accessability of elements of it.
26277
26278         (Expression::ExprClassFromMemberInfo): New constructor for
26279         Expressions that creates a fully initialized Expression based on
26280         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
26281         a Type.
26282
26283         (Invocation::Resolve): Begin implementing resolution of invocations.
26284
26285         * literal.cs (StringLiteral):  Implement Emit.
26286
26287 2001-09-05  Ravi Pratap  <ravi@ximian.com>
26288
26289         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
26290         member.
26291
26292 2001-09-04  Ravi Pratap  <ravi@ximian.com>
26293
26294         * cs-parser.jay (attribute_arguments): Implement actions.
26295         (attribute): Fix bug in production. Implement action.
26296         (attribute_list): Implement.
26297         (attribute_target): Implement.
26298         (attribute_target_specifier, opt_target_specifier): Implement
26299         (CheckAttributeTarget): New method to check if the attribute target
26300         is valid.
26301         (attribute_section): Implement.
26302         (opt_attributes): Implement.
26303
26304         * attribute.cs : New file to handle attributes.
26305         (Attribute): Class to hold attribute info.
26306
26307         * cs-parser.jay (opt_attribute_target_specifier): Remove production
26308         (attribute_section): Modify production to use 2 different rules to 
26309         achieve the same thing. 1 s/r conflict down !
26310         Clean out commented, useless, non-reducing dimension_separator rules.
26311
26312         * class.cs (TypeContainer.attributes): New member to hold list
26313         of attributes for a type.
26314         (Struct::Struct): Modify to take one more argument, the attribute list.
26315         (Class::Class): Ditto.
26316         (Field::Field): Ditto.
26317         (Method::Method): Ditto.
26318         (Property::Property): Ditto.
26319
26320         * cs-parser.jay (struct_declaration): Update constructor call to
26321         pass in the attributes too.
26322         (class_declaration): Ditto.
26323         (constant_declaration): Ditto.
26324         (field_declaration): Ditto.
26325         (method_header): Ditto.
26326         (fixed_parameter): Ditto.
26327         (parameter_array): Ditto.
26328         (property_declaration): Ditto.
26329
26330         * constant.cs (Constant::Constant): Update constructor similarly.
26331         Use System.Collections.
26332
26333         * parameter.cs (Parameter::Parameter): Update as above.
26334
26335 2001-09-02  Ravi Pratap  <ravi@ximian.com>
26336
26337         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
26338         (TypeContainer.delegates): New member to hold list of delegates.
26339
26340         * cs-parser.jay (delegate_declaration): Implement the action correctly 
26341         this time as I seem to be on crack ;-)
26342
26343 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
26344
26345         * rootcontext.cs (RootContext::IsNamespace): new function, used to
26346         tell whether an identifier represents a namespace.
26347
26348         * expression.cs (NamespaceExpr): A namespace expression, used only
26349         temporarly during expression resolution.
26350         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
26351         utility functions to resolve names on expressions.
26352
26353 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
26354
26355         * codegen.cs: Add hook for StatementExpressions. 
26356
26357         * class.cs: Fix inverted test for static flag in methods.
26358
26359 2001-09-02  Ravi Pratap  <ravi@ximian.com>
26360
26361         * class.cs (Operator::CheckUnaryOperator): Correct error number used
26362         to make it coincide with MS' number.
26363         (Operator::CheckBinaryOperator): Ditto.
26364
26365         * ../errors/errors.txt : Remove error numbers added earlier.
26366
26367         * ../errors/cs1019.cs : Test case for error # 1019
26368
26369         * ../errros/cs1020.cs : Test case for error # 1020
26370
26371         * cs-parser.jay : Clean out commented cruft.
26372         (dimension_separators, dimension_separator): Comment out. Ostensibly not
26373         used anywhere - non-reducing rule.
26374         (namespace_declarations): Non-reducing rule - comment out.
26375
26376         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
26377         with TypeContainer::AddEnum.
26378
26379         * delegate.cs : New file for delegate handling classes.
26380         (Delegate): Class for declaring delegates.
26381
26382         * makefile : Update.
26383
26384         * cs-parser.jay (delegate_declaration): Implement.
26385
26386 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
26387
26388         * class.cs (Event::Define): Implement.
26389         (Event.EventBuilder): New member.
26390
26391         * class.cs (TypeContainer::Populate): Update to define all enums and events
26392         we have.
26393         (Events): New property for the events arraylist we hold. Shouldn't we move to using
26394         readonly fields for all these cases ?
26395
26396 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
26397
26398         * class.cs (Property): Revamp to use the convention of making fields readonly.
26399         Accordingly modify code elsewhere.
26400
26401         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
26402         the Define method of the Property class.
26403
26404         * class.cs : Clean up applied patch and update references to variables etc. Fix 
26405         trivial bug.
26406         (TypeContainer::Populate): Update to define all the properties we have. Also
26407         define all enumerations.
26408
26409         * enum.cs (Define): Implement.
26410
26411 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
26412
26413         * cs-parser.jay (overloadable_operator): The semantic value is an
26414         enum of the Operator class.
26415         (operator_declarator): Implement actions.
26416         (operator_declaration): Implement.
26417
26418         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
26419         validity of definitions.
26420         (Operator::CheckBinaryOperator): Static method to check for binary operators
26421         (TypeContainer::AddOperator): New method to add an operator to a type.
26422
26423         * cs-parser.jay (indexer_declaration): Added line to actually call the
26424         AddIndexer method so it gets added ;-)
26425
26426         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
26427         already taken care of by the MS compiler ?  
26428
26429 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
26430
26431         * class.cs (Operator): New class for operator declarations.
26432         (Operator::OpType): Enum for the various operators.
26433
26434 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
26435
26436         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
26437         ostensibly handle this in semantic analysis.
26438
26439         * cs-parser.jay (general_catch_clause): Comment out
26440         (specific_catch_clauses, specific_catch_clause): Ditto.
26441         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
26442         (catch_args, opt_catch_args): New productions.
26443         (catch_clause): Rewrite to use the new productions above
26444         (catch_clauses): Modify accordingly.
26445         (opt_catch_clauses): New production to use in try_statement
26446         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
26447         and re-write the code in the actions to extract the specific and
26448         general catch clauses by being a little smart ;-)
26449
26450         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
26451         Hooray, try and catch statements parse fine !
26452
26453 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26454
26455         * statement.cs (Block::GetVariableType): Fix logic to extract the type
26456         string from the hashtable of variables.
26457
26458         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
26459         I end up making that mistake ;-)
26460         (catch_clauses): Fixed gross error which made Key and Value of the 
26461         DictionaryEntry the same : $1 !!
26462
26463 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26464
26465         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
26466
26467         * cs-parser.jay (event_declaration): Correct to remove the semicolon
26468         when the add and remove accessors are specified. 
26469
26470 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26471
26472         * cs-parser.jay (IndexerDeclaration): New helper class to hold
26473         information about indexer_declarator.
26474         (indexer_declarator): Implement actions.
26475         (parsing_indexer): New local boolean used to keep track of whether
26476         we are parsing indexers or properties. This is necessary because 
26477         implicit_parameters come into picture even for the get accessor in the 
26478         case of an indexer.
26479         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
26480
26481         * class.cs (Indexer): New class for indexer declarations.
26482         (TypeContainer::AddIndexer): New method to add an indexer to a type.
26483         (TypeContainer::indexers): New member to hold list of indexers for the
26484         type.
26485
26486 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
26487
26488         * cs-parser.jay (add_accessor_declaration): Implement action.
26489         (remove_accessor_declaration): Implement action.
26490         (event_accessors_declaration): Implement
26491         (variable_declarators): swap statements for first rule - trivial.
26492
26493         * class.cs (Event): New class to hold information about event
26494         declarations.
26495         (TypeContainer::AddEvent): New method to add an event to a type
26496         (TypeContainer::events): New member to hold list of events.
26497
26498         * cs-parser.jay (event_declaration): Implement actions.
26499
26500 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
26501
26502         * cs-parser.jay (dim_separators): Implement. Make it a string
26503         concatenating all the commas together, just as they appear.
26504         (opt_dim_separators): Modify accordingly
26505         (rank_specifiers): Update accordingly. Basically do the same
26506         thing - instead, collect the brackets here.
26507         (opt_rank_sepcifiers): Modify accordingly.
26508         (array_type): Modify to actually return the complete type string
26509         instead of ignoring the rank_specifiers.
26510         (expression_list): Implement to collect the expressions
26511         (variable_initializer): Implement. We make it a list of expressions
26512         essentially so that we can handle the array_initializer case neatly too.
26513         (variable_initializer_list): Implement.
26514         (array_initializer): Make it a list of variable_initializers
26515         (opt_array_initializer): Modify accordingly.
26516
26517         * expression.cs (New::NType): Add enumeration to help us
26518         keep track of whether we have an object/delegate creation
26519         or an array creation.
26520         (New:NewType, New::Rank, New::Indices, New::Initializers): New
26521         members to hold data about array creation.
26522         (New:New): Modify to update NewType
26523         (New:New): New Overloaded contructor for the array creation
26524         case.
26525
26526         * cs-parser.jay (array_creation_expression): Implement to call
26527         the overloaded New constructor.
26528
26529 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
26530
26531         * class.cs (TypeContainer::Constructors): Return member
26532         constructors instead of returning null.
26533
26534 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
26535
26536         * typemanager.cs (InitCoreTypes): Initialize the various core
26537         types after we have populated the type manager with the user
26538         defined types (this distinction will be important later while
26539         compiling corlib.dll)
26540
26541         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
26542         on Expression Classification.  Now all expressions have a method
26543         `Resolve' and a method `Emit'.
26544
26545         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
26546         generation from working.     Also add some temporary debugging
26547         code. 
26548
26549 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
26550
26551         * codegen.cs: Lots of code generation pieces.  This is only the
26552         beginning, will continue tomorrow with more touches of polish.  We
26553         handle the fundamentals of if, while, do, for, return.  Others are
26554         trickier and I need to start working on invocations soon.
26555
26556         * gen-treedump.cs: Bug fix, use s.Increment here instead of
26557         s.InitStatement. 
26558
26559         * codegen.cs (EmitContext): New struct, used during code
26560         emission to keep a context.   Most of the code generation will be
26561         here. 
26562
26563         * cs-parser.jay: Add embedded blocks to the list of statements of
26564         this block.  So code generation proceeds in a top down fashion.
26565
26566 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
26567
26568         * statement.cs: Add support for multiple child blocks.
26569
26570 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
26571
26572         * codegen.cs (EmitCode): New function, will emit the code for a
26573         Block of code given a TypeContainer and its ILGenerator. 
26574
26575         * statement.cs (Block): Standard public readonly optimization.
26576         (Block::Block constructors): Link children. 
26577         (Block::Child): Child Linker.
26578         (Block::EmitVariables): Emits IL variable declarations.
26579
26580         * class.cs: Drop support for MethodGroups here, delay until
26581         Semantic Analysis.
26582         (Method::): Applied the same simplification that I did before, and
26583         move from Properties to public readonly fields.
26584         (Method::ParameterTypes): Returns the parameter types for the
26585         function, and implements a cache that will be useful later when I
26586         do error checking and the semantic analysis on the methods is
26587         performed.
26588         (Constructor::GetCallingConvention): Renamed from CallingConvetion
26589         and made a method, optional argument tells whether this is a class
26590         or a structure to apply the `has-this' bit.
26591         (Method::GetCallingConvention): Implement, returns the calling
26592         convention. 
26593         (Method::Define): Defines the type, a second pass is performed
26594         later to populate the methods.
26595
26596         (Constructor::ParameterTypes): implement a cache similar to the
26597         one on Method::ParameterTypes, useful later when we do semantic
26598         analysis. 
26599
26600         (TypeContainer::EmitMethod):  New method.  Emits methods.
26601
26602         * expression.cs: Removed MethodGroup class from here.
26603
26604         * parameter.cs (Parameters::GetCallingConvention): new method.
26605
26606 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
26607
26608         * class.cs (TypeContainer::Populate): Drop RootContext from the
26609         argument. 
26610
26611         (Constructor::CallingConvention): Returns the calling convention.
26612         (Constructor::ParameterTypes): Returns the constructor parameter
26613         types. 
26614
26615         (TypeContainer::AddConstructor): Keep track of default constructor
26616         and the default static constructor.
26617
26618         (Constructor::) Another class that starts using `public readonly'
26619         instead of properties. 
26620
26621         (Constructor::IsDefault): Whether this is a default constructor. 
26622
26623         (Field::) use readonly public fields instead of properties also.
26624
26625         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
26626         track of static constructors;  If none is used, turn on
26627         BeforeFieldInit in the TypeAttributes. 
26628
26629         * cs-parser.jay (opt_argument_list): now the return can be null
26630         for the cases where there are no arguments. 
26631
26632         (constructor_declarator): If there is no implicit `base' or
26633         `this', then invoke the default parent constructor. 
26634
26635         * modifiers.cs (MethodAttr): New static function maps a set of
26636         modifiers flags into a MethodAttributes enum
26637         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
26638         MethodAttr, TypeAttr to represent the various mappings where the
26639         modifiers are used.
26640         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
26641
26642 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
26643
26644         * parameter.cs (GetParameterInfo): Fix bug where there would be no
26645         method arguments.
26646
26647         * interface.cs (PopulateIndexer): Implemented the code generator
26648         for interface indexers.
26649
26650 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
26651
26652         * interface.cs (InterfaceMemberBase): Now we track the new status
26653         here.  
26654
26655         (PopulateProperty): Implement property population.  Woohoo!  Got
26656         Methods and Properties going today. 
26657
26658         Removed all the properties for interfaces, and replaced them with
26659         `public readonly' fields. 
26660
26661 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
26662
26663         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
26664         initialize their hashtables/arraylists only when they are needed
26665         instead of doing this always.
26666
26667         * parameter.cs: Handle refs and out parameters.
26668
26669         * cs-parser.jay: Use an ArrayList to construct the arguments
26670         instead of the ParameterCollection, and then cast that to a
26671         Parameter[] array.
26672
26673         * parameter.cs: Drop the use of ParameterCollection and use
26674         instead arrays of Parameters.
26675
26676         (GetParameterInfo): Use the Type, not the Name when resolving
26677         types. 
26678
26679 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
26680
26681         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
26682         and instead use public readonly fields.
26683
26684         * class.cs: Put back walking code for type containers.
26685
26686 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
26687
26688         * class.cs (MakeConstant): Code to define constants.
26689
26690         * rootcontext.cs (LookupType): New function.  Used to locate types 
26691
26692
26693 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
26694
26695         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
26696         this System.Reflection code is.  Kudos to Microsoft
26697
26698         * typemanager.cs: Implement a type cache and avoid loading all
26699         types at boot time.  Wrap in LookupType the internals.  This made
26700         the compiler so much faster.  Wow.  I rule!
26701
26702         * driver.cs: Make sure we always load mscorlib first (for
26703         debugging purposes, nothing really important).
26704
26705         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
26706         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
26707
26708         * rootcontext.cs: Lookup types on their namespace;  Lookup types
26709         on namespaces that have been imported using the `using' keyword.
26710
26711         * class.cs (TypeContainer::TypeAttr): Virtualize.
26712         (Class::TypeAttr): Return attributes suitable for this bad boy.
26713         (Struct::TypeAttr): ditto.
26714         Handle nested classes.
26715         (TypeContainer::) Remove all the type visiting code, it is now
26716         replaced with the rootcontext.cs code
26717
26718         * rootcontext.cs (GetClassBases): Added support for structs. 
26719
26720 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
26721
26722         * interface.cs, statement.cs, class.cs, parameter.cs,
26723         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
26724         Drop use of TypeRefs, and use strings instead.
26725
26726 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
26727
26728         * rootcontext.cs: 
26729
26730         * class.cs (Struct::Struct): set the SEALED flags after
26731         checking the modifiers.
26732         (TypeContainer::TypeAttr): new property, returns the
26733         TypeAttributes for a class.  
26734
26735         * cs-parser.jay (type_list): Oops, list production was creating a
26736         new list of base types.
26737
26738         * rootcontext.cs (StdLib): New property.
26739         (GetInterfaceTypeByName): returns an interface by type name, and
26740         encapsulates error handling here.
26741         (GetInterfaces): simplified.
26742         (ResolveTree): Encapsulated all the tree resolution here.
26743         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
26744         types. 
26745
26746         * driver.cs: Add support for --nostdlib, to avoid loading the
26747         default assemblies.
26748         (Main): Do not put tree resolution here. 
26749
26750         * rootcontext.cs: Beginning of the class resolution.
26751
26752 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
26753
26754         * rootcontext.cs: Provide better error reporting. 
26755
26756         * cs-parser.jay (interface_base): set our $$ to be interfaces.
26757
26758         * rootcontext.cs (CreateInterface): Handle the case where there
26759         are no parent interfaces.
26760
26761         (CloseTypes): Routine to flush types at the end.
26762         (CreateInterface): Track types.
26763         (GetInterfaces): Returns an array of Types from the list of
26764         defined interfaces.
26765
26766         * typemanager.c (AddUserType): Mechanism to track user types (puts
26767         the type on the global type hash, and allows us to close it at the
26768         end). 
26769
26770 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
26771
26772         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
26773         RecordInterface instead.
26774
26775         * cs-parser.jay: Updated to reflect changes above.
26776
26777         * decl.cs (Definition): Keep track of the TypeBuilder type that
26778         represents this type here.  Not sure we will use it in the long
26779         run, but wont hurt for now.
26780
26781         * driver.cs: Smaller changes to accomodate the new code.
26782
26783         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
26784         when done. 
26785
26786         * rootcontext.cs (CreateInterface):  New method, used to create
26787         the System.TypeBuilder type for interfaces.
26788         (ResolveInterfaces): new entry point to resolve the interface
26789         hierarchy. 
26790         (CodeGen): Property, used to keep track of the code generator.
26791
26792 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
26793
26794         * cs-parser.jay: Add a second production for delegate_declaration
26795         with `VOID'.
26796
26797         (enum_body): Put an opt_comma here instead of putting it on
26798         enum_body or enum_member_declarations so we can handle trailing
26799         commas on enumeration members.  Gets rid of a shift/reduce.
26800
26801         (type_list): Need a COMMA in the middle.
26802
26803         (indexer_declaration): Tell tokenizer to recognize get/set
26804
26805         * Remove old targets.
26806
26807         * Re-add the parser target.
26808
26809 2001-07-13  Simon Cozens <simon@simon-cozens.org>
26810
26811         * cs-parser.jay: Add precendence rules for a number of operators
26812         ot reduce the number of shift/reduce conflicts in the grammar.
26813
26814 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
26815
26816         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
26817         and put it here.
26818
26819         Get rid of old crufty code.
26820
26821         * rootcontext.cs: Use this to keep track of the parsed
26822         representation and the defined types available to the program. 
26823
26824         * gen-treedump.cs: adjust for new convention.
26825
26826         * type.cs: Split out the type manager, and the assembly builder
26827         from here. 
26828
26829         * typemanager.cs: the type manager will live here now.
26830
26831         * cil-codegen.cs: And the code generator here. 
26832
26833 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
26834
26835         * makefile: Fixed up for easy making.
26836
26837 2001-07-13  Simon Cozens <simon@simon-cozens.org>
26838
26839         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
26840         the 
26841
26842         (unary_expression): Expand pre_increment_expression and
26843         post_decrement_expression to reduce a shift/reduce.
26844
26845 2001-07-11  Simon Cozens
26846
26847         * cs-tokenizer.cs: Hex numbers should begin with a 0.
26848
26849         Improve allow_keyword_as_indent name.
26850
26851 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
26852
26853         * Adjustments for Beta2. 
26854
26855 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
26856
26857         * decl.cs: Added `Define' abstract method.
26858         (InTransit): new property, used to catch recursive definitions. 
26859
26860         * interface.cs: Implement `Define'. 
26861
26862         * modifiers.cs: Map Modifiers.constants to
26863         System.Reflection.TypeAttribute flags.
26864
26865         * class.cs: Keep track of types and user-defined types.
26866         (BuilderInit): New method for creating an assembly
26867         (ResolveType): New function to launch the resolution process, only
26868         used by interfaces for now.
26869
26870         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
26871         that are inserted into the name space. 
26872
26873 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
26874
26875         * ARGH.  I have screwed up my tree so many times due to the use of
26876         rsync rather than using CVS.  Going to fix this at once. 
26877
26878         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
26879         load types.
26880
26881 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
26882
26883         * Experiment successful: Use System.Type rather that our own
26884         version of Type.  
26885
26886 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
26887
26888         * cs-parser.jay: Removed nsAliases from here.
26889
26890         Use new namespaces, handle `using XXX;' 
26891
26892         * namespace.cs: Reimplemented namespace handling, use a recursive
26893         definition of the class.  Now we can keep track of using clauses
26894         and catch invalid using clauses.
26895
26896 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
26897
26898         * gen-treedump.cs: Adapted for all the renaming.
26899
26900         * expression.cs (Expression): this class now has a Type property
26901         which returns an expression Type.
26902
26903         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
26904         `Type', as this has a different meaning now in the base
26905
26906 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
26907
26908         * interface.cs, class.cs: Removed from all the sources the
26909         references to signature computation, as we can not do method
26910         signature computation during the parsing time, as we are not
26911         trying to solve at that point distinguishing:
26912
26913         class X {
26914                 void a (Blah x) {}
26915                 void a (NS.Blah x) {}
26916         }
26917
26918         Which depending on the context might be valid or not, as we do not
26919         know if Blah is the same thing as NS.Blah at that point.
26920
26921         * Redid everything so the code uses TypeRefs now instead of
26922         Types.  TypeRefs are just temporary type placeholders, that need
26923         to be resolved.  They initially have a pointer to a string and the
26924         current scope in which they are used.  This is used later by the
26925         compiler to resolve the reference to an actual Type. 
26926
26927         * DeclSpace is no longer a CIR.Type, and neither are
26928         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
26929         are all DeclSpaces, but no Types. 
26930
26931         * type.cs (TypeRefManager): This implements the TypeRef manager,
26932         which keeps track of all the types that need to be resolved after
26933         the parsing has finished. 
26934
26935 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
26936
26937         * ARGH.  We are going to have to store `foreach' as a class rather
26938         than resolving it, as we need to verify error 1579 after name
26939         resolution.   *OR* we could keep a flag that says `This request to
26940         IEnumerator comes from a foreach statement' which we can then use
26941         to generate the error.
26942
26943 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
26944
26945         * class.cs (TypeContainer.AddMethod): we now add methods to the
26946         MethodGroup instead of the method hashtable.  
26947
26948         * expression.cs: Add MethodGroup abstraction, which gets us one
26949         step closer to the specification in the way we handle method
26950         declarations.  
26951
26952         * cs-parser.jay (primary_expression): qualified_identifier now
26953         tried to match up an identifier to a local variable reference or
26954         to a parameter reference.
26955
26956         current_local_parameters is now a parser global variable that
26957         points to the current parameters for the block, used during name
26958         lookup.
26959
26960         (property_declaration): Now creates an implicit `value' argument to
26961         the set accessor.
26962
26963 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
26964
26965         * parameter.cs: Do not use `param' arguments as part of the
26966         signature, per the spec.
26967
26968 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
26969
26970         * decl.cs: Base class for classes, structs and interfaces.  This
26971         is the "Declaration Space" 
26972
26973         * cs-parser.jay: Use CheckDef for checking declaration errors
26974         instead of having one on each function.
26975
26976         * class.cs: Factor out some code for handling error handling in
26977         accordance to the "Declarations" section in the "Basic Concepts"
26978         chapter in the ECMA C# spec.
26979
26980         * interface.cs: Make all interface member classes derive from
26981         InterfaceMemberBase.
26982
26983 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
26984
26985         * Many things: all interfaces are parsed and generated in
26986         gen-treedump.  Support for member variables, constructors,
26987         destructors, properties, constants is there.
26988
26989         Beginning of the IL backend, but very little done, just there for
26990         testing purposes. 
26991
26992 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
26993
26994         * cs-parser.jay: Fix labeled statement.
26995
26996         * cs-tokenizer.cs (escape): Escape " and ' always.
26997         ref_line, ref_name: keep track of the line/filename as instructed
26998         by #line by the compiler.
26999         Parse #line.
27000
27001 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
27002
27003         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
27004         to match the values in System.CodeDOM.
27005
27006         Divid renamed to Divide.
27007
27008         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
27009         statements. 
27010         (Statements.set): remove.
27011
27012         * System.CodeDOM/CodeCatchClause.cs: always have a valid
27013         statements. 
27014
27015         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
27016         falseStatements always have valid values. 
27017
27018         * cs-parser.jay: Use System.CodeDOM now.
27019