2008-05-31 Marek Safar <marek.safar@gmail.com>
[mono.git] / mcs / mcs / ChangeLog
1 2008-05-31  Marek Safar  <marek.safar@gmail.com>
2
3         A fix for bug #395845
4         * class.cs, nullable.cs: User unary operator is allowed to have nullable and
5         non-nullable parameter type.
6         
7 2008-05-31  Marek Safar  <marek.safar@gmail.com>
8
9         * class.cs: Handle contructor initializer as a statement in top-level block.
10
11 2008-05-30  Marek Safar  <marek.safar@gmail.com>
12
13         * attribute.cs: Don't mix old and new corlib types when emitting corlib
14         security attributes.
15
16 2008-05-24  Marek Safar  <marek.safar@gmail.com>
17
18         * ecore.cs, expression.cs: Small IVariable refactoring.
19
20 2008-05-22  Marek Safar  <marek.safar@gmail.com>
21
22         * assign.cs (LocalTemporary): Implemented CreateExpressionTree.
23
24 2008-05-21  Marek Safar  <marek.safar@gmail.com>
25
26         * cs-parser.jay: Removed redundant catch type check.
27
28 2008-05-21  Marek Safar  <marek.safar@gmail.com>
29
30         A fix for bug #390372
31         * nullable.cs: Set correct return type.
32
33 2008-05-21  Marek Safar  <marek.safar@gmail.com>
34
35         A fix for bug #391062
36         * typemanager.cs: Fixed crash when comparing null types.
37
38 2008-05-21  Marek Safar  <marek.safar@gmail.com>
39
40         A fix for bug #391871
41         * cs-parser.jay: Better error handling for invalid catch type.
42
43 2008-05-20  Marek Safar  <marek.safar@gmail.com>
44
45         A fix for bug #392155
46         * cs-tokenizer.cs: Fixed casting of byte and decimal expression.
47
48 2008-05-15  Marek Safar  <marek.safar@gmail.com>
49
50         A fix for bug #390666
51         * ecore.cs (BetterExpressionConversion): Unwrap each Expression<T>
52         expressions.
53
54 2008-05-15  Marek Safar  <marek.safar@gmail.com>
55
56         * class.cs, expression.cs, statement.cs: Removed a hack, setting block flag
57         in getter.
58
59 2008-05-13  Marek Safar  <marek.safar@gmail.com>
60
61         A fix for bug #389625
62         * delegate.cs, generic.cs: Some progress on method group return type
63         inference.
64
65 2008-05-13  Marek Safar  <marek.safar@gmail.com>
66
67         A fix for bug #378419
68         * namespace.cs: Inspect also parent namespaces not only namespace entries.
69
70 2008-05-12  Marek Safar  <marek.safar@gmail.com>
71
72         * class.cs (Constructor): Added IsCompilerGenerated.
73
74 2008-05-12  Marek Safar  <marek.safar@gmail.com>
75
76         * expression.cs: Enum binary operators can accept non-enum operand only when
77         is implicitly convertible to underlying type.
78
79 2008-05-12  Marek Safar  <marek.safar@gmail.com>
80
81         A fix for bug #389272
82         * support.cs: Workaround System.InvalidOperationException for enums.
83
84 2008-05-12  Marek Safar  <marek.safar@gmail.com>
85
86         A fix for bug #389073
87         * convert.cs: More undocumented explicit IntPtr/UIntPtr conversions.
88
89 2008-05-10  Marek Safar  <marek.safar@gmail.com>
90
91         * driver.cs: Split Parse.
92         
93         * location.cs (LookupFile): Uses string.Empty.
94
95 2008-05-07  Marek Safar  <marek.safar@gmail.com>
96
97         * expression.cs, parameter.cs: Small ParameterReference clean up.
98
99 2008-05-07  Marek Safar  <marek.safar@gmail.com>
100
101         * anonymous.cs, codegen.cs, convert.cs, ecore.cs: Removed uber ugly TempEc
102         hack. Fixes #387502.
103
104 2008-05-06  Martin Baulig  <martin@ximian.com>
105
106         * class.cs (Constructor.Emit): Fix the logic whether to emit
107         symbol information.
108
109 2008-05-06  Raja R Harinath  <harinath@hurrynot.org>
110
111         Fix #385503
112         * iterators.cs (Iterator.CurrentBlock.DoEmit): Don't emit
113         InvalidOperationException when the iterator is before the start or
114         after the end.
115
116 2008-05-06  Marek Safar  <marek.safar@gmail.com>
117
118         * nullable.cs (NullCoalescingOperator): Result is underlying type of left,
119         when left is nullable type.
120
121 2008-05-06  Marek Safar  <marek.safar@gmail.com>
122
123         A fix for bug #386628
124         * expression.cs (LocalVariableReference): Continue in resolving when
125         variable is not assigned.
126
127 2008-05-05  Marek Safar  <marek.safar@gmail.com>
128
129         * nullable.cs, statement.cs (Unwrap): Store non-variable expression in all
130         nullable operations.
131
132 2008-05-04  Marek Safar  <marek.safar@gmail.com>
133
134         * nullable.cs, statement.cs (Unwrap): Don't duplicate variable expressions,
135         it saves many redundant temporary variables for nullable operations.
136
137 2008-05-03  Marek Safar  <marek.safar@gmail.com>
138
139         * assign.cs: EventAddOrRemove is a statement and cannot have a type.
140         
141         * cfold.cs, constant.cs, expression.cs: Share Error_OperatorCannotBeApplied
142         method.
143         
144         * nullable.cs: Constant coalescing operator optimizations.
145
146 2008-05-03  Marek Safar  <marek.safar@gmail.com>
147
148         * constant.cs: Use unsigned conversion for values which are unsigned only.
149
150 2008-05-03  Marek Safar  <marek.safar@gmail.com>
151
152         * convert.cs, literal.cs, nullabel.cs, typemanager.cs: Implemeted null 
153         coalescing operator as it should be.
154
155 2008-05-02  Marek Safar  <marek.safar@gmail.com>
156
157         A fix for bug #371016
158         * expression.cs: All predefined delegate operators require implicit method
159         group conversion.
160         
161 2008-05-02  Marek Safar  <marek.safar@gmail.com>
162
163         * constant.cs: Emit long constant as uint when fits the range.
164         
165         * convert.cs, expression.cs: Fixed few unsafe conversions.
166
167 2008-05-02  Marek Safar  <marek.safar@gmail.com>
168
169         * convert.cs, literal.cs: Don't wrap implicit reference conversion to object
170
171 2008-05-02  Raja R Harinath  <harinath@hurrynot.org>
172
173         Fix #385758
174         * convert.cs (ImplicitNumericConversion): Don't modify the type of
175         'expr'.
176         * ecore.cs (EmptyCast.Create): Flatten nested EmptyCasts.
177
178 2008-05-01  Marek Safar  <marek.safar@gmail.com>
179
180         * constant.cs, literal.cs: IsLiteral property for error reporting.
181         
182         * ecore.cs, expression.cs: Implemented Property expression.
183
184 2008-05-01  Marek Safar  <marek.safar@gmail.com>
185
186         * class.cs, modifiers.cs, flowanalysis.cs: New BACKING_FIELD flag.
187         
188         * nullable.cs: Implemented nullable coalescing null operator.
189
190         * ecore.cs, expression.cs: Expression trees work.
191
192 2008-05-01  Marek Safar  <marek.safar@gmail.com>
193
194         * ecore.cs: CreateExpressionTree is finally abstract.
195
196         * expression.cs, linq.cs: Updated.
197
198 2008-05-01  Marek Safar  <marek.safar@gmail.com>
199
200         * expression.cs, ecore.cs: Block base access expression inside expression
201         tree.
202
203 2008-05-01  Marek Safar  <marek.safar@gmail.com>
204
205         A fix for bug #385058
206         * expression.cs: User-defined operator implementations always take
207         precedence over predefined operator implementations.
208
209 2008-04-30  Marek Safar  <marek.safar@gmail.com>
210
211         * assign.cs, anonymous.cs, lambda.cs, nullable.cs, ecore.cs, linq.cs,
212         class.cs, iterators.cs, expression.cs, attribute.cs: Filled a few more
213         expression tree conversions.
214         
215 2008-04-30  Marek Safar  <marek.safar@gmail.com>
216
217         * typemanager.cs, ecore.cs, class.cs, expression.cs, doc.cs: Merged all
218         operators method details to Operator class.
219
220 2008-04-30  Marek Safar  <marek.safar@gmail.com>
221
222         * anonymous.cs: Pass unsafe flags to anonymous container.
223         
224         * ecore.cs, expression.cs, statement.cs: Block unsafe pointer operations
225         inside expression tree.
226
227 2008-04-29  Martin Baulig  <martin@ximian.com>
228
229         * cs-tokenizer.cs (Tokenizer.Position): Added `line'.
230         (Tokenizer.PopPosition): Also restore the `line'.
231
232 2008-04-29  Marek Safar  <marek.safar@gmail.com>
233
234         * delegate.cs: Implemented Invoke expression.
235
236 2008-04-29  Marek Safar  <marek.safar@gmail.com>
237
238         * expression.cs: Fixed equality reference comparison regression.
239
240 2008-04-29  Marek Safar  <marek.safar@gmail.com>
241
242         * ecore.cs: Clean up EmptyCast hack.
243         
244         * expression.cs, nullable.cs: Implemented enum binary and unary operations
245         using correct conversion rules. Also fixes #383993.
246
247 2008-04-28  Martin Baulig  <martin@ximian.com>
248
249         * class.cs (Constructor.Emit): Don't emit debugging information
250         for generated default .ctor's.
251
252 2008-04-28  Marek Safar  <marek.safar@gmail.com>
253
254         * convert.cs: Empty-cast ushort to int conversion.
255
256 2008-04-28  Marek Safar  <marek.safar@gmail.com>
257
258         A fix for bug #384191
259         * ecore.cs, expression.cs: Fixed expression cloning.
260
261 2008-04-28  Marek Safar  <marek.safar@gmail.com>
262
263         * ecore.cs, delegate.cs, assign.cs: Few tweaks for recent changes.
264
265 2008-04-28  Raja R Harinath  <harinath@hurrynot.org>
266
267         Fix #381559, test-638.cs, test-639.cs
268         * assign.cs (CompoundAssign.Helper): New wrapper.
269         (CompoundAssign.DoResolve): Use it to wrap the nested 'target'
270         access.
271         * ecore.cs (MethodGroupExpr.VerifyArgumentsCompat) <params arguments>:
272         Pass unconverted expressions to the params array creation expression.
273         (FieldExpr.EmitAssign): Don't special-case StringConcat.
274         (PropertyExpr.EmitAssign): Likewise.
275         * expression.cs (ArrayCreation.ResolveArrayElement): Keep track of the
276         element if it is of kind CompoundAssign.Helper.
277         (ArrayCreation.Emit): If we saw a CompoundAssign.Helper, emit it
278         first before anything else.
279         (ArrayAccess.EmitAssign): Don't special-case StringConcat.
280         (ArrayAccess.LoadArrayAndArguments): Simplify.
281
282 2008-04-27  Marek Safar  <marek.safar@gmail.com>
283
284         * expression.cs: Fixed cloning of typeof(void).
285
286 2008-04-27  Raja R Harinath  <harinath@hurrynot.org>
287
288         * assign.cs (Assign.DoResolve): Remove support for EventExprs.
289         (Assign.Emit): Likewise.  Move it to ...
290         (CompoundAssign.DoResolve): ... here and ...
291         (CompoundAssign.Emit): ... here.
292         (EventAddOrRemove): New helper to handle += and -= on events, and
293         avoid the use of BinaryDelegates.
294         * ecore.cs (EventExpr.DoResolveLValue): Emit CS0070 unconditionally.
295         (EventExpr.EmitAddOrRemove): Improve.
296         * delegate.cs (DelegateInvocation.DoResolve): Simplify slightly.
297
298         * cs-parser.jay (type) <namespace_or_type_name variant>: Don't
299         create VarExprs for 'foo.bar.var'.
300         * ecore.cs (VarExpr.InferType): Rename from DoResolveLValue, which
301         is a highly inappropriate name for its functionality.
302
303 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
304
305         Simplify handling of multiple assignments
306         * assign.cs (Assign): Clear out all 'embedded assign' gunk.  Make
307         inheritable-only.
308         (SimpleAssign): New.  Class to be used for normal assignments.
309         * anonymous.cs, class.cs, cs-parser.jay: Update to changes.
310         * expression.cs, parameter.cs, statement.cs: Likewise.
311
312 2008-04-25  Marek Safar  <marek.safar@gmail.com>
313
314         * ecore.cs, expression.cs, nullable.cs: Implemeted enum binary add operation
315         for incompatible underlying types, more to come, uff.
316
317 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
318
319         Fix gtest-388.cs
320         * expression.cs (VariableReference.EmitAssign) <source is NewInstance>:
321         Handle 'leave_copy'.
322
323 2008-04-25  Marek Safar  <marek.safar@gmail.com>
324
325         * expression.cs, nullable.cs: Implemented UnaryPlus expression.
326
327 2008-04-24  Raja R Harinath  <harinath@hurrynot.org>
328
329         Fix test-636.cs.  Sprinkle a few more 'EmitSideEffect's around
330         * expression.cs (Unary.TryReduceConstant): Unwrap SideEffectConstant.
331         * statement.cs (While, Do, For): Allow test to have side effects.
332         (For.DoEmit): Always emit InitStatement.
333
334         Fix test-635.cs
335         * expression.cs (Binary.DoResolve) <BitwiseAnd with zero constant>:
336         Always create SideEffectConstant.
337         (Binary.EnumLiftUp): Don't assume that the enumeration constant is
338         of type EnumConstant.
339
340         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
341         Handle 'right' being SideEffectConstant of type 'bool'.
342
343         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
344         Use left.EmitBranchable instead of open coding it, so as to
345         improve optimization opportunities.
346
347         * constant.cs (SideEffectConstant.EmitSideEffect): Simplify slightly.
348
349         * ecore.cs (Expression.EmitBranchable): Document some non-obvious
350         assumptions.
351         (Expression.EmitSideEffect): Document.
352
353 2008-04-23  Marek Safar  <marek.safar@gmail.com>
354
355         * expression.cs: Implemented NewArrayBounds, TypeIs, and TypeAs expressions.
356
357 2008-04-23  Marek Safar  <marek.safar@gmail.com>
358
359         * constant.cs, statement.cs: Use EmitSideEffect for constant if statement.
360
361 2008-04-23  Marek Safar  <marek.safar@gmail.com>
362
363         * ecore.cs, expression.cs, delegate.cs: Implemeted delegate instantiation
364         conversion to expression tree.
365
366 2008-04-23  Marek Safar  <marek.safar@gmail.com>
367
368         * ecore.cs: Removed unused expression.
369
370 2008-04-22  Marek Safar  <marek.safar@gmail.com>
371
372         * expression.cs: Implemented NegateChecked and New expressions.
373
374 2008-04-22  Marek Safar  <marek.safar@gmail.com>
375
376         * convert.cs, nullable.cs, expression.cs: Implemented Negate expression.
377
378 2008-04-22  Raja R Harinath  <harinath@hurrynot.org>
379
380         Fix #351102
381         * anonymous.cs (AnonymousMethodExpression.DoResolve): Mark as
382         needing final 'ret' instruction.
383
384 2008-04-22  Marek Safar  <marek.safar@gmail.com>
385
386         * expression.cs: Disabled lifted binary conversion on ISO-1 profiles.
387
388 2008-04-21  Marek Safar  <marek.safar@gmail.com>
389
390         * expression.cs: Emit ldnull and not null expression as an instance argument
391          of static method expression calls.
392
393 2008-04-21  Marek Safar  <marek.safar@gmail.com>
394
395         A fix for bug #378200
396         * expression.cs: Fixed crash when creating parameterless expression tree
397         method call.
398
399 2008-04-21  Marek Safar  <marek.safar@gmail.com>
400
401         A fix for bug #375297
402         * anonymous.cs: Fixed crash when inferring from null argument anonymous
403         method.
404
405 2008-04-21  Marek Safar  <marek.safar@gmail.com>
406
407         A fix for bug #377596
408         * decl.cs, class.cs: Emit delegate type argument attributes.
409
410 2008-04-21  Marek Safar  <marek.safar@gmail.com>
411
412         A fix for bug #365314
413         * generic.cs, ecore.cs: Type parameter declaration cannot be of generic type
414         
415 2008-04-21  Marek Safar  <marek.safar@gmail.com>
416
417         * cs-parser.jay, expression.cs: ComposedCast can work with type expressions
418         only.
419
420 2008-04-21  Marek Safar  <marek.safar@gmail.com>
421
422         * generic.cs (TypeParameter): Removed redundant location.
423
424 2008-04-19  Marek Safar  <marek.safar@gmail.com>
425
426         * generic.cs, parameter.cs, namespace.cs, ecore.cs, class.cs, decl.cs,
427         delegate.cs, iterators.cs, cs-parser.jay, const.cs, enum.cs: Use
428         FullNamedExpression in all declaration type expression, statements will come
429         later.
430
431 2008-04-18  Marek Safar  <marek.safar@gmail.com>
432
433         * generic.cs, namespace.cs, ecore.cs, class.cs, decl.cs, generic-mcs.cs,
434         nullable.cs, expression.cs, enum.cs, doc.cs: Cleaning up type expressions.
435
436 2008-04-18  Marek Safar  <marek.safar@gmail.com>
437
438         * parameter.cs, delegate.cs, cs-parser.jay, expression.cs: Removed unused
439         code.
440
441 2008-04-17  Marek Safar  <marek.safar@gmail.com>
442
443         * decl.cs, class.cs, generic.cs: Verify partial parts type parameters and
444         constraints.
445
446 2008-04-17  Marek Safar  <marek.safar@gmail.com>
447
448         * decl.cs, class.cs, cs-parser.jay, ecore.cs, expression.cs: Unify all type
449         name expressions.
450         Also fixes #340463.
451
452 2008-04-17  Raja R Harinath  <harinath@hurrynot.org>
453
454         Hook up 'EmitSideEffect'
455         * constant.cs (Constant.EmitSideEffect): New.
456         (SideEffectConstant.Emit): Simplify.  Use EmitSideEffect.
457         (SideEffectConstant.EmitSideEffect): New.
458         * ecore.cs (BoxedCast.EmitBranchable): Remove.  We can't use an
459         unconditional branch in EmitBranchable.
460         (FieldExpr.EmitBranchable): New.
461         * expression.cs (Unary.EmitSideEffect): New.
462         (Binary.EmitSideEffect): New.
463         (VariableReference.EmitSideEffect): New.  Do nothing.
464
465 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
466
467         Introduce 'EmitSideEffect'
468         * ecore.cs (Expression.EmitSideEffect): New.
469         (TypeCast): Rename from EmptyCast.
470         (EmptyCast): New.
471         (EmptyCast.EmitBranchable, EmptyCast.EmitSideEffect): Implement.
472         (BoxedCast.EmitBranchable, BoxedCast.EmitSideEffect): Implement.
473         * convert.cs, nullable.cs: Update to changes.
474
475 2008-04-16  Marek Safar  <marek.safar@gmail.com>
476
477         * class.cs, cs-parser.jay: Early check for base types expression.
478
479 2008-04-16  Marek Safar  <marek.safar@gmail.com>
480
481         * decl.cs (MemberName): Declare PrettyName as obsolete.
482
483 2008-04-16  Marek Safar  <marek.safar@gmail.com>
484
485         * namespace.cs: Use MemberName comparison.
486
487 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
488
489         Fix build break
490         * decl.cs (MemberName.PrettyName): New.  Replaces the misnamed
491         FullName.
492         (MemberName.MethodName, MemberName.GetSignatureForError): Improve.
493         (MemberName.FullyQualifiedName): New.  Provides the functionality
494         that users assume FullName would have.
495         * ecore.cs, namespace.cs: Update to changes.
496
497         * statement.cs (Using.assign): Make into ExpressionStatement.
498         (Using.EmitPreTryBody): Simplify.
499
500 2008-04-16  Marek Safar  <marek.safar@gmail.com>
501
502         * report.cs: ColorFormat is protected.
503         
504         * rootcontext.cs: Unused fields clean-up.
505         
506         * namespace.cs: Made UsingEntry name private.
507
508 2008-04-16  Marek Safar  <marek.safar@gmail.com>
509
510         * cs-tokenizer.cs, location.cs: Removed unused field.
511
512 2008-04-16  Jan Oravec <jan.oravec@6com.sk>
513             Raja R Harinath  <harinath@hurrynot.org>
514
515         Fix #379822
516         * constant.cs (SideEffectConstant.value): Rename from 'left'.
517         (SideEffectConstant.side_effect): Rename from 'right'.
518         (SideEffectConstant..ctor): Normalize 'side_effect'.
519         (SideEffectConstant.Emit): Emit 'value', not 'side_effect' as the
520         value of this constant.
521         * cfold.cs: Update to changes.
522
523 2008-04-15  Marek Safar  <marek.safar@gmail.com>
524
525         * cs-paser.jay: Removed unused variable.
526         
527         * driver.cs: Made Compile instance method.
528
529 2008-04-15  Raja R Harinath  <harinath@hurrynot.org>
530
531         * flowanalysis.cs (FlowBranching.MergeChild): Simplify.
532
533 2008-04-15  Marek Safar  <marek.safar@gmail.com>
534
535         * cs-paser.jay, namespace.cs: Simplified handling of namespace imports. 
536
537 2008-04-13  Jb Evain  <jbevain@novell.com>
538
539         * namespace.cs: update the System.Core fullname for 2.1
540         * driver.cs: update the list of required assemblies for 2.1.
541         Merged from the Moonlight 2 branch.
542
543 2008-04-11  Marek Safar  <marek.safar@gmail.com>
544
545         * assign.cs, ecore.cs, expression.cs, nullable.cs: More work on nullable
546         types and user defined operators. User operators arguments has to be checked
547         for null value before invocation, which also means no operator is called
548         when any argument is not convertible to unwrapped nullable type.
549         
550 2008-04-09  Marek Safar  <marek.safar@gmail.com>
551
552         * convert.cs, ecore.cs, expression.cs, nullable.cs: Initial refactoring
553         of Unary expressions to follow operator overloading rules precisely.
554         Also fixes #321794, #323794
555         
556 2008-04-08  Marek Safar  <marek.safar@gmail.com>
557
558         * cs-parser.jay, expression.cs: Don't wrap Indirection expression in Unary
559         expression.
560         
561 2008-04-08  Marek Safar  <marek.safar@gmail.com>
562
563         * expression.cs, ecore.cs: Implemented MemberInit expression.
564         
565 2008-04-08  Raja R Harinath  <harinath@hurrynot.org>
566
567         Fix mono/tests/exception4.cs
568         * statement.cs (ExceptionStatement, TryCatch): Revert to using
569         ec.NeedReturnLabel () rather emitting a 'nop'.
570
571         * statement.cs (ExceptionStatement.SomeCodeFollows): A hook for a
572         simple heuristic.
573         (TryCatch.SomeCodeFollows): Likewise.
574         * flowanalysis.cs (FlowBranchingException): Call 'SomeCodeFollows'
575         for 'break', 'continue' and 'return' statements inside a try.
576         We're fairly sure that the generated IL stream will have more
577         instructions textually following the try.
578         (FlowBranchingTryCatch): Likewise.
579
580         * statement.cs (Throw.Resolve): Move CS0156 and CS0724 testing ...
581         * flowanalysis.cs (FlowBranching.CheckRethrow): ... here and to its
582         overrides.
583
584         * statement.cs (CollectionForeach.DisposableWrapper): Make a true
585         wrapper -- forward everything to CollectionForeach.
586         (CollectionForeach.NonDisposableWrapper): New.
587         (CollectionForeach.EmitFinallyBody): Use 'endfinally' instruction
588         instead of a pop + branch to end.
589
590 2008-04-07  Marek Safar  <marek.safar@gmail.com>
591
592         A fix for bug #377485
593         * assign.cs, expression.cs, decl.cs, class.cs, ecore.cs, namespace.cs: 
594         Propagate location for extension method groups. Report conversion failure at
595         right place.
596
597 2008-04-07  Marek Safar  <marek.safar@gmail.com>
598
599         * anonymous.cs, expression.cs, ecore.cs, typemanager.cs: Implemented
600         ListInit and Field expressions.
601
602 2008-04-06  Raja R Harinath  <harinath@hurrynot.org>
603
604         * iterators.cs (Iterator.EmitMoveNext): Remove try/fault wrapper.
605         Since $PC is always -1 inside the body of MoveNext, the fault
606         handler is a no-op.
607         * flowanalysis.cs (FlowBranchingException.EmitFinally): Kill.
608         * statement.cs (ExceptionStatement.emit_finally): Likewise.
609         (ExceptionStatement.ResolveFinally): Drop 'branching' argument.
610
611         The denouement!  Fix #324708
612         * iterators.cs (Iterator.EmitMoveNext): Reset $PC to -1 on entry.
613         (Iterator.EmitYieldBreak): We no longer need to reset $PC.
614         * statement.cs (ExceptionStatement.DoEmit): Actually emit the
615         'finally' inside the finally clause.
616
617         * statement.cs (ExceptionStatement.DoEmit): Emit try/finally block
618         inside an iterator.  Don't emit the body of the 'finally' inside
619         the finally clause yet.
620
621         Use the ResumableStatement infrastructure for MoveNext ()
622         * iterators.cs (Iterator.EmitMoveNext_NoResumePoints): New.
623         (Iterator.EmitMoveNext): Use 'resume_points'.  Get rid of
624         'old_resume_points'.  Move dispatcher upfront.
625         (Iterator.MarkYield): Mark the 'resume_point' of a Yield.
626         * statement.cs (ExceptionStatement.DoEmit): Emit a dispatcher if
627         in an enumerator.  This encodes the main fix in this patch series
628         -- we can only jump into the first instruction of a try from the
629         outside, but we want to emit try/finally regions in iterators and
630         resume in the middle of them.
631
632 2008-04-05  Raja R Harinath  <harinath@hurrynot.org>
633
634         * statement.cs (ExceptionStatement.ResolveFinally): Move setting
635         of NeedReturnLabel here.
636
637         Introduce a common point for emitting try/finally to IL
638         * statement.cs (ExceptionStatement.DoEmit): New.  Combines all the
639         features of the various subclasses, which are now driven by ...
640         (ExceptionStatement.EmitPreTryBody): ... this and ...
641         (ExceptionStatement.EmitTryBody): ... this and the original
642         EmitFinallyBody.
643         (TryFinally, Lock, Using, UsingTemporary, DisposableWrapper):
644         Remove DoEmit and update to follow above protocol.
645
646         * statement.cs (ExceptionStatement.EmitForDispose): If all labels
647         of the dispatcher are the same, skip emitting the 'switch'.
648         * iterator.cs (Iterator.EmitDispose): Update to changes.
649
650         Clean up handling of 'using' statement
651         * statement.cs (UsingTemporary): New.  Carved out of ...
652         (Using): ... this.  Simplify drastically.  Handle exactly
653         one variable.
654         * cs-parser.jay (using_statement): Split.  Create UsingTemporary
655         or Using as appropriate.  If there are multiple variable declared,
656         create nested Using statements.
657         (resource_acquisition): Kill.
658
659         * statement.cs (ExceptionStatement.EmitForDispose): Use
660         EmitFinallyBody, not EmitFinally.
661
662         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Remove.
663         * iterator.cs: Update to changes.
664
665         Start using the ResumableStatement infrastructure
666         * statement.cs (ResumeableStatement.PrepareForDispose): New.
667         (ResumableStatement.EmitForDispose): New.
668         (ExceptionStatement): Override them.
669         * iterators.cs (Iterator.EmitDispose): Use PrepareForDispose and
670         EmitForDispose to create the body of the Dispose method.  Don't
671         use OldResumePoint.
672
673         * iterator.cs (Iterator.AddResumePoint): Move here from ...
674         * statement.cs (Toplevel.AddResumePoint): ... here.
675         (Toplevel.MoveNextStatement.Resolve): Create FlowBranchingIterator.
676         * flowanalysis.cs (FlowBranchingIterator): New.
677         * codegen.cs (EmitContext): Update to changes.
678
679         * iterators.cs (Iterator.OldResumePoint): Rename from ResumePoint.
680         (Iterator.old_resume_points): Rename from 'resume_points'.
681         (Iterator.MoveNextStatement): Remove unused class.
682
683         New infrastructure for try/finally in iterators (still unused)
684         * flowanalysis.cs (FlowBranching.AddResumePoint): New.
685         (FlowBranchingToplevel.AddResumePoint): Hook into
686         ToplevelBlock.AddResumePoint.
687         (FlowBranchingTryCatch): Move CS01626 and CS01631 checks here.
688         (FlowBranchingException): Hook into ExceptionBlock.AddResumePoint.
689         * statement.cs (ToplevelBlock.AddResumePoint): New.  Collect
690         resume points and assign program-counter values.
691         (ExceptionBlock.AddResumePoint): Collect resume points for
692         de-muxer at the top of try block.
693         * iterators.cs (Yield.CheckContext): Simplify.
694         (Yield.Resolve): Use FlowBranching.AddResumePoint.
695
696 2008-04-04  Raja R Harinath  <harinath@hurrynot.org>
697
698         * flowanalysis.cs (FlowBranching.AddReturnOrigin): Change Location
699         argument to an ExitStatement.
700         (FlowBranchingException): Refactor saved origins code.
701         * statement.cs (ExitStatement): Update to cahges.
702         * iterator.cs (YieldBreak): Likewise.
703
704         * statement.cs (ResumableStatement): New.  Common base class for
705         YieldReturn and ExceptionStatement.
706         (ExitStatement): New.  Common base class for Return and YieldBreak.
707         (Return): Update to changes.
708         * iterator.cs (YieldBreak): Likewise.
709         * lambda.cs (ContextualReturn): Likewise.
710
711         Fix #377028
712         * ecore.cs (Expression.ResolveAsTypeStep): If '!silent' attempt to
713         emit a meaningful error message.
714
715         Fix #324765, #319508
716         * flowanalysis.cs (VariableInfo.IsEverAssigned): New.
717         (VariableInfo.SetAssigned): Set it.
718         * statement.cs (Block.UsageWarning): Use 'IsEverAssigned' to
719         determine if CS0219 or CS0168 is appropriate.  Don't use
720         flow-analysis information.
721         (Block.Resolve): Use ec.EndFlowBranching, not ec.DoEndFlowBranching.
722         * codegen.cs (EmitContext.DoEndFlowBranching): Kill.  Inline into ...
723         (EmitContext.EndFlowBranching): ... this.
724
725 2008-04-03  Marek Safar  <marek.safar@gmail.com>
726
727         * class.cs, typemanager.cs: Emit volatile field with IsVolatile modifier.
728
729 2008-04-03  Marek Safar  <marek.safar@gmail.com>
730
731         A fix for bug #376508
732         * convert.cs, expression.cs: Fixed difference between ImplicitConversion and
733         ImplicitConversionExists.
734
735 2008-04-03  Marek Safar  <marek.safar@gmail.com>
736
737         * expression.cs (Binary): Added remaining binary operators to expression
738         tree builder.
739
740         * nullable.cs: Optimize shift with null argument.
741
742 2008-04-03  Raja R Harinath  <harinath@hurrynot.org>
743
744         Fix minor IL regression
745         * statement.cs (TryCatch..ctor): Add 'inside_try_finally' argument.
746         (TryCatch.DoEmit): Use it to avoid creating another ExceptionBlock.
747         * cs-parser.jay (try_statement): Update to changes.
748
749         * statement.cs (TryFinally.need_exc_block): Delete.
750         (TryFinally): Update to changes.
751
752         Now all ExceptionStatements are unconditional
753         * statement.cs (CollectionForeach.DisposableWrapper): New.
754         Extract out the try/finally code into a new wrapper.
755         (CollectionForeach.Resolve): Use it to simplify the code.
756
757 2008-04-02  Raja R Harinath  <harinath@hurrynot.org>
758
759         Start at simplifying ExceptionStatement semantics a bit
760         * statement.cs (TryCatch, TryFinally): Split 'Try' into two pieces.
761         * cs-parser.jay (try_statement): Update to changes.
762         (opt_catch_clauses): Remove.
763         * flowanalysis.cs: Update to changes.
764         (FlowBranching.BranchingType.TryCatch): New.
765         (FlowBranchingTryCatch): New.
766
767         * flowanalysis.cs (FlowBranching.BranchingType.SwitchSection): Kill.
768         (FlowBranching.CreateBranching): Update to changes.
769         (FlowBranchingBlock.AddSibling): Add sanity check.
770         * codegen.cs (EmitContext.StartFlowBranching) <Block variant>:
771         Update to changes.
772
773         * iterators.cs (Iterator.MarkFinally): Remove.
774         * statement.cs (ExceptionStatement): Update to changes.
775
776         Add support for skipping over finally blocks at runtime.  First
777         in a series to fix #324708
778         * iterators.cs (Iterator.SkipFinally): New LocalBuilder.
779         (Iterator.EmitMoveNext): Initialize it.
780         * statement.cs (ExceptionStatement.EmitFinally): Use it to emit a
781         branch over the body of the 'finally' clause.
782
783 2008-03-31  Raja R Harinath  <harinath@hurrynot.org>
784
785         Avoid lopsided use of Foo/DoFoo names
786         * statement.cs (ExpressionStatement.EmitFinallyBody):
787         Rename from EmitFinally.
788         (ExpressionStatement.EmitFinally): Rename from DoEmitFinally.
789         * iterator.cs: Update to changes.
790
791 2008-04-02  Marek Safar  <marek.safar@gmail.com>
792
793         * ecore.cs, expression.cs, nullable.cs: ConditionalLogicalOperator is now
794         based on UserOperatorCall. More binary nullable operators clean up.
795
796 2008-04-02  Martin Baulig  <martin@ximian.com>
797
798         * symbolwriter.cs: Remove the `#if !DISABLE_TERRANIA_CHANGES' conditionals.
799
800 2008-04-02  Marek Safar  <marek.safar@gmail.com>
801
802         * nullable.cs: Merge user and empty conversions when lifting expression
803         trees.
804         
805         * expression.cs (StringConcat): Implemented expression tree representation.
806
807 2008-04-01  Marek Safar  <marek.safar@gmail.com>
808
809         * nullable.cs: When lifting null literal and a user operator exists, no call 
810         is made.
811         
812 2008-04-01  Marek Safar  <marek.safar@gmail.com>
813
814         * nullable.cs, ecore.cs, expression.cs: Convert null arithmetic to lifted
815         null.
816
817 2008-04-01  Marek Safar  <marek.safar@gmail.com>
818
819         * nullable.cs, expression.cs: Use namespace instead heavily nested
820         monster abstract class.
821
822 2008-04-01  Marek Safar  <marek.safar@gmail.com>
823
824         * ecore.cs, convert.cs, constant.cs, nullable.cs, expression.cs: Implemented
825         lifting of null literal and user operators. Clean up of some temporary
826         nullable hacks.
827
828 2008-03-30  Raja R Harinath  <harinath@hurrynot.org>
829
830         Fix #368224, test-629.cs
831         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Return true
832         if it crossed an unwind-protect boundary.
833         * iterators.cs (Yield.CheckContext): Relax check for 'yield break'.
834         (Yield.Resolve, Yield.DoEmit): Track whether the yield occurs
835         inside an unwind-protected region.
836         (YieldBreak.Resolve, YieldBreak.DoEmit): Likewise.
837         (Iterator.MarkYield): Add 'unwind_protect' parameter.  Emit a
838         'leave' instead of a 'br' if unwind-protected.
839         (Iterator.EmitYieldBreak): Likewise.
840
841 2008-03-29  Gert Driesen  <drieseng@users.sourceforge.net>
842
843         * driver.cs: Only define versioninfo resources if no win32 resource
844         file was specified.
845
846 2008-03-28  Marek Safar  <marek.safar@gmail.com>
847
848         A fix for bug #372375
849         * convert.cs: Fixed boxing of nullable types.
850
851 2008-03-28  Marek Safar  <marek.safar@gmail.com>
852
853         * typemanager.cs: Initialize InternalsVisibleTo as the very first optional
854         type.
855
856 2008-03-28  Marek Safar  <marek.safar@gmail.com>
857
858         A fix for bug #374619
859         * nullable.cs: Fixed guarding of EmitBitwiseBoolean.
860         
861 2008-03-27  Marek Safar  <marek.safar@gmail.com>
862
863         * lambda.cs: Check return type only for invocation.
864         
865 2008-03-27  Marek Safar  <marek.safar@gmail.com>
866
867         A fix for bug #374214
868         * ecore.cs: Correctly report argument type mismatch.
869
870 2008-03-27  Marek Safar  <marek.safar@gmail.com>
871
872         * convert.cs (ImplicitReferenceConversionCore): Correctly compare enum type
873         and not rely on broken IsEnum.
874
875 2008-03-27  Marek Safar  <marek.safar@gmail.com>
876
877         * nullable.cs: New file, extracted from generic.cs.
878         
879         * generic.cs, generic-mcs.cs, *.csproj, *.sources: Updated.
880
881 2008-03-27  Marek Safar  <marek.safar@gmail.com>
882
883         * generic.cs, convert.cs, generic-mcs.cs, expression.cs: Added lifting of
884         predefined comparison operators and null literals.
885         
886         * report.cs: New warning ID.
887         
888 2008-03-25  Marek Safar  <marek.safar@gmail.com>
889
890         A fix for bug #370577
891         * lambda.cs: Check return type too.
892
893 2008-03-25  Marek Safar  <marek.safar@gmail.com>
894
895         A fix for bug #372846
896         * class.cs: Automatic properties can be declared as unsafe.
897
898 2008-03-20  Marek Safar  <marek.safar@gmail.com>
899
900         * location.cs: Use string based concatenation.
901         
902         * expression.cs: LiftedBinaryOperator is gmcs only.
903         
904 2008-03-20  Marek Safar  <marek.safar@gmail.com>
905
906         * generic.cs, literal.cs, ecore.cs, expression.cs: Ongoing work on nullable
907         conversions rules and expression trees.
908
909 2008-03-19  Marek Safar  <marek.safar@gmail.com>
910
911         * delegate.cs: Use extension method source as delegate target.
912
913 2008-03-19  Marek Safar  <marek.safar@gmail.com>
914
915         * generic.cs, generic-mcs.cs, expression.cs, ecore.cs: Rewrote nullable
916         binary operations to be purely based on binary operations and optimized
917         emitted code (30% less in some cases). Introduced ReducedExpression for ETs
918         and other ET refactoring.
919         
920         * typemanager.cs: Fixed warning.
921         
922 2008-03-17  Marek Safar  <marek.safar@gmail.com>
923
924         * class.cs, decl.cs, delegate.cs: Do protected modifier check on each member
925         
926         * symbolwriter.cs: Fixed.
927
928 2008-03-17  Marek Safar  <marek.safar@gmail.com>
929
930         * anonymous.cs, driver.cs: Reset anonymous types counters.
931
932 2008-03-17  Marek Safar  <marek.safar@gmail.com>
933
934         * ecore.cs (MethodGroupExpr): Skip first candidate, it's already the best.
935         
936         * class.cs: Use fullname for all type member definitions.
937         
938 2008-02-19  Martin Baulig  <martin@ximian.com>
939
940         * class.cs
941         (IMethodData.EmitExtraSymbolInfo): New interface method.
942         (MethodData.Emit): Call method.EmitExtraSymbolInfo().
943         (MethodOrOperator.EmitExtraSymbolInfo): Implement this new
944         interface method here as an empty public virtual method.
945
946         * anonymous.cs
947         (AnonymousMethodMethod.ctor): Added `string real_name' argument.
948         (AnonymousMethodMethod.EmitExtraSymbolInfo): Override and call
949         CodeGen.SymbolWriter.SetRealMethodName().       
950
951 2008-02-18  Martin Baulig  <martin@ximian.com>
952
953         * anonymous.cs
954         (ScopeInfo.EmitType): Override this and emit debugging
955         information for captured variables.
956         (RootScopeInfo.EmitType): Override this and emit symbol
957         information for a captured `this'.
958
959 2008-02-15  Martin Baulig  <martin@ximian.com>
960
961         * iterators.cs: Emit debugging info.
962
963         * codegen.cs
964         (EmitContext.Flags): Add `OmitDebuggingInfo'.
965         (EmitContext.OmitDebuggingInfo): New public property.
966
967         * statement.cs
968         (While): Override Emit() and don't emit symbol info there; do it
969         inside DoEmit() instead.
970         (Block.Emit): Omit symbol information while emitting the scope
971         initializers; don't ec.Mark() the `EndLocation'.  Fix the lexical
972         block logic.
973         (ExplicitBlock.IsIterator): Moved here from `ToplevelBlock'.
974         (ToplevelBlock.MakeIterator): Pass the `flags' to `ExplicitBlock's
975         .ctor to make `IsIterator' work.
976
977 2008-03-14  Martin Baulig  <martin@ximian.com>
978
979         * symbolwriter.cs: Added the new symbol writer function from the
980         debugger's `terrania' branch; temporarily enclose them inside
981         `#if !DISABLE_TERRANIA_CHANGES' conditionals until I'm back from
982         my vacations.
983
984 2008-03-14  Martin Baulig  <martin@ximian.com>
985
986         * symbolwriter.cs
987         (SymbolWriter): Make this a public static class.
988
989         * codegen.cs
990         (CodeGen.SymbolWriter): Removed; use the new static `SymbolWriter'
991         class instead of using `if (CodeGen.SymbolWriter != null)' everywhere.
992
993 2008-03-14  Marek Safar  <marek.safar@gmail.com>
994
995         A fix for bug #370577
996         * statement.cs, lambda.cs: Added extra limitations when dealing with void
997         return type.
998         
999 2008-03-14  Marek Safar  <marek.safar@gmail.com>
1000
1001         * typemanager.cs (CSharpName): Made 250 times faster.
1002
1003 2008-03-13  Marek Safar  <marek.safar@gmail.com>
1004
1005         * ecore.cs, expression.cs: Emit conversion for ET shift argument.
1006         
1007 2008-03-12  Marek Safar  <marek.safar@gmail.com>
1008
1009         * generic.cs, typemanager.cs, enum.cs, codegen.cs, statement.cs: Try not to
1010         crash when predefined field does not exist.
1011         
1012 2008-03-12  Marek Safar  <marek.safar@gmail.com>
1013
1014         * ecore.cs (PropertyExpr): Fixed IsSingleDimensionalArrayLength regression.
1015         
1016 2008-03-12  Marek Safar  <marek.safar@gmail.com>
1017
1018         * class.cs (FixedField): Don't crash when contructors are missing.
1019
1020 2008-03-11  Marek Safar  <marek.safar@gmail.com>
1021
1022         * typemanager.cs, namespace.cs, literal.cs, ecore.cs, class.cs, decl.cs,
1023         convert.cs, constant.cs, expression.cs, statement.cs: Use same method to
1024         check internal types accessibility for internal and external types.
1025         Replaced EnumToUnderlying by GetEnumUnderlyingType.
1026
1027 2008-03-11  Marek Safar  <marek.safar@gmail.com>
1028
1029         * support.cs, typemanager.cs, pending.cs, ecore.cs, class.cs, delegate.cs
1030         convert.cs, const.cs, anonymous.cs, constant.cs, expression.cs,
1031         attribute.cs, statement: Use corect instance of predefined types (work
1032         related to #364674).
1033
1034 2008-03-07  Marek Safar  <marek.safar@gmail.com>
1035
1036         * expression.cs (TypeOfVoid): Fixed predefined method initialization.
1037         
1038 2008-03-07  Marek Safar  <marek.safar@gmail.com>
1039
1040         * generic.cs, typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, 
1041         class.cs, delegate.cs, iterators.cs, const.cs, constant.cs, driver.cs,
1042         expression.cs, attribute.cs, codegen.cs, statement.cs: TypeManager optional
1043         predefined types clean up, delayed predefined types members initialization
1044         (work related to #364674).
1045
1046 2008-03-05  Marek Safar  <marek.safar@gmail.com>
1047
1048         * typemanager.cs (IsFriendAssembly): InternalsVisibleTo is not mandatory.
1049         
1050 2008-03-05  Marek Safar  <marek.safar@gmail.com>
1051
1052         * typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, class.cs, decl.cs,
1053         delegate.cs, convert.cs, driver.cs, attribute.cs, codegen.cs: TypeManager
1054         predefined types clean up (work related to #364674).
1055
1056 2008-03-04  Marek Safar  <marek.safar@gmail.com>
1057
1058         * ecore.cs: Print an error message instead of throwing exception.
1059         
1060 2008-03-04  Marek Safar  <marek.safar@gmail.com>
1061
1062         * generic.cs, typemanager.cs, literal.cs, convert.cs, cfold.cs, constant.cs,
1063         expression.cs, statement.cs: Unififed null literal representation.
1064
1065 2008-03-03  Marek Safar  <marek.safar@gmail.com>
1066
1067         * anonymous.cs, cfold.cs, convert.cs, delegate.cs, doc.cs, ecore.cs,
1068         expression.cs: Refactored binary operators resolve phase and improved speed.
1069         The nullable code is still missing and won't work correctly, more fixes
1070         required.
1071
1072         It also fixes #323726, #324312, #324248, and many other unreported issues.
1073
1074 2008-02-29  Zoltan Varga  <vargaz@gmail.com>
1075
1076         * report.cs (FeatureIsNotAvailable): Use 'mcs1' instead of 'mcs', and 'mcs' 
1077         instead of 'gmcs'.
1078
1079 2008-02-27  Marek Safar  <marek.safar@gmail.com>
1080
1081         * ecore.cs: Clean-up and split BetterConversion.
1082         
1083 2008-02-25  Raja R Harinath  <harinath@hurrynot.org>
1084
1085         Fix #363791
1086         * enum.cs (EnumMember.Value): Only access 'value' if
1087         ResolveValue says it's ok.
1088         (EnumMember.DoResolveValue): Don't set prev_member.value.
1089         (Enum.GetDefinition): Reverse arguments of Equals --
1090         EnumMember.Value can return 'null'.
1091
1092         * statement.cs (Switch.Error_AlreadyOccurs): Fix typo in name.
1093
1094 2008-02-22  Marek Safar  <marek.safar@gmail.com>
1095
1096         * generic.cs, expression.cs: More ongoing work on expression trees.
1097         
1098 2008-02-21  Marek Safar  <marek.safar@gmail.com>
1099
1100         * class.cs, typemanager.cs: Rewrote operator matching logic to correctly
1101         handle missing matches when mutiple operators exist.
1102         
1103 2008-02-20  Marek Safar  <marek.safar@gmail.com>
1104
1105         A fix for bug #363218
1106         * expression.cs (ArrayCreation.Clone): Deal with multi-dimensional
1107         initializers.
1108         
1109 2008-02-20  Marek Safar  <marek.safar@gmail.com>
1110
1111         * expression.cs, constant.cs, cfold.cs: Yet another side-effect constant
1112         update. This time to deal correctly with SideEffectConstant expression used
1113         as an argument for another constant folding.
1114
1115 2008-02-20  Raja R Harinath  <harinath@hurrynot.org>
1116
1117         * typemanager.cs (DropGenericMethodArguments): Ensure we get an underlying
1118         MethodBuilder.
1119
1120 2008-02-19  Marek Safar  <marek.safar@gmail.com>
1121
1122         * constant.cs, cfold.cs: SideEffectConstant results can apply for folding.
1123
1124 2008-02-19  Marek Safar  <marek.safar@gmail.com>
1125
1126         A fix for bug #328136
1127         * expression.cs: Do not fold immediately LogicalAnd operators when the left
1128         side is a false constant, because we still need to evaluate the right-hand
1129         side.
1130
1131         * statement.cs (If): Emit two types of boolean constants (simple constant,
1132         side-effect constant).
1133
1134 2008-02-19  Marek Safar  <marek.safar@gmail.com>
1135
1136         * constant.cs (SideEffectConstant): Don't emit boolean constant.
1137
1138         * expression.cs: Fold immediately LogicalAnd operators when both sides are
1139         constants.
1140
1141 2008-02-18  Marek Safar  <marek.safar@gmail.com>
1142
1143         A fix for bug #361457
1144         * ecore.cs (IsApplicable): Params methods have lower priority.
1145
1146         * support.cs: Return correct parameter modifier for params types.
1147
1148 2008-02-18  Marek Safar  <marek.safar@gmail.com>
1149
1150         * generic.cs (TypeParameter): Cache attribute target name.
1151
1152         * support.cs: Removed unused variable.
1153
1154         * typemanager.cs: Removed debugging leftover.
1155
1156         * ecore.cs: Use local type instead of a property;
1157
1158         * class.cs (VerifyMembers): Consider also parent to test whether type member
1159         is local or public.
1160
1161         * expression.cs (FullMethodDesc): Removed.
1162
1163         * attribute.cs (IsValidArgumentType): Made static.
1164
1165 2008-02-17  Raja R Harinath  <harinath@hurrynot.org>
1166
1167         Cleanup to be more readable.
1168         * Makefile (GMCS_PROFILE): Remove.
1169         (COMPILER_NAME): New helper.
1170
1171 2008-02-15  Miguel de Icaza  <miguel@novell.com>
1172
1173         * cs-tokenizer.cs: if a conditional expression happens inside a
1174         (...) this also means that we do not need to de-ambiguate between
1175         an parenthesized expression and a cast.
1176
1177         Fixes 346484.
1178
1179         * constant.cs (SideEffectConstant): a constant value that happens
1180         to have a side effect.
1181
1182         Fixes the build regressions introduced by the fix for #359789
1183
1184 2008-02-14  Rodrigo Kumpera  <rkumpera@novell.com>
1185
1186         * expression.cs (Conditional.Emit): when emitting the ternary
1187         operator, use local variables to generate code verifiable code.
1188
1189         The verifier cannot infer that the type on stack before the
1190         stloc.0 is executed is of type ParentB. This happens because the
1191         stack merge algorithm uses only parent types when deciding which
1192         is the common type.  This is described in Part III 1.8.1.3 of ECMA
1193         335.
1194
1195         This code compiled with mcs is not verifiable under MS. The MS
1196         verifier picks the first common interface of Foo and Bar, which is
1197         wrong, but doesn't use a full join type of the 2 interfaces.
1198
1199         CSC uses a clever hack to compile such code in a verifiable
1200         way. It stores the intermediate values in a local variable with
1201         the expected type.
1202
1203         Fixes: #358102
1204
1205 2008-02-14  Miguel de Icaza  <miguel@novell.com>
1206
1207         * expression.cs: Do not fold BitwiseAnd operators when the left
1208         side is a false constant, because we still need to evaluate the
1209         right-hand side.
1210
1211         Fixes #359789
1212
1213         * support.cs: Instead of throwing an InternalErrorException when
1214         the position of the stream is outside the boundary of our buffer,
1215         reset the state of the reader, and restart the reading from the
1216         beginning of the file.
1217
1218 2008-02-14  Marek Safar  <marek.safar@gmail.com>
1219
1220         * generic.cs (TypeParameter.GetMembers): Is not supported operation.
1221
1222 2008-02-14  Marek Safar  <marek.safar@gmail.com>
1223
1224         A fix for bug #361686
1225         * decl.cs: A protected types used inside a private class which parents
1226         derives from the protected class are accessible.
1227
1228 2008-02-13  Marek Safar  <marek.safar@gmail.com>
1229
1230         * generic.cs (ConstraintChecker): Use cached member lookup when looking for
1231         the parameterless constructor.
1232
1233 2008-02-13  Marek Safar  <marek.safar@gmail.com>
1234
1235         * generic.cs, typemanager.cs, iterators.cs, codegen.cs: Refactored core
1236         lookup methods to use standard member cache when doing member lookup.
1237
1238 2008-02-12  Marek Safar  <marek.safar@gmail.com>
1239
1240         * driver.cs: Don't report full path for referenced module as assembly error.
1241
1242 2008-02-12  Marek Safar  <marek.safar@gmail.com>
1243
1244         * Makefile: Fixed `qh' target to work on all machines.
1245
1246         * report.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs, anonymous.cs,
1247         expression.cs, codegen.cs, statement.cs, doc.cs: Replaced type IsSubclassOf
1248         and HasElementType with TypeManager implementation.
1249
1250 2008-02-08  Marek Safar  <marek.safar@gmail.com>
1251
1252         A fix for bugs #325134, #359749
1253         * expression.cs, ecore.cs: Try to resolve an extension method even if the
1254         first binds point to non-method member expression.
1255
1256 2008-02-08  Marek Safar  <marek.safar@gmail.com>
1257
1258         * cs-parser.jay: Null coalescing operator is not part of ISO-1.
1259
1260 2008-02-08  Marek Safar  <marek.safar@gmail.com>
1261
1262         A fix for bugs #321394, #323028
1263         * generic.cs, parameter.cs, ecore.cs, class.cs, decl.cs, delegate.cs:
1264         Reworked naive IsAccessibleAs implementation to handle nested types.
1265
1266 2008-02-05  Jb Evain  <jbevain@novell.com>
1267
1268         * class.cs: use generic type comparison for parameters
1269         as well.
1270
1271 2008-02-05  Marek Safar  <marek.safar@gmail.com>
1272
1273         A fix for bug #325372
1274         * class.cs: Use generic type comparison when testing method signatures.
1275
1276 2008-02-05  Marek Safar  <marek.safar@gmail.com>
1277
1278         A fix for bug #357047
1279         * ecore.cs: Applied C# 3.0 changes to better conversion.
1280
1281 2008-02-05  Marek Safar  <marek.safar@gmail.com>
1282
1283         A fix for bug #358374
1284         * cs-parser.jay: Correctly set modifiers for all constructor types.
1285
1286 2008-02-04  Marek Safar  <marek.safar@gmail.com>
1287
1288         A fix for bug #355251
1289         * generic.cs: Added base class constraint based type inference.
1290
1291 2008-02-01  Marek Safar  <marek.safar@gmail.com>
1292
1293         A fix for bug #357255
1294         * decl.cs: One more missing visibility check.
1295
1296 2008-02-01  Marek Safar  <marek.safar@gmail.com>
1297
1298         * support.cs: Fixed broken return.
1299
1300 2008-01-25  Marek Safar  <marek.safar@gmail.com>
1301
1302         * report.cs: Correctly reset warnings count after probing.
1303
1304 2008-01-25  Martin Baulig  <martin@ximian.com>
1305
1306         * namespace.cs
1307         (NamespaceEntry.SymbolFileID): Make this work again after
1308         MemberName.ToString() is gone.
1309
1310 2008-01-25  Marek Safar  <marek.safar@gmail.com>
1311
1312         * expression.cs: Implemented Divide, Equal, ExclusiveOr, GreaterThanOrEqual
1313         expressions.
1314
1315 2008-01-25  Marek Safar  <marek.safar@gmail.com>
1316
1317         * generic.cs: Use full implicit conversion for type inference fixing.
1318
1319 2008-01-24  Marek Safar  <marek.safar@gmail.com>
1320
1321         * ecore.cs, expression.cs, generic.cs: Implemented Convert, ConvertChecked.
1322         Fixed user operator conversions.
1323
1324 2008-01-24  Marek Safar  <marek.safar@gmail.com>
1325
1326         * generic.cs: Do nullable type to null comparison optimization during
1327         resolve phase.
1328
1329 2008-01-24  Marek Safar  <marek.safar@gmail.com>
1330
1331         A fix for bug #355163
1332         * generic.cs: Enabled l-value resolve on nullable expressions.
1333
1334 2008-01-24  Marek Safar  <marek.safar@gmail.com>
1335
1336         A fix for bug #353986
1337         * class.cs: Ingore static ctors with parameters for any further checks.
1338
1339 2008-01-24  Marek Safar  <marek.safar@gmail.com>
1340
1341         A fix for bug #354310
1342         * namespace.cs: Removed redundant check.
1343
1344 2008-01-24  Marek Safar  <marek.safar@gmail.com>
1345
1346         A fix for bug #354928
1347         * expression.cs: ElementInitializers can be resolved only once.
1348
1349 2008-01-24  Marek Safar  <marek.safar@gmail.com>
1350
1351         * convert.cs, ecore.cs, expression.cs, generic.cs: Implemented Coalesce and
1352         Condition expressions.
1353
1354 2008-01-23  Marek Safar  <marek.safar@gmail.com>
1355
1356         * codegen.cs: Fixed AssemblyBuilder initialization on other platforms.
1357
1358 2008-01-22  Marek Safar  <marek.safar@gmail.com>
1359
1360         * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool conversion is
1361         not allowed.
1362
1363         * generic.cs: Implemented coalesce expression.
1364
1365 2008-01-22  Marek Safar  <marek.safar@gmail.com>
1366
1367         A fix for bug #355145
1368         * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
1369         expression tree type inference.
1370
1371 2008-01-22  Raja R Harinath  <harinath@hurrynot.org>
1372
1373         Fix #354663
1374         * expression.cs (Binary.IsUnsignedType): Fix typo.
1375
1376 2008-01-22  Marek Safar  <marek.safar@gmail.com>
1377
1378         * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit expression.
1379
1380 2008-01-22  Marek Safar  <marek.safar@gmail.com>
1381
1382         A fix for bug #355161
1383         * ecore.cs, expression.cs: Wider range of extension method supported
1384         expressions.
1385
1386 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
1387
1388         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
1389         AssemblyBuilder to operate in compiler context. Fixes mcs part of
1390         bug #354970.
1391
1392 2008-01-22  Marek Safar  <marek.safar@gmail.com>
1393
1394         A fix for bug #355148
1395         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
1396
1397 2008-01-22  Miguel de Icaza  <miguel@novell.com>
1398
1399         * expression.cs (CreateExpressionTree): Add support for or and
1400         logical or, and indent following the coding conventions.
1401
1402         * typemanager.cs (LinqExpression): renamed from
1403         ExpressionTreeManager, for a shorter name.
1404
1405         Use TypeManager.CoreLookupType to lookup types from our core
1406         assemblies and turn those into "Type" variables.
1407
1408         Consumers that previously used "Namespace" and "Type" from this
1409         class should instead use the TypeExpression which is a type that
1410         is fully resolved (without involving the regular C# resolution
1411         rules). 
1412
1413         This typically looks like this:
1414
1415         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
1416         new MemberAccess (texpr, name, type_arguments, loc)
1417
1418         This avoids the problem in: #355178
1419
1420 2008-01-21  Marek Safar  <marek.safar@gmail.com>
1421
1422         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
1423         feature in parser only as we do in other cases.
1424         
1425 2008-01-21  Marek Safar  <marek.safar@gmail.com>
1426
1427         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
1428         typemanager.cs: A refactoring of params arguments to reuse existing
1429         expressions (params -> array initializer) to emit params argument instead
1430         of specialized handling.
1431         It was required by expression tree implementation and it has other benefits
1432         as well, we now apply same optimization for params arguments as we do for
1433         array initializers.
1434         
1435 2008-01-18  Marek Safar  <marek.safar@gmail.com>
1436
1437         A fix for bug #353526
1438         * generic.cs: A type inference of params arguments may not required any
1439         temporary array creation.
1440         
1441 2008-01-18  Marek Safar  <marek.safar@gmail.com>
1442
1443         A fix for bug #353534
1444         * generic.cs, ecore.cs, expression.cs: A method group type inference is
1445         supported for delegates only.
1446         
1447 2008-01-18  Marek Safar  <marek.safar@gmail.com>
1448
1449         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
1450         type for more than 1 candidates.
1451         
1452 2008-01-18  Marek Safar  <marek.safar@gmail.com>
1453
1454         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
1455         expressions.
1456         
1457 2008-01-16  Marek Safar  <marek.safar@gmail.com>
1458
1459         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
1460         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
1461         operator) expressions. 
1462                 
1463 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
1464
1465         * statement.cs: Avoid declaring an IL variable for this_variable since it is
1466         not accessed from the generated IL.
1467
1468 2008-01-14  Marek Safar  <marek.safar@gmail.com>
1469
1470         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
1471         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
1472         statement.cs: The first expression tree implementation drop, mostly
1473         infrastructure work.
1474
1475 2008-01-14  Marek Safar  <marek.safar@gmail.com>
1476
1477         * ecore.cs (IsNestedChild): Refactored.
1478
1479 2008-01-11  Marek Safar  <marek.safar@gmail.com>
1480
1481         * lambda.cs: Don't use a cast on unknown expression statement.
1482
1483 2008-01-10  Geoff Norton  <gnorton@novell.com>
1484
1485         * cs-tokenizer.cs: One more token to distinguish between method and lambda
1486         arguments
1487
1488 2008-01-09  Marek Safar  <marek.safar@gmail.com>
1489
1490         * doc.cs: Report better /doc crash details.
1491         
1492 2008-01-09  Marek Safar  <marek.safar@gmail.com>
1493
1494         A fix for bug #352536
1495         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
1496
1497 2008-01-08  Marek Safar  <marek.safar@gmail.com>
1498
1499         A fix for bug #352287
1500         * ecore.cs, expression.cs: Do `this' access checking in all member access
1501         expressions.
1502         
1503 2008-01-08  Marek Safar  <marek.safar@gmail.com>
1504
1505         * rootcontext.cs, driver.cs: Switch to linq mode by default.
1506         
1507         * report.cs: Reset message stacks.
1508         
1509 2008-01-08  Marek Safar  <marek.safar@gmail.com>
1510
1511         * generic.cs (InferInPhases): Correctly calculate params position.
1512         
1513 2008-01-08  Marek Safar  <marek.safar@gmail.com>
1514
1515         * cs-tokenizer.cs: No need to parse full string when parsing lambda
1516         arguments.
1517
1518 2008-01-07  Marek Safar  <marek.safar@gmail.com>
1519
1520         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
1521         
1522         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
1523         
1524         * driver.cs: Updated --help option.
1525         
1526 2008-01-07  Marek Safar  <marek.safar@gmail.com>
1527
1528         * generic.cs (InferParamsTypeArguments): Removed.
1529         (InferInPhases): Add params type inference.
1530         (LowerBoundInference): Fixed scoring mechanism.
1531         
1532         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
1533         
1534 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
1535
1536         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
1537         byte array for unsigned "baked" assemblies.
1538
1539 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
1540
1541         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
1542         array for assemblies that are not strongnamed.
1543
1544 2008-01-04  Marek Safar  <marek.safar@gmail.com>
1545
1546         A fix for bug #351481
1547         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
1548         declaring type for nested generic types.
1549         
1550 2008-01-04  Marek Safar  <marek.safar@gmail.com>
1551
1552         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
1553         instead of ToString.
1554         
1555 2008-01-03  Marek Safar  <marek.safar@gmail.com>
1556
1557         A fix for bug #351047
1558         * expression.cs (Binary.ResolveOperator): Allow equality operators between
1559         null and structs only when equality and inequality operators are defined
1560         either as an user-operators or predefined operators.
1561         
1562 2008-01-03  Marek Safar  <marek.safar@gmail.com>
1563
1564         A fix for bug #351047
1565         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
1566         
1567 2008-01-03  Marek Safar  <marek.safar@gmail.com>
1568
1569         A fix for bug #351257
1570         * cs-tokenizer.cs: Advance line number for '\r' correctly.
1571         
1572 2008-01-03  Marek Safar  <marek.safar@gmail.com>
1573
1574         A fix for bug #351157
1575         * class.cs (Using): Fixed yet another broken cloning.
1576         
1577         (Block): Put back more sensible default value for statements.
1578         
1579 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
1580
1581         * codegen.cs: Allow AssemblyVersion with only major version component.
1582         Fixes bug #351055.
1583
1584 2007-12-29  Marek Safar  <marek.safar@gmail.com>
1585
1586         A fix for bug #324654
1587         * class.cs: Use FullName property as member name.
1588
1589 2007-12-28  Marek Safar  <marek.safar@gmail.com>
1590
1591         A fix for bug #342117
1592         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
1593         constructor constraint.
1594
1595 2007-12-28  Marek Safar  <marek.safar@gmail.com>
1596
1597         A fix for bug #338273
1598         * class.cs (ProbertyBase): Access modifier checks are required for overrides
1599         only.
1600
1601 2007-12-28  Marek Safar  <marek.safar@gmail.com>
1602
1603         A fix for bug #350839
1604         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
1605
1606 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
1607
1608         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
1609         GHOP:
1610         
1611         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
1612
1613         * statement.cs: Changed some Hashtables to use HybridDictionaries
1614         instead. It was observed that some HashTables only contained a few
1615         items in the vast majority of cases. Since HybridDictionary is
1616         more efficient on small sets (<10 elements), "known_variables"
1617         from class ExplicitBlock as well as "labels" and "constants " from
1618         class Block were changed to HybridDictionaries. 
1619
1620         Atsai results: (56216kb->54987kb)
1621
1622         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
1623
1624
1625 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
1626
1627         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
1628         GHOP:
1629         
1630         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
1631         
1632         * expression.cs: foreach loop to for loop, saved on allocation of
1633         enumerator (59333kb->59141kb)
1634
1635         * statement.cs. Changed foreach loops to for loops, saved on
1636         allocation of enumerator (59141kb->59006kb)
1637
1638         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
1639         when constructed with no specified capacity. This was causing a
1640         few ArrayLists to allocate more memory than they would potentially
1641         need in the Block class and MemberCache class. Setting the
1642         ArrayLists to construct with a capacity of 1 saves some
1643         memory. (56216kb->55585kb)
1644
1645 2007-12-27  Marek Safar  <marek.safar@gmail.com>
1646
1647         A fix for bug #347189 (2nd issue)
1648         * expression.cs (MemberAccess): Nested type can be found in base non-generic
1649         type.
1650
1651 2007-12-27  Miguel de Icaza  <miguel@novell.com>
1652         
1653         * report.cs: Do not use colors if stdout and stderr are not a
1654         terminal.
1655
1656 2007-12-27  Marek Safar  <marek.safar@gmail.com>
1657
1658         A fix for bug #346998
1659         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
1660         overloads.
1661
1662 2007-12-27  Marek Safar  <marek.safar@gmail.com>
1663
1664         A fix for bug #343465
1665         * class.cs: Explicit method name for nested types uses dots only.
1666
1667 2007-12-27  Marek Safar  <marek.safar@gmail.com>
1668
1669         A fix for bug #343707
1670         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
1671
1672 2007-12-27  Marek Safar  <marek.safar@gmail.com>
1673
1674         * ecore.cs: Report type inference errors only when arguments count matches
1675         parameter count.
1676         
1677         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
1678         
1679         * expression.cs, report.cs: New warning.
1680         
1681         * typemanager.cs: Catch anonymous method type too.
1682
1683 2007-12-23  Marek Safar  <marek.safar@gmail.com>
1684
1685         A fix for bug #346379
1686         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
1687
1688 2007-12-23  Marek Safar  <marek.safar@gmail.com>
1689
1690         A fix for bug #347359
1691         * expression.cs (Invocation): Don't resolve already resolved expression.
1692
1693 2007-12-23  Marek Safar  <marek.safar@gmail.com>
1694
1695         A fix for bug #347189
1696         * class.cs (FixedField): Use non-dependent code only in the define phase.
1697
1698 2007-12-23  Marek Safar  <marek.safar@gmail.com>
1699
1700         A fix for bug #348076
1701         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
1702
1703 2007-12-22  Marek Safar  <marek.safar@gmail.com>
1704
1705         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
1706         discovered extension methods.
1707
1708 2007-12-22  Marek Safar  <marek.safar@gmail.com>
1709
1710         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
1711         method.
1712
1713 2007-12-21  Miguel de Icaza  <miguel@novell.com>
1714
1715         * report.cs (ErrorMessage): Add support for using colors on
1716         terminals that support it. 
1717
1718 2007-12-21  Marek Safar  <marek.safar@gmail.com>
1719
1720         * ecore.cs: Use information about expanded params for error reporting.
1721
1722 2007-12-21  Marek Safar  <marek.safar@gmail.com>
1723
1724         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
1725         and logic for params overloads.
1726         
1727 2007-12-15  Miguel de Icaza  <miguel@novell.com>
1728
1729         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
1730         as this is also created from the parser.  Fixes #349034
1731
1732 2007-12-12  Miguel de Icaza  <miguel@novell.com>
1733
1734         * statement.cs (Throw.CloneTo): it is valid to have empty
1735         expressions for throw. 
1736
1737 2007-12-03  Marek Safar  <marek.safar@gmail.com>
1738
1739         * cs-parser.jay: Set delegate constraint parsing region correctly.
1740
1741 2007-12-03  Marek Safar  <marek.safar@gmail.com>
1742
1743         A fix for bug #345467
1744         * typemanager.cs (IsEqual): Compare generic parameters position only.
1745         
1746 2007-11-28  Marek Safar  <marek.safar@gmail.com>
1747
1748         * expression.cs (BaseAccess): Type arguments can be null.
1749
1750 2007-11-27  Raja R Harinath  <harinath@gmail.com>
1751
1752         * statement.cs (Block.Resolve): Ensure flow-branching tree is
1753         consistent even when an error has occured.
1754         (Switch.Resolve): Likewise.
1755
1756 2007-11-22  Marek Safar  <marek.safar@gmail.com>
1757
1758         A fix for bug #334505
1759         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
1760         overrides.
1761         
1762 2007-11-22  Marek Safar  <marek.safar@gmail.com>
1763
1764         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
1765         refactorings required to resolve extension methods correctly when mixing
1766         generics and non-generics members.
1767         
1768 2007-11-20  Marek Safar  <marek.safar@gmail.com>
1769
1770         A fix for bug #342584
1771         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
1772         conversion.
1773         
1774 2007-11-19  Marek Safar  <marek.safar@gmail.com>
1775
1776         A fix for bug #342512
1777         * delegate.cs: Use delegate argument expression when is available. Don't
1778         emit virtual call when class is sealed.
1779         
1780 2007-11-16  Marek Safar  <marek.safar@gmail.com>
1781
1782         A fix for bug #325423
1783         * assign.cs (FieldInitializer): Use resolved expression for emit.
1784         
1785         * class.cs: Print less confusing error message.
1786         
1787 2007-11-16  Marek Safar  <marek.safar@gmail.com>
1788
1789         * cs-tokenizer.cs: Removed GMCS ifdefs.
1790         
1791         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
1792         mcs.
1793         
1794         * cs-parser.jay: Disabled nullable check.
1795         
1796         * generic-mcs: Copied more generic stuff.
1797                 
1798 2007-11-16  Marek Safar  <marek.safar@gmail.com>
1799
1800         * gcs-parser.jay: Merged to cs-parser.jay.
1801         
1802         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
1803         * *.csproj, *.sources: Updated to use only jay parser file.
1804
1805 2007-11-16  Marek Safar  <marek.safar@gmail.com>
1806
1807         * gcs-parser.jay: Added nullable and default expression feature checks.
1808         
1809 2007-11-16  Marek Safar  <marek.safar@gmail.com>
1810
1811         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
1812         it fixes many TODOs and hidden bugs.
1813         
1814         * expression: Removed duplicate error check.
1815
1816 2007-11-15  Marek Safar  <marek.safar@gmail.com>
1817
1818         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
1819         implicitly type local variable only when it is used in a declaration.
1820
1821 2007-11-15  Marek Safar  <marek.safar@gmail.com>
1822
1823         * attribute.cs: Use CS0612 for empty strings.
1824
1825 2007-11-14  Marek Safar  <marek.safar@gmail.com>
1826
1827         * lambda.cs, statement.cs: Contextual return may act as a statement.
1828
1829 2007-11-14  Marek Safar  <marek.safar@gmail.com>
1830
1831         A fix for a regression cause by #324222
1832         * class.cs: Don't report unused even when it implements an interface.
1833         
1834 2007-11-13  Marek Safar  <marek.safar@gmail.com>
1835
1836         A fix for bug #341205
1837         * ecore.cs, expression.cs: Method group expression cannot do static
1838         method access with an instance reference check before overloading takes
1839         a place.
1840         
1841 2007-11-13  Marek Safar  <marek.safar@gmail.com>
1842
1843         A fix for bug #325359
1844         * class.cs: Use predictable name for automatically generated property.
1845         
1846 2007-11-12  Marek Safar  <marek.safar@gmail.com>
1847
1848         A fix for bug #324996
1849         * expression.cs (Is): Handle case where D is nullable and T is not
1850         correctly.
1851         
1852         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
1853         
1854 2007-11-12  Marek Safar  <marek.safar@gmail.com>
1855
1856         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
1857         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
1858         Flush small error reporting changes.
1859         
1860 2007-11-09  Marek Safar  <marek.safar@gmail.com>
1861
1862         A fix for bug #324996
1863         * expression.cs: Rewrote Is expression implementation to work with
1864         generics, nullable types, anonymous method. A const result expression 
1865         uses existing infrastructure instead of custom not fully-featured one.
1866         
1867 2007-11-08  Marek Safar  <marek.safar@gmail.com>
1868
1869         A fix for bug #340202
1870         * class.cs: Consider generics for volatile field.
1871
1872 2007-11-08  Marek Safar  <marek.safar@gmail.com>
1873
1874         A fix for bug #335594
1875         * expression.cs: Use conversion rules when handling string addition.
1876         
1877 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1878
1879         A fix for bug #336651
1880         * expression.cs: Fixed a crash when probing is on.
1881         
1882 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1883
1884         A fix for bug #324242
1885         * covert.cs: Added a conversion from any nullable-type with an 
1886         underlying enum-type to the type System.Enum.
1887         
1888 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1889
1890         A fix for bug #324222
1891         * class.cs: Report all non-used event fields.
1892         
1893 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1894
1895         A fix for bug #325161
1896         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
1897         qualifier for generic types.
1898         
1899 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1900
1901         A fix for bug #322971
1902         * expression.cs, ecore.cs: Added intermediate result value check for
1903         indexers. 
1904         
1905 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1906
1907         A fix for bug #324754
1908         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
1909         when it was requested.
1910
1911 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1912
1913         A fix for bug #325101
1914         * expression.cs: Do type not value comparison for `is' expression.
1915
1916 2007-11-07  Marek Safar  <marek.safar@gmail.com>
1917
1918         A fix for bug #320236
1919         * convert.cs: Don't apply user conversion on underlying target type.
1920
1921 2007-11-06  Marek Safar  <marek.safar@gmail.com>
1922
1923         * expression.cs: Don't use unresolved expression for error reporting.
1924  
1925 2007-11-06  Marek Safar  <marek.safar@gmail.com>
1926
1927         A fix for bugs #337712, #324490
1928         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
1929         overloading resolution too.
1930         
1931         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
1932         the process consistent and more robust.
1933         
1934         * expression.cs, linq.cs, report.cs: Update.
1935
1936 2007-11-02  Marek Safar  <marek.safar@gmail.com>
1937
1938         A fix for bug #332909
1939         * attribute.cs: Resolve attributes in correct context using error
1940         handling procedure.
1941         
1942         * rootcontext.cs: Define Obsolete attribute members as core members.
1943         
1944 2007-11-02  Marek Safar  <marek.safar@gmail.com>
1945
1946         * statement.cs: Removed unused methods.
1947         
1948 2007-10-31  Wade Berrier  <wberrier@novell.com>
1949
1950         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
1951         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
1952         during 'make dist')
1953
1954 2007-10-31  Marek Safar  <marek.safar@gmail.com>
1955
1956         A fix for bug #338102
1957         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
1958         methods registered as non-generics.
1959         
1960 2007-10-31  Marek Safar  <marek.safar@gmail.com>
1961
1962         A fix for bugs #337712, #324490
1963         * delegate.cs: Delegate covariance and contravariance is not allowed for
1964         value types.
1965         
1966 2007-10-31  Marek Safar  <marek.safar@gmail.com>
1967
1968         A fix for bug #337719 
1969         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
1970         `from' keyword.
1971         
1972 2007-10-30  Marek Safar  <marek.safar@gmail.com>
1973  
1974         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
1975
1976 2007-10-29  Marek Safar  <marek.safar@gmail.com>
1977  
1978         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
1979         query expressions.
1980
1981 2007-10-29  Raja R Harinath  <rharinath@novell.com>
1982
1983         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
1984
1985 2007-10-29  Marek Safar  <marek.safar@gmail.com>
1986  
1987         A fix for bug #334652
1988         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
1989         extension methods when we have not found the best candidate in normal
1990         container.
1991
1992 2007-10-27  Marek Safar  <marek.safar@gmail.com>
1993
1994         * AssemblyInfo.cs: Keep up-to-date.
1995
1996 2007-10-27  Marek Safar  <marek.safar@gmail.com>
1997
1998         * Makefile: Fixed generics compiler name.
1999         
2000 2007-10-27  Marek Safar  <marek.safar@gmail.com>
2001
2002         * lambda.test: removed, lambda parsing is done differently.
2003         
2004         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
2005
2006 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
2007
2008         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
2009
2010 2007-10-27  Marek Safar  <marek.safar@gmail.com>
2011
2012         * Makefile, *.sources : All C# compilers are in mcs folder.
2013         
2014         * *.cs: Use existing 2_1 define for smcs.
2015
2016 2007-10-26  Marek Safar  <marek.safar@gmail.com>
2017
2018         A fix for bug #335847
2019         * assign.cs, expression.cs: Couple of changes to avoid creating a
2020         temporary variable for each object initializer assignment statement. It
2021         simplifies struct initialization too, otherwise two temporary variables
2022         would be required.
2023         Implemented optimization of redundant default element initializers.
2024         
2025 2007-10-25  Marek Safar  <marek.safar@gmail.com>
2026
2027         A fix for bug #336766
2028         * expression.cs (Class.CheckBase): Use generic name when method is
2029         generic.
2030         
2031 2007-10-25  Marek Safar  <marek.safar@gmail.com>
2032
2033         A fix for bug #334737
2034         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
2035         variable and not variable argument for prepared copies.
2036
2037 2007-10-24  Marek Safar  <marek.safar@gmail.com>
2038
2039         A fix for bug #325110
2040         * class.cs, expression.cs, attribute.cs: Use open generic method when
2041         checking conditional attribute.
2042         
2043 2007-10-24  Marek Safar  <marek.safar@gmail.com>
2044
2045         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
2046         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
2047         FeatureIsNotAvailable.
2048
2049 2007-10-24  Marek Safar  <marek.safar@gmail.com>
2050
2051         ** C# 3.0 Partial methods
2052         
2053         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
2054         methods support. Because of member cache issue with generics only
2055         non-generics partial methods are fully supported.
2056         
2057 2007-10-23  Marek Safar  <marek.safar@gmail.com>
2058         
2059         * class.cs, decl.cs: Rewrote member overloads check to cope with 
2060         generics and to use member cache for member checking. It also improves
2061         performance and fixes remaining overloads issues.
2062         
2063 2007-10-20  Marek Safar  <marek.safar@gmail.com>
2064         
2065         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
2066         roottypes.cs, typemanager.cs:
2067                 
2068         A member cache creation logic changed to add members immediately and
2069         not rely on fallback. The member cache is now only prefered way
2070         how to access and find type declaration members. It saves 5 MB of memory
2071         during MWF compilation and makes code ready for more optimizations and
2072         clean-ups, it's also a pre-requirement for partial methods.
2073         
2074 2007-10-18  Raja R Harinath  <harinath@gmail.com>
2075
2076         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
2077         handling for generic parameters.
2078
2079 2007-10-15  Marek Safar  <marek.safar@gmail.com>
2080         
2081         * class.cs (FixedField): Removed redundant volatile check.
2082         
2083 2007-10-15  Marek Safar  <marek.safar@gmail.com>
2084         
2085         * class.cs, decl.cs: Fixed overload members verification to do only one
2086         check per possible collision.
2087         
2088 2007-10-13  Marek Safar  <marek.safar@gmail.com>
2089         
2090         A fix for bug #325478
2091         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
2092         and create only one disposable flags container.
2093         
2094 2007-10-12  Marek Safar  <marek.safar@gmail.com>
2095         
2096         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
2097         * statement.cs (Fixed): Fixed variables cloning.
2098         
2099 2007-10-12  Marek Safar  <marek.safar@gmail.com>
2100         
2101         A fix for bug #333342
2102         * class.cs (EventField): Don't mark value type event as synchronized. 
2103         
2104 2007-10-12  Marek Safar  <marek.safar@gmail.com>
2105         
2106         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
2107         inference to identify best candidate method correctly.
2108         (ProperyExpr): A range variable is read only and cannot be modified.
2109         
2110 2007-10-11  Marek Safar  <marek.safar@gmail.com>
2111         
2112         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
2113         logic to identify best candidate method correctly.
2114         
2115 2007-10-11  Marek Safar  <marek.safar@gmail.com>
2116         
2117         * location.cs (Equals, GetHashCode): Removed.
2118         
2119 2007-10-11  Marek Safar  <marek.safar@gmail.com>
2120         
2121         * report.cs: Implemented message recorder. It is used mainly for lambda
2122         expressions to capture otherwise swallowed error messages.
2123         
2124         * anonymous.cs, lambda.cs.cs: Do full parameters check.
2125
2126         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
2127         and not at the top.
2128         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
2129                 
2130         * expression.cs (MemberAccess): Always report lookup failure.
2131         
2132         * location.cs: Implemented Equals, GetHashCode.
2133         
2134         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
2135         
2136 2007-10-10  Jb Evain  <jbevain@novell.com>
2137
2138         * codegen.cs: re-enable assembly version check.
2139
2140 2007-10-09  Marek Safar  <marek.safar@gmail.com>
2141         
2142         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
2143         checks.
2144         
2145         * namespace.cs (UsingAlias): Do correct version check.
2146         
2147 2007-10-08  Marek Safar  <marek.safar@gmail.com>
2148         
2149         * expresison.cs, ecore.cs: Issue extension method error message when
2150         appropriate.
2151         
2152         * rootcontext.cs: Added ISO_2 compiler mode option.
2153
2154 2007-10-08  Marek Safar  <marek.safar@gmail.com>
2155         
2156         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
2157          message.
2158         
2159 2007-10-08  Marek Safar  <marek.safar@gmail.com>
2160         
2161         * attribute.cs (GetString, GetBoolean): Work with both literal and
2162         constant.
2163         
2164         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
2165         Moved method overload specific methods to MethodGroupExpr.
2166         
2167         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
2168         it should be less memory consuming.
2169         
2170 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
2171
2172         * codegen.cs: remove the assembly version check until the buildbot is
2173         fixed.
2174
2175 2007-10-07  Jb Evain  <jbevain@novell.com>
2176
2177         * attribute.cs (Attribute.GetString): if the value
2178         expression is a StringConstant, return its string value.
2179
2180 2007-10-07  Jb Evain  <jbevain@novell.com>
2181
2182         * typemanager.cs: add `assembly_version_attribute_type`.
2183         * codegen.cs: on attribute emission, check that the
2184         AssemblyVersionAttribute doesn't overflow.
2185
2186 2007-10-05  Marek Safar  <marek.safar@gmail.com>
2187         
2188         A fix for bug #324677
2189         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
2190         parent container of a scope container with currently resolved one. 
2191         
2192 2007-10-05  Marek Safar  <marek.safar@gmail.com>
2193         
2194         A fix for bug #325534
2195         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
2196         only.
2197         
2198 2007-10-05  Marek Safar  <marek.safar@gmail.com>
2199         
2200         A fix for bug #327504
2201         * class.cs (Operator.Define): Refactored implicit and explicit user
2202         operator conversion rules.
2203         
2204 2007-10-05  Marek Safar  <marek.safar@gmail.com>
2205         
2206         A fix for bug #327520
2207         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
2208         
2209 2007-10-04  Marek Safar  <marek.safar@gmail.com>
2210         
2211         A fix for bug #328022
2212         * class.cs (MethodData.Define): Use correct method to check whether
2213         a method implementents an accessor.
2214         
2215 2007-10-04  Marek Safar  <marek.safar@gmail.com>
2216         
2217         A fix for bug #330069
2218         * statement.cs (Fixed.Resolve): Read the first array element only when
2219         an array is instantiated. 
2220         
2221 2007-10-04  Marek Safar  <marek.safar@gmail.com>
2222         
2223         * expression.cs, assign.cs, generics.cs: Print correct operator when
2224         compound assignment is used.
2225         
2226 2007-10-04  Marek Safar  <marek.safar@gmail.com>
2227         
2228         A fix for bug #325841
2229         * expression.cs (ArrayAccess): Use full argument cloning only for
2230         string compound concatenation.
2231         
2232 2007-10-03  Marek Safar  <marek.safar@gmail.com>
2233         
2234         A fix for bug #328774
2235         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
2236         assignment.
2237         (PropertyExpr.EmitAssign): Fixed string concatenation compound
2238         assignment.
2239
2240 2007-10-03  Raja R Harinath  <rharinath@novell.com>
2241
2242         Fix #328490
2243         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
2244         Event accessibility checks here.  Remove some bogus code that
2245         accidently made GenericMethods work.
2246         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
2247
2248 2007-09-25  Marek Safar  <marek.safar@gmail.com>
2249         
2250         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
2251         
2252         * statement.cs (Block): Refactored AddVariable to allow error handling
2253         customization.
2254         
2255         * generic.cs: New stub.
2256         
2257 2007-09-23  Marek Safar  <marek.safar@gmail.com>
2258         
2259         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
2260         flag.
2261         
2262 2007-09-17  Marek Safar  <marek.safar@gmail.com>
2263
2264         * class.cs: Use partial container to record whether any partial part
2265         contains static field initializer and therefore default contructor has
2266         to be defined.
2267         
2268 2007-09-14  Marek Safar  <marek.safar@gmail.com>
2269
2270         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
2271         mono-list when only one of two partial parts has defined accessibility
2272         modifier.
2273         
2274 2007-09-14  Marek Safar  <marek.safar@gmail.com>
2275
2276         A fix for bug #82845
2277         
2278         * class.cs (TypeContainer): Set correct resolve context for all field
2279         initializers.
2280         
2281 2007-09-13  Marek Safar  <marek.safar@gmail.com>
2282
2283         * assign.cs: Fixed a crash when field is resolved twice with an error.
2284         
2285         * codegen.cs: Changed InFieldInitializer to be flag.
2286         
2287         * anonymous.cs, ecore.cs, expression.cs: Update after
2288         IsInFieldInitializer rename.
2289         
2290         * const.cs: Removed unused parameter.
2291         
2292         * class.cs: Changed the way how we resolve and emit field initializers.
2293         The field initilizers have to have access to contructor block to emit
2294         compiler generated code.
2295
2296 2007-09-13  Marek Safar  <marek.safar@gmail.com>
2297
2298         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
2299         generics use TypeContainer instead.
2300         
2301 2007-09-12  Marek Safar  <marek.safar@gmail.com>
2302         
2303         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
2304
2305         * lambda.cs (ResolveParameters): Use more powerful
2306         InflateGenericArgument.
2307         
2308         * parameters.cs: Better exception message.
2309                 
2310 2007-09-10  Marek Safar  <marek.safar@gmail.com>
2311
2312         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
2313         correct expression block type. 
2314         
2315         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
2316         
2317         * expression.cs (Invocation): Extracted method group resolve to
2318         DoResolveOverload.
2319         
2320 2007-09-07  Marek Safar  <marek.safar@gmail.com>
2321
2322         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
2323         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
2324         
2325         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
2326         generic extension methods.
2327
2328 2007-09-06  Marek Safar  <marek.safar@gmail.com>
2329
2330         A fix for bug #82676 (Do I get it right now?)
2331         * convert.cs (Binary.ResolveOperator): An interface is converted to the
2332         object before a standard conversion is applied.
2333         
2334 2007-09-06  Marek Safar  <marek.safar@gmail.com>
2335
2336         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
2337         #82676.
2338         
2339 2007-09-05  Marek Safar  <marek.safar@gmail.com>
2340
2341         A fix for bug #82676
2342         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
2343         non-generic interface types.
2344         
2345 2007-09-05  Marek Safar  <marek.safar@gmail.com>
2346
2347         A fix for bug #82690
2348         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
2349         
2350 2007-09-05  Marek Safar  <marek.safar@gmail.com>
2351
2352         A fix for bug #82571
2353         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
2354         modifier for container based methods.
2355         
2356 2007-09-05  Marek Safar  <marek.safar@gmail.com>
2357
2358         A fix for bug #82676
2359         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
2360         any interface-type T means to any of interface type T.
2361
2362 2007-09-04  Marek Safar  <marek.safar@gmail.com>
2363
2364         * namespace.cs: We have 2 versions of System.Core assembly.
2365
2366 2007-09-04  Marek Safar  <marek.safar@gmail.com>
2367
2368         A fix for bug #82652
2369         * class.cs (Class.GetClassBases): Compare types and not expressions.
2370
2371 2007-09-04  Marek Safar  <marek.safar@gmail.com>
2372
2373         A fix for bug #82620
2374         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
2375         actually never worked before.
2376         (IndexerAccess): Emit prepared arguments before they are modified.
2377         
2378 2007-09-04  Marek Safar  <marek.safar@gmail.com>
2379
2380         A fix for bug #82563
2381         * assign.cs: Revert wrong fix.
2382         
2383         * expression.cs (VariableReference.EmitAssign): Handle ref reference
2384         correctly.
2385         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
2386         Instead of ldelema/stdind we have to use temporary variables to handle
2387         cases like String.Concat (params string[]).
2388         
2389 2007-08-31  Marek Safar  <marek.safar@gmail.com>
2390
2391         * class.cs: EmitAttributes to Emit rename.
2392         
2393         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
2394         null.
2395         (MemberCore.HasClsCompliantAttribute): Don't depend on 
2396         GetClsCompliantAttributeValue execution.
2397         
2398 2007-08-31  Marek Safar  <marek.safar@gmail.com>
2399
2400         * anonymous.cs: Use shorter type prefix.
2401         
2402         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
2403         when exist.
2404         
2405         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
2406         variables when probing is on.
2407         
2408         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
2409         unresolved variables.
2410         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
2411         handle transparent identifiers.
2412         
2413 2007-08-26  Marek Safar  <marek.safar@gmail.com>
2414
2415         * attribute.cs (IsClsCompliant): Add nullable types test.
2416         
2417 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
2418
2419         * doc.cs : catch other types of exception than XmlException to
2420           report CS1570. Fixed bug #82565.
2421
2422 2007-08-23  Marek Safar  <marek.safar@gmail.com>
2423
2424         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
2425         The number of delegate parameters has to match.
2426         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
2427         arrays.
2428
2429 2007-08-21  Marek Safar  <marek.safar@gmail.com>
2430
2431         * anonymous.cs (AnonymousMethod): Generate private anonymous method
2432         to fix problem with private arguments.
2433
2434 2007-08-20  Marek Safar  <marek.safar@gmail.com>
2435
2436         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
2437         
2438         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
2439         
2440         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
2441         empty. Add cloning suport.
2442         
2443         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
2444
2445 2007-08-20  Marek Safar  <marek.safar@gmail.com>
2446
2447         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
2448         to create EmptyCast. It handles EmptyConstantCast specialization for
2449         constants.
2450         
2451 2007-08-18  Marek Safar  <marek.safar@gmail.com>
2452
2453         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
2454         (EmitArrayArgument): One routine for array arguments.
2455         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
2456         
2457 2007-08-17  Marek Safar  <marek.safar@gmail.com>
2458
2459         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
2460
2461 2007-08-17  Marek Safar  <marek.safar@gmail.com>
2462
2463         * anonymous.cs: MemberLookupFinal update.
2464
2465         * class.cs (ConstructorInitializer): Is expression based.
2466         
2467         * delegate.cs: MethodGroupExpr update.
2468         
2469         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
2470         messages.
2471         (Error_MemberLookupFailed): Customizable error override.
2472         (MethodGroupExpr): Keep queried type for later usage.
2473         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
2474         resolve.
2475         
2476         * expression.cs: Error_MemberLookupFailed refactoring.
2477         (New.DoResolve): Resolve as much as possible.
2478         (ElementInitializer.Error_MemberLookupFailed): Object initializer
2479         customization for invalid member types.
2480
2481         * statement.cs: MethodGroupExpr update.
2482         
2483 2007-08-16  Marek Safar  <marek.safar@gmail.com>
2484
2485         * modifier.cs (Check): Check all modifiers and not only accessibility
2486         ones.
2487
2488 2007-08-16  Marek Safar  <marek.safar@gmail.com>
2489
2490         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
2491         type and not an expression.
2492
2493 2007-08-16  Marek Safar  <marek.safar@gmail.com>
2494
2495         * statement.cs (Catch.Clone): Type and variable can be null.
2496
2497 2007-08-16  Marek Safar  <marek.safar@gmail.com>
2498
2499         A fix for bug #81979
2500         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
2501         I am really not sure whether this is the best fix.
2502         
2503         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
2504         only once.
2505         
2506 2007-08-14  Marek Safar  <marek.safar@gmail.com>
2507
2508         ** C# 3.0 Object and collection initializers (major re-write)
2509         
2510         * assign.cs (DoResolve): Initializers are not assign related.
2511         
2512         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
2513         used during collection or object initialization.
2514         
2515         * expression.cs (Error_InvalidArguments): Add initializers specific
2516         messages. More will come later because it requires some general
2517         refactoring.
2518         (New.DoResolve): Better error handling for unsafe types.
2519         (EmptyExpressionStatement): New class.
2520         (ElementInitializer): An object initializer expression.
2521         (CollectionElementInitializer): A collection initializer expression.
2522         (CollectionOrObjectInitializers): A block of object or collection
2523         initializers.
2524         (NewInitialize): New expression with element/object initializers.
2525         
2526         * statement.cs: Reverted object/collection initializer hacks.
2527         
2528         * typemanager.cs (CSharpName): Filter __arglist type.
2529         
2530 2007-08-09  Marek Safar  <marek.safar@gmail.com>
2531
2532         ** C# 3.0 Anonymous Types (update to the latest standard)
2533         
2534         * expression.cs (Binary.ResolveOperator): Threat all null based types
2535         same.
2536         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
2537         (AnonymousTypeParameter): Updated.
2538         
2539         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
2540         (AnonymousTypeClass): New anonymous type container.
2541         
2542         * class.cs (AddField): Return operation result.
2543         
2544         * generic.cs: Another empty TypeArguments overload.
2545         
2546         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
2547         are stored at top of normal hierarchy.
2548         
2549         * typemanager.cs (CSharpName): Filter anonymous types.
2550         
2551 2007-08-09  Marek Safar  <marek.safar@gmail.com>
2552
2553         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
2554         as single Concat call. How could we miss that :-(
2555         
2556 2007-08-08  Marek Safar  <marek.safar@gmail.com>
2557
2558         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
2559         
2560 2007-08-07  Miguel de Icaza  <miguel@novell.com>
2561
2562         * expression.cs: Fix the previous commit, the creation of the
2563         arguments array list needs also to be conditional on the arguments
2564         not being null.
2565
2566         * class.cs: Add a little bit of help to help narrow down problems.
2567
2568         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
2569         not try to copy in that case. 
2570
2571         * driver.cs: When building SMCS, include a new different set of
2572         default assemblies here.   Do this here so we can control whether
2573         to include the default assemblies with /noconfig.
2574
2575 2007-08-03  Marek Safar  <marek.safar@gmail.com>
2576
2577         A fix for bug #81979
2578         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
2579         only.
2580
2581 2007-08-03  Marek Safar  <marek.safar@gmail.com>
2582
2583         A fix for bug #82300
2584
2585         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
2586         we are in probing scope.
2587
2588 2007-08-03  Marek Safar  <marek.safar@gmail.com>
2589
2590         A fix for bug #82301
2591
2592         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
2593         (Statement.CloneTo): Clone and not map children blocks.
2594
2595 2007-08-03  Marek Safar  <marek.safar@gmail.com>
2596
2597         A fix for bug #82299
2598
2599         * expression.cs (LocalVariableReference.CloneTo): Remap local info
2600         variable too.
2601         
2602         * statement.cs (Statement.CloneTo): Clone variables before statements
2603         to allow remaping of local variables.
2604
2605 2007-08-03  Marek Safar  <marek.safar@gmail.com>
2606
2607         A fix for bug #82296
2608
2609         * anonymous.cs,
2610         * report.cs: Log crash details for future clone problems.
2611         
2612         * statement.cs (Return.Clone): Don't clone non-existent expression.
2613
2614 2007-08-03  Raja R Harinath  <harinath@gmail.com>
2615
2616         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
2617         (Class.AddBasesForPart): Move CS0537 check here from ...
2618         * cs-parser.jay (class_declaration): ... here.  Move calling of
2619         'AddBasesForPart' to ...
2620         (class_bases): ... here.
2621         (struct_declaration, interface_declaration): Update to changes.
2622
2623 2007-08-02  Marek Safar  <marek.safar@gmail.com>
2624
2625         A fix for bug #81923
2626
2627         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
2628         conversion is allowed.
2629
2630 2007-08-02  Marek Safar  <marek.safar@gmail.com>
2631
2632         A fix for bug #81564
2633
2634         * ecore.cs (EventExpr): Add IsBase handling.
2635
2636         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
2637         too.    
2638         
2639 2007-08-02  Raja R Harinath  <harinath@gmail.com>
2640
2641         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
2642         * cs-parser.jay: Some whitespace cleanups.
2643         (current_delegate): New.
2644         (type_name): New.
2645         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
2646         a dummy code block, and use 'type_name' instead of 'member_name'.
2647         (interface_declaration, class_declaration): Likewise.
2648         (delegate_declaration): Likewise.  Rearrange slightly and use
2649         'current_delegate'.
2650         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
2651         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
2652
2653 2007-08-02  Marek Safar  <marek.safar@gmail.com>
2654
2655         A fix for bug #82039
2656
2657         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
2658         available.
2659
2660         * typemanager.cs (CSharpName): Split to string overload.
2661
2662 2007-08-02  Marek Safar  <marek.safar@gmail.com>
2663
2664         * expression.cs,
2665         * report.cs: Updated warning CS0472.
2666
2667 2007-08-01  Marek Safar  <marek.safar@gmail.com>
2668
2669         A fix for bug #82181
2670         * cs-parser.jay,
2671         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
2672
2673 2007-08-01  Marek Safar  <marek.safar@gmail.com>
2674
2675         A fix for bug #82277
2676         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
2677
2678 2007-08-01  Marek Safar  <marek.safar@gmail.com>
2679
2680         ** C# 3.0 Type Inference (major bits are working)
2681         
2682         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
2683         (.ImplicitStandardConversionExists): Uses compatible.
2684         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
2685         (.InferReturnType): New method.
2686         (.Compatible): Refactored.
2687         (.ResolveParameters): Uses factory to create resolved parameters.
2688         (.CompatibleMethod): Add probing mode support.
2689         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
2690         clearly distinguish between 2 different operations.
2691         (LambdaMethod): Moved to lambda.cs.
2692         (AnonymousMethod): Removed unused fields and methods.
2693         (AnonymousDelegate): Simplified.
2694         
2695         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
2696         
2697         * convert. cs (ImplicitConversionStandard): Compatible works differently.
2698         
2699         * delegate.cs (Delegate): New mehods to reduce code duplication.
2700         (.GetConstructor): New method.
2701         (.GetInvokeMethod): New method.
2702         (DelegateCreation): Updated.
2703         
2704         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
2705         does not exist.
2706         (OverloadResolve): Made probing little bit faster.
2707         
2708         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
2709         when probing is on.
2710         
2711         * generic.cs (TypeInferenceContext): Dummy implementation.
2712         
2713         * iterators.cs: Updated after Resolve/Define rename.
2714         
2715         * lambda.cs (LambdaExpression)
2716         (.ResolveParameters): Handles both type of arguments and type inference too.
2717         
2718         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
2719         (InflateTypes): Updated.
2720         
2721         * support.cs (InflateTypes): Changed signature and updated.
2722         
2723         * typemanager.cs (LookupMemberCache): Better dynamic type check.
2724         (MemberLookup_FindMembers): More MS tricks.
2725         (GetParameterData): Ditto.
2726         (GetDelegateParameters): Uses quick path for dynamic types.
2727         
2728 2007-08-01  Marek Safar  <marek.safar@gmail.com>
2729
2730         * class.cs (MethodData.Define): EmitContext is required for generic stuff
2731         only.
2732
2733 2007-07-31  Marek Safar  <marek.safar@gmail.com>
2734
2735         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
2736         syntax.
2737         
2738 2007-07-26  Jb Evain  <jbevain@novell.com>
2739
2740         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
2741         which takes a boolean 'report_errors', similar to the GetMethod.
2742         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
2743         in .net 2.1, do not report errors here.
2744
2745         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
2746         System.Runtime.CompilerServices.RequiredAttributeAttribute and
2747         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
2748         in .net 2.1.
2749
2750         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
2751         of the type InternalsVisibleToAttribute before the first call
2752         to CoreLookupType which is allowed to fail (third boolean parameter
2753         to true). Because, during the resolution for a type that is not
2754         immediately found, we try to check if the type is not defined in
2755         a friend assembly, and to do so, we need the
2756         InternalVisibleToAttribute.
2757
2758 2007-07-23  Miguel de Icaza  <miguel@novell.com>
2759
2760         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
2761         feature that allows structs to be compared against null and inline
2762         the result as true or false.
2763
2764         Notice that the same code is not permitted inside a generic block
2765         of code that would do:
2766
2767         class Foo<T> where T : struct {
2768             bool Eval (T x)
2769             {
2770                  return x == null;
2771             }
2772         }
2773
2774         It is only allowed if the type of T is not bound (no where
2775         clause).   In my opinion, this CSC 2 behavior is broken but people
2776         seem to be using it (IronRuby does, a few bug reports on bugzilla
2777         have it and some people have complained about it).
2778
2779         All of the users that depend on this behavior have code that is
2780         very likely broken. 
2781         
2782         * report.cs (Warning, Error): make these take object arguments,
2783         not strings, as that allows us to take advantage of Format.
2784
2785 2007-07-20  William Holmes  <billholmes54@gmail.com>
2786
2787         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
2788           Left member variable for the Count.
2789         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
2790           MemberName.CountTypeArguments to avoid a NRE. 
2791
2792         This code is contributed under the MIT X11 license
2793
2794 2007-07-18  Marek Safar  <marek.safar@gmail.com>
2795
2796         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
2797
2798 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
2799
2800         * doc.cs : generic method arguments are written as ``x while generic
2801           type arguments are `x. Combined with the previous change, fixed bug
2802           #79706.
2803
2804 2007-07-18  Raja R Harinath  <rharinath@novell.com>
2805
2806         Fix #82120
2807         * expression.cs (Binary.ResolveOperator): When converting
2808         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
2809
2810 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
2811
2812         * doc.cs : when T: or whatever x: is specified, it does not really
2813           check the doc comment's syntax correctness. Fixed bug #82006.
2814
2815 2007-07-18  Marek Safar  <marek.safar@gmail.com>
2816
2817         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
2818         LambdaExpression better.
2819         
2820         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
2821         
2822         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
2823         
2824         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
2825         as it can be generated.
2826         
2827         * expression.cs (Invocation.Error_InvalidArguments): Show correct
2828         modifiers.
2829         
2830         * lambda.cs (LambdaExpression): Refactored to share same code with
2831         AnonymousMethodExpression.
2832         
2833 2007-07-17  Marek Safar  <marek.safar@gmail.com>
2834
2835         * anonymous.cs (MakeName): Include host name for easier debugging.
2836         (LambdaMethod): New class for lambda spcecific stuff.
2837         
2838         * attribute.cs: Set EmitContext return type.
2839
2840         * class.cs: Set EmitContext return type.
2841         
2842         * codegen.cs (EmitContext): Return type cannot be null to stop messing
2843         with null/void meaning.
2844         
2845         * iterators.cs (ContainerType): Implemented.
2846         
2847         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
2848         
2849         * statement.cs (Return): Updated to lambda expressions.
2850         (Block.CloneTo): Parent can be null.
2851                 
2852 2007-07-13  Marek Safar  <marek.safar@gmail.com>
2853
2854         A fix for bug #81917
2855         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
2856         
2857         * class.cs (FixedField): Check whether field is in unsafe scope.
2858
2859         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
2860         (FieldExpr.Emit): Fixed buffers cannot be volatile.
2861
2862         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
2863         FieldExpr.
2864         
2865         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
2866                 
2867 2007-07-13  Marek Safar  <marek.safar@gmail.com>
2868
2869         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
2870         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
2871         from Report class.
2872
2873 2007-07-13  Marek Safar  <marek.safar@gmail.com>
2874
2875         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
2876         
2877 2007-07-13  Marek Safar  <marek.safar@gmail.com>
2878
2879         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
2880         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
2881         
2882         * codegen.cs(EmitContext): Add ProbingMode flag.
2883         
2884         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
2885         
2886         * driver.cs: For now set both warning values.
2887         
2888         * ecore.cs (SimpleName): Name is readonly.
2889         (MethodGroup.OverloadResolve): One quick path for probing.
2890         
2891         * expression.cs (Unary): Set Oper r/o.
2892         (Binary): Set Oper r/o.
2893         (ParameterReference): Set few instance variables as r/o.
2894         (ParameterReference.DoResolveBase): Don't capture aruments when 
2895         the probing is on.
2896         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
2897         (Arglist): arguments are private.
2898         (SizeOf): type is private and r/o.
2899         (MemberAccess): arguments are private.
2900
2901         * report.cs: Enhanced reporting on/off capabilities.
2902         
2903         * lambda.cs: Uses ec.IsInProbingMode.
2904         (ContextualReturn): Derives from return.
2905         
2906         * rootcontext.cs: For now set both warning values.
2907         
2908         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
2909         copy if one exists.
2910         (Return.Resolve): Don't die immediately.
2911         (Block.Resolve): Speed-up probing.
2912         (Block.CloneTo): Clone only child blocks.
2913
2914 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
2915
2916         * iterators.cs: reverted Miguel's latest change (r81925) as it
2917         breaks the build in System.
2918
2919 2007-07-13  Miguel de Icaza  <miguel@novell.com>
2920
2921         * iterators.cs (Yield.CheckContext): Check for the iterator type
2922         also here as we can call into Yield even in codepaths that are not
2923         directly checked by
2924         (MethodOrOperator is the only path that was checked).
2925
2926         In addition to the standard check, use a more specific check for
2927         constructors to report a more verbose error. 
2928
2929 2007-07-12  Miguel de Icaza  <miguel@novell.com>
2930
2931         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
2932         report the warning and continue 
2933
2934         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
2935         values on the stack on the call to Emit.   Use EmitStatement if
2936         possible, or using Emit + Pop if not possible.   Fixes #82064
2937
2938 2007-07-12  Raja R Harinath  <rharinath@novell.com>
2939
2940         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
2941         avoid try...finally in some cases.
2942
2943 2007-07-10  Marek Safar  <marek.safar@gmail.com>
2944
2945         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
2946         
2947         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
2948         instead of method. Re-use standard error handling.
2949         (ConstructorInitializer.Emit): Simplified.
2950         
2951         * delegate.cs: Updated after Invocation.EmitCall change.
2952         
2953         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
2954         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
2955         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
2956         method and don't permanently changing input arguments.
2957         (MethodGroupExpr): Introduced resolved best_candidate, when method group
2958         is resolved it has one of the candidates is the best one which is later
2959         used to emit. Removed a few unused method.
2960         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
2961
2962         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
2963         (Binary.ResolveOperator): Ditto.
2964         (ConditionalLogicalOperator.DoResolve): Ditto.
2965         (Invocation): Uses method group.
2966         (Invocation.DoResolve): Simplified.
2967         (Invocation.EmitCall): Removed useless is_static.
2968         (Invocation.Emit): Delegate to method group.
2969         (Invocation.EmitStatement): Simplified.
2970         (New): Uses method group.
2971         (MemberAccess.DoResolve): Don't destroy original expression.
2972         
2973         * statement.cs (ForEach.Resolve): Use null for no method arguments.
2974         
2975 2007-07-04  Marek Safar  <marek.safar@gmail.com>
2976
2977         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
2978         
2979         * anonymous.cs,
2980         * lambda.cs: Add custom error message type.
2981
2982 2007-07-03  Marek Safar  <marek.safar@gmail.com>
2983
2984         * lambda.cs: Simplified little bit.
2985         
2986         * parameter.cs: Introduced ImplicitLambdaParameter.
2987         (Parameters.CreateFullyResolved): New factory instead of ctor.
2988         
2989         * anonymous.cs,
2990         * class.cs,
2991         * delegate.cs: Updated parameter creation.
2992         
2993 2007-07-03  Marek Safar  <marek.safar@gmail.com>
2994
2995         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
2996         arguments.
2997         
2998         * generic.cs: Synchronized with gmcs.
2999         
3000 2007-07-03  Marek Safar  <marek.safar@gmail.com>
3001
3002         * class.cs (Indexer): Check return type as soon as possible.
3003         
3004         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
3005         members too.
3006         
3007         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
3008         
3009         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
3010         
3011         * parameter.cs (Parameter): Use expression type when it is available.
3012         
3013         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
3014         method modifier for the first parameter only.
3015
3016 2007-06-24  Marek Safar  <marek.safar@gmail.com>
3017
3018         A fix for bug #81938
3019         * typemanager.cs (ChangeType): Fixed couple of char conversions.
3020         
3021         * constant.cs: Tide up an exception message.
3022
3023 2007-06-22  Marek Safar  <marek.safar@gmail.com>
3024
3025         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
3026         an uninitialized variable is used.
3027         
3028         * expression.cs (LocalVariableReference.DoResolve): Ditto.
3029
3030 2007-06-22  Marek Safar  <marek.safar@gmail.com>
3031
3032         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
3033         not found error handling.
3034
3035         * expression.cs (ArrayCreation): Removed redundant fields and little bit
3036         simplified.
3037         (ArrayCreation.ResolveArrayElement): To be ready to customization.
3038         (ArrayCreation.DoResolve): Simplified.
3039         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
3040         its own resolve process.
3041         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
3042
3043 2007-06-20  Marek Safar  <marek.safar@gmail.com>
3044
3045         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
3046         more error details.
3047         
3048 2007-06-20  Marek Safar  <marek.safar@gmail.com>
3049
3050         * cs-tokenizer.cs: Removed var related stuff.
3051         
3052         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
3053         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
3054         a type and a keyword at same time.
3055         
3056         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
3057         matches to "var".
3058         
3059         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
3060         implicitly typed arrays, more changes will follow.
3061         
3062         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
3063         
3064 2007-06-19  Marek Safar  <marek.safar@gmail.com>
3065
3066         * ecore.cs (VarExpr): Removed Handled field.
3067         
3068         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
3069         build-in assign functionality.
3070         (ForEach.Resolve): Removed all implicitly typed local variable code and
3071         simplified.
3072         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
3073         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
3074
3075 2007-06-18  Marek Safar  <marek.safar@gmail.com>
3076
3077         * assign.cs: Removed implicitly typed local variable check.
3078         
3079         * expression.cs (LocalVariableReference.DoResolve): Add check for self
3080         referencing implicitly typed local variable.
3081         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
3082         variable here.
3083         
3084         * statement.cs (Fixed): Removed unsupported implicitly typed local
3085         variable code.
3086
3087 2007-06-15  Marek Safar  <marek.safar@gmail.com>
3088
3089         * decl.cs (MemberName): Moved all Unbound stuff to parser.
3090
3091 2007-06-14  Marek Safar  <marek.safar@gmail.com>
3092
3093         A fix for bugs #81855 and #76274
3094         * attribute.cs (AttachTo): Always set owner for global attributes to
3095         prefined owner.
3096         
3097         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
3098         usefull too.
3099         
3100         * cs-parser.jay: Assembly and module attributes must precede all other
3101         elements except using clauses and extern alias declarations.
3102
3103 2007-06-13  Marek Safar  <marek.safar@gmail.com>
3104
3105         A fix for bug #81748
3106         * cs-tokenizer.cs,
3107         * expression.cs: More checks for non ISO-1 features.
3108
3109 2007-06-12  Marek Safar  <marek.safar@gmail.com>
3110
3111         A fix for bug #81807
3112         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
3113         present inside switch statement and it is required by nullable check.
3114
3115 2007-06-12  Marek Safar  <marek.safar@gmail.com>
3116
3117         A fix for bug #81840
3118         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
3119         when type matching fails.
3120         
3121         * namespace.cs: Tiny error message change.
3122
3123 2007-06-12  Marek Safar  <marek.safar@gmail.com>
3124
3125         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
3126         reporting. Added automatic property check.
3127         
3128         * class.cs: Updated after CheckAbstractAndExtern relocation.
3129         (AEventPropertyAccessor.GetSignatureForError): Customized.
3130         
3131 2007-06-11  Marek Safar  <marek.safar@gmail.com>
3132
3133         * class.cs (DefineBaseTypes): Base type can be undefined.
3134         
3135         * ecore.cs (TypeLookup): Minor refactoring.
3136         (DoResolveAsTypeStep): Removed redundant check.
3137
3138         * namespace.cs (Lookup): Removed redundant check.
3139                 
3140         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
3141         ResolveAsTypeTerminal step.
3142         (BootstrapCorlib_*): Simplified.
3143         (PopulateCoreType): Core types can be now external.
3144
3145 2007-06-07  Marek Safar  <marek.safar@gmail.com>
3146
3147         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
3148          verification only.
3149          (InferTypeArguments): Infers anonymous expression type arguments.
3150          (Compatible): Split to Compatible and InferTypeArguments. 
3151         
3152         * lambda.cs: Updated.
3153
3154 2007-06-08  Marek Safar  <marek.safar@gmail.com>
3155
3156         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
3157
3158 2007-06-07  Raja R Harinath  <harinath@gmail.com>
3159
3160         Fix #80477, cs0135-2.cs, cs0135-3.cs
3161         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
3162         names to the "known" variables list.
3163         (Block.CheckInvariantMeaningInBlock): Handle the fact the
3164         parameter names are also "known".
3165         (Block.CheckError136): Remove.
3166         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
3167         null.
3168
3169 2007-06-07  Marek Safar  <marek.safar@gmail.com>
3170
3171         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
3172
3173 2007-06-06  Marek Safar  <marek.safar@gmail.com>
3174
3175         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
3176         internal error not an user error.
3177          
3178         * expression.cs (IsApplicable): Refactored to make debugging easier.
3179
3180         * support.cs: More tricks for non-mono runtimes.
3181         
3182         * typemanager.cs (CoreLookupType): Made public.
3183         (InitSystemCore): All linq specific stuff moved to linq.cs
3184
3185 2007-06-05  Marek Safar  <marek.safar@gmail.com>
3186
3187         * typemanager.cs (CSharpSignature): One more missing build-in types
3188         replacement.
3189         More tricks for non-mono runtime.
3190
3191 2007-06-05  Raja R Harinath  <harinath@gmail.com>
3192
3193         * statement.cs (Block.CheckError136_InParents): Remove.
3194         (Block.AddVariable): Use GetParameterInfo instead.
3195         (ToplevelBlock.ProcessArguments): Likewise.
3196
3197 2007-06-04  Raja R Harinath  <rharinath@novell.com>
3198
3199         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
3200         information too.
3201         (ToplevelBlock.GetParameterInfo): Split out of ...
3202         (ToplevelBlock.GetParameterRefernce): ... this.
3203         (ToplevelBlock.ParameterMap): Remove.
3204         * expression.cs (ParameterReference): Update to use
3205         ToplevelParameterInfo.
3206
3207         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
3208         regression.
3209
3210         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
3211         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
3212
3213         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
3214         (ToplevelBlock.ProcessParameters) ... here.
3215         (ToplevelBlock..ctor): Invoke it.
3216
3217         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
3218         new parameters.
3219
3220         * statement.cs (IKnownVariable): New interface.
3221         (LocalInfo): Implement it.
3222         (ToplevelParameterInfo): New class.
3223         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
3224         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
3225         GetKnownVariableInfo.
3226
3227 2007-06-03  Raja R Harinath  <harinath@gmail.com>
3228
3229         Partly speed up CS0136 error checks.
3230         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
3231         'recurse' parameter.
3232         (Block.DoCheckError136): Only check errors in parameters.  Move
3233         local variable checks ...
3234         (Block.AddVariable): ... here, and ...
3235         (ToplevelBlock.ResolveMeta): ... here.
3236
3237 2007-06-02  Raja R Harinath  <harinath@gmail.com>
3238
3239         * statement.cs (Block.IsChildOf): Remove.
3240
3241         * statement.cs (Statement.Clone): Move special case code ...
3242         (Block.CloneTo): ... here.
3243
3244 2007-05-29  Raja R Harinath  <rharinath@novell.com>
3245
3246         * statement.cs (ToplevelBlock.container): Remove field.  It's
3247         redundant with 'Parent'.
3248         (ToplevelBlock.ContainerBlock): Remove accessor.
3249         (ToplevelBlock..ctor): Update to changes.  Register anonymous
3250         child with parent here, ...
3251         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
3252         current_block.
3253         (start_anonymous): Don't save current_block.
3254         (top_current_block): Remove.
3255
3256         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
3257         (Block.Resolve): Update to changes.
3258         (Block..ctor): Move setting of "correct" 'Toplevel'
3259         and 'Explicit' fields to ...
3260         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
3261
3262 2007-05-27  Raja R Harinath  <harinath@gmail.com>
3263
3264         Kill Block.Implicit
3265         * statement.cs (Block.Implicit): Remove.
3266         (Block): Update to changes.
3267         * flowanalysis.cs: Likewise.
3268
3269         Mildly speed up CheckInvariantMeaningInBlock
3270         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
3271         Recursively call AddKnownVariable to all enclosing blocks.
3272         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
3273         Remove recursive calls.
3274         (Block): Update to changes.
3275
3276         New ExplicitBlock invariants
3277         * statement.cs (Block.Explicit): New field.  It points to the
3278         immediately enclosing non-implicit block.
3279         (Block..ctor): Maintain the invariant.
3280         * cs-parser.jay: Take advantage of invariant.
3281
3282         Introduce ExplicitBlock
3283         * statement.cs (ExplicitBlock): New.
3284         (ToplevelBlock): Derive from it.
3285         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
3286         sense of flag.
3287         (Block.Implicit): Update to changes.
3288         * cs-parser.jay: Update to changes.
3289
3290         Remove unused field
3291         * codegen.cs (EmitContext.IsLastStatement): Remove.
3292         * statement.cs (Block.DoEmit): Update to changes.
3293
3294 2007-05-25  Raja R Harinath  <rharinath@novell.com>
3295
3296         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
3297         modifying current_block directly.
3298
3299 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
3300         
3301         * class.cs: Implemented automatic properties (C# 3.0)
3302           Thanks to Marek for the help.
3303
3304 2007-05-23  Raja R Harinath  <rharinath@novell.com>
3305
3306         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
3307         variable as assigned, note also that all its components are
3308         assigned too.
3309         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
3310
3311 2007-05-19  Marek Safar  <marek.safar@gmail.com>
3312
3313         * anonymous.cs, class.cs: Emit Compiler generated attribute when
3314         member is marked as compiler generated.
3315         
3316         * decl.cs (MemberCore): Refactored ModFlags into property.
3317
3318         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
3319         (Check): Check only accessibility modifiers.
3320
3321 2007-05-18  Raja R Harinath  <rharinath@novell.com>
3322
3323         Track all assignable slots in one bit array
3324         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
3325         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
3326         logic from VariableMap constructor here.  Use the same 'offset'
3327         variable that's later used for computing offsets of local
3328         variables.
3329         * flowanalysis.cs (UsageVector.parameters): Remove.
3330         (UsageVector): Update to changes.
3331         (VariableMap): Remove.
3332
3333         Avoid creating ParameterMap in every block
3334         * statement.cs (Block.ParameterMap): Move ...
3335         (ToplevelBlock.ParameterMap): ... here.
3336         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
3337         only once.
3338         * flowanalysis.cs (FlowBranching.param_map): Remove.
3339         (FlowBranching.UsageVector): Update to changes.
3340         (FlowBranchingToplevel.CheckOutParameters): Likewise.
3341
3342         * statement.cs (Block.CloneTo): Clone Toplevel field too.
3343
3344         * expression.cs (ParameterReference): Distinguish between block
3345         where parameter was referenced and declared.
3346
3347 2007-05-18  Marek Safar  <marek.safar@gmail.com>
3348
3349         * flowanalysis.cs, statement.cs: Put back improved error handling.
3350
3351 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
3352         
3353         * assign.cs:
3354         * expression.cs:
3355           Imporved object and collection initialization (C# 3.0).
3356
3357 2007-05-15  Marek Safar  <marek.safar@gmail.com>
3358
3359         A fix for bug #81380
3360         * expression.cs (Is.DoResolve): Only value types have constant `is'
3361         behaviour.
3362
3363 2007-05-15  Raja R Harinath  <rharinath@novell.com>
3364
3365         * statement.cs (ToplevelBlock.child): Remove.
3366
3367 2007-05-15  Raja R Harinath  <harinath@gmail.com>
3368
3369         Rationalize ResolveMeta: refactoring
3370         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
3371         out constant handling code into ...
3372         (Block.DoResolveConstants): ... this.
3373
3374         Rationalize ResolveMeta: kill local_map
3375         * statement.cs (Block.local_map, Block.LocalMap): Remove.
3376         (Block.AssignableSlots): New.
3377         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
3378         for locals -- move code from VariableMap here.  Avoid unnecessary
3379         allocations.
3380         * flowanalysis.cs (FlowBranching.local_map): Remove.
3381         (FlowBranching..ctor): Use Block.AssignableSlots.
3382         (VariableMap): Remove unused constructors.
3383
3384 2007-05-11  Raja R Harinath  <rharinath@novell.com>
3385
3386         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
3387
3388 2007-05-11  Marek Safar  <marek.safar@gmail.com>
3389
3390         * typemanager.cs (IsFriendAssembly): Should not be called for building
3391         assembly.
3392
3393 2007-05-09  Marek Safar  <marek.safar@gmail.com>
3394
3395         * literal.cs (NullConstant): Print null in all cases.
3396         
3397         * expression.cs (Binary.ResolveOperator): Implemented delegate
3398          comparison based on C# 2.0 changes.
3399
3400 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
3401
3402         This code is contributed under the MIT X11 license
3403         
3404         The following enables support for several C# 3.0 language features:
3405         
3406         * cs-tokenizer.cs: Added support for the "var" keyword.
3407         
3408         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
3409           Added VarExpr class to facilitate type inferencing.
3410         
3411         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
3412           to support anonymous types.
3413         
3414         * assign.cs: Added support for type inferencing and initialization.
3415         
3416         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
3417         
3418         * expression.cs: Added implicit array support to ArrayCreation.
3419           Added 5 types and 1 interface:
3420           
3421           IInitializable                Implementing classes can inject initializing
3422                                         statements after object instantiation.
3423           
3424           Initializer                   Stores data for object initialization.
3425           
3426           AnonymousType                 An expression for anonymous types.
3427           
3428           AnonymousTypeParameter        Stores data about an anonymous type's field.
3429           
3430           NewInitialize                 An expression for object initialization.
3431           
3432           CollectionInitialize          An expression for collection initialization.
3433         
3434         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
3435           statements.
3436
3437 2007-05-06  Marek Safar  <marek.safar@gmail.com>
3438
3439         A fix for bug #81500
3440         * cs-tokenizer.cs: Add special handling for coalescing operator.
3441
3442 2007-05-06  Marek Safar  <marek.safar@gmail.com>
3443
3444         A fix for bug #81529
3445         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
3446         its value from base class until it is redefined.
3447
3448 2007-05-02  Raja R Harinath  <rharinath@novell.com>
3449
3450         Fix regression in cs0631-3.cs
3451         * cs-parser.jay (operator_declarator): Add opt_attributes to error
3452         fallback.  Make error fallback catch more cases.
3453
3454 2007-05-01  Miguel de Icaza  <miguel@novell.com>
3455
3456         * cs-parser.jay: Allow parameters in operator declarations to have
3457         attributes. 
3458
3459 2007-04-27  Miguel de Icaza  <miguel@novell.com>
3460
3461         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
3462         exists. 
3463
3464         * lambda.cs (ContextualReturn.Resolve): An expression is valid
3465         inside the ContextualReturn, it does not have to be an
3466         ExpressionStatement. 
3467
3468 2007-04-24  Miguel de Icaza  <miguel@novell.com>
3469
3470         * lambda.cs (ContextualReturn.Resolve): if the return type is not
3471         set, set it.
3472
3473 2007-04-23  Miguel de Icaza  <miguel@novell.com>
3474
3475         * anonymous.cs (AnonymousContainer): split the virtual Resolve
3476         method in two methods: ResolveNoDefine and Resolve.
3477
3478         ResolveNoDefine will stop just after ResolveTopBlock has been
3479         called.   
3480
3481         Resolve will then continue by creating a method and issuing the
3482         call to method.Define ().
3483
3484         (AnonymousMethod): Split and implement the new Resolve and
3485         ResolveNoDefine as well.
3486
3487         * lambda.cs (LambdaExpression): Split the anonymous method
3488         resolution code into a separate routine (CoreCompatibilityTest)
3489         from DoCompatibleTest.
3490
3491         (LambdaExpression.TryBuild): New method, this method tries to
3492         build the LambdaExpression with the given set of types to be used
3493         as the types for the various parameters of the lambda expression. 
3494
3495         If the compilation succeed with the given types, the infered type
3496         of the Anonymous method is returned, otherwise null is returned.
3497
3498 2007-04-23  Marek Safar  <marek.safar@gmail.com>
3499
3500         A fix for bug #81414
3501         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
3502
3503 2007-04-22  Miguel de Icaza  <miguel@novell.com>
3504
3505         * cs-tokenizer.cs: Change various identifiers here from the
3506         camelCasing to the recommended Linux-like style for instance
3507         variables from the Coding Guidelines. 
3508
3509 2007-04-19  Martin Baulig  <martin@ximian.com>
3510
3511         * convert.cs
3512         (Convert.ImplicitReferenceConversionCore): Allow conversions from
3513         System.Enum to System.ValueType.
3514
3515 2007-04-13  Martin Baulig  <martin@ximian.com>
3516
3517         Rewrote implicit reference conversions.  We need to distinguish
3518         between implicit reference conversions (13.1.4) and implicit
3519         boxing conversions (13.1.5).
3520
3521         According to the spec, there's an an implicit conversion
3522         "From a one-dimensional array-type S[] to IList<T> and base
3523         interfaces of this interface, provided there is an implicit
3524         reference conversion from S to T."  Note that this does not
3525         include boxing conversions.
3526
3527         * convert.cs
3528         (Convert.ImplicitTypeParameterBoxingConversion): New method.
3529         (Convert.ImplicitReferenceConversion): Split into
3530         ImplicitReferenceConversionCore() and
3531         ImplicitBoxingConversionExist().
3532         (Convert.ImplicitReferenceConversionExists): Use the new
3533         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
3534
3535 2007-04-12  Martin Baulig  <martin@ximian.com>
3536
3537         * convert.cs (Convert.ImplicitReferenceConversion): Move the
3538         `TypeManager.null_type' checks up to the top of the method.
3539
3540 2007-04-11  Marek Safar  <marek.safar@gmail.com>
3541
3542         A fix for bug #81350
3543         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
3544         extension methods.
3545
3546 2007-04-11  Martin Baulig  <martin@ximian.com>
3547
3548         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
3549         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
3550         to make this work for generic classes; fixes #79561.
3551
3552 2007-04-11  Martin Baulig  <martin@ximian.com>
3553
3554         * expression.cs (As): Add support for nullable types; fixes #79371.
3555
3556 2007-04-11  Martin Baulig  <martin@ximian.com>
3557
3558         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
3559         `type.FullName' is null; fixes #80243.
3560
3561 2007-04-11  Martin Baulig  <martin@ximian.com>
3562
3563         * expression.cs (Invocation.IsApplicable): Don't modify the method
3564         if type inference succeeded, but the method was not applicable.
3565         Fixes #81250.
3566
3567 2007-04-10  Marek Safar  <marek.safar@gmail.com>
3568
3569         A fix for bug #81324
3570         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
3571         internal and external namespaces containers.
3572
3573 2007-04-10  Martin Baulig  <martin@ximian.com>
3574
3575         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
3576         TypeManager.DropGenericMethodArguments() so we also call
3577         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
3578
3579 2007-04-10  Martin Baulig  <martin@ximian.com>
3580
3581         * iterators.cs (Iterator.CreateIterator): Don't crash if
3582         `method.ReturnType' is null.  This happens if something went wrong
3583         while resolving that typ (we already reported an error in this case).
3584
3585 2007-04-10  Martin Baulig  <martin@ximian.com>
3586
3587         * expression.cs (New.DoResolve): Don't call CheckComImport() on
3588         generic interfaces; report the CS0144 directly.
3589
3590 2007-04-10  Martin Baulig  <martin@ximian.com>
3591
3592         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
3593         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
3594
3595 2007-04-10  Martin Baulig  <martin@ximian.com>
3596
3597         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
3598
3599 2007-04-09  Raja R Harinath  <rharinath@novell.com>
3600
3601         A better fix
3602         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
3603         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
3604
3605         Fix #81338
3606         * statement.cs (For.Resolve): If resolution fails, use
3607         KillFlowBranching.
3608
3609 2007-04-08  Marek Safar  <marek.safar@gmail.com>
3610
3611         * anonymous.cs (MakeName): Make faster and zero-based.
3612         (VerifyExplicitParameterCompatibility): Back to mode where generic
3613         parameter is ignored.
3614         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
3615
3616         * class.cs (EmitType): Method can emit another new method.
3617
3618         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
3619
3620         * driver.cs: Updated.
3621
3622         * lambda.cs: Reuse predefined empty parameters.
3623
3624         * parameter.cs: Updated
3625
3626         * support.cs: Implemented InflateTypes.
3627
3628         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
3629         (InitSystemCore): Introduced to isolate 3.0 dependencies.
3630
3631 2007-04-03  Martin Baulig  <martin@ximian.com>
3632
3633         Fix #80632.
3634
3635         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
3636         version of TypeManager.IsOverride() which also works with generic
3637         types.  
3638
3639 2007-04-03  Martin Baulig  <martin@ximian.com>
3640
3641         Fix #81044.
3642
3643         * convert.cs
3644         (Convert.ExplicitReferenceConversion): We need to cast when
3645         converting from IList<T> to S[].
3646
3647 2007-04-01  Marek Safar  <marek.safar@gmail.com>
3648
3649         * decl.cs (FindExtensionMethods): Consider all candidates with same name
3650         at this level.
3651         
3652         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
3653
3654 2007-03-31  Marek Safar  <marek.safar@gmail.com>
3655
3656         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
3657         argument and return type inferring.
3658
3659         * codegen.cs (InferReturnType): Flag whether return can be inferred.
3660         (ReturnType): Turned to property.
3661
3662         * statement.cs (Return): Implemented return type inferring.
3663
3664         * support.cs (ReflectionParameters): Use local types if possible.
3665
3666 2007-03-30  Raja R Harinath  <rharinath@novell.com>
3667
3668         * flowanalysis.cs (FlowBranching.Reachability): Remove.
3669         (FlowBranching.UsageVector): Update to changes.
3670
3671         Prepare to kill 'Reachability'
3672         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
3673         argument of constructor.
3674
3675 2007-03-29  Raja R Harinath  <rharinath@novell.com>
3676
3677         Prepare to kill 'Reachability'
3678         * flowanalysis.cs (UsageVector.is_unreachable): New.
3679         (UsageVector): Update to maintain 'is_unreachable' in parallel to
3680         'reachability', and verify they're consistent.
3681
3682         Fix #81121
3683         * expression.cs (New.EmitStatement): Handle type parameters here too.
3684
3685 2007-03-29  Martin Baulig  <martin@ximian.com>
3686
3687         Fix #79148.
3688
3689         * anonymous.cs
3690         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
3691         CompilerGeneratedClass.
3692         (ScopeInfo.EmitScopeInstance): Make this protected.
3693         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
3694         `ec.CurrentAnonymousMethod.Scope == Scope'.
3695
3696         * statement.cs (Block.ScopeInfo): Make this a property.
3697
3698 2007-03-27  Raja R Harinath  <harinath@gmail.com>
3699
3700         Prepare to kill 'Reachability'
3701         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
3702         (FlowBranching.UsageVector.Reachability): Remove property.
3703         (FlowBranching.UsageVector.IsUnreachable): New property.
3704         (FlowBranching.UsageVector.ResetBarrier): New.
3705         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
3706         * codegen.cs, statement.cs: Update to changes.
3707
3708 2007-03-27  Martin Baulig  <martin@ximian.com>
3709
3710         Fix #81209.
3711
3712         * decl.cs
3713         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
3714         generic types.
3715
3716 2007-03-26  Raja R Harinath  <rharinath@novell.com>
3717
3718         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
3719         instead of TriState.  Remove all mention of TriState.
3720
3721         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
3722         replaced by a boolean.  Add boolean 'is_unreachable' field, check
3723         and maintain invariants.
3724
3725 2007-03-25  Marek Safar  <marek.safar@gmail.com>
3726
3727         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
3728
3729 2007-03-25  Marek Safar  <marek.safar@gmail.com>
3730
3731         * expression.cs: Stop using obsolete 2.0 opcodes.
3732
3733 2007-03-25  Marek Safar  <marek.safar@gmail.com>
3734
3735         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
3736         one of the latests Martin's fixes.
3737
3738 2007-03-23  Miguel de Icaza  <miguel@novell.com>
3739
3740         * expression.cs: On BigEndian systems, swap the bytes, temporary
3741         solution until we get a new bitconverter class.
3742
3743 2007-03-23  Martin Baulig  <martin@ximian.com>
3744
3745         Fix #81158.
3746
3747         * decl.cs (MemberCache.AddMembers): Add generic methods both as
3748         "Method" and "Method`1".  Normally, a cache lookup is done on the
3749         "Method" form (ie. without the generic arity), but this one makes
3750         lookups on the full form work as well.
3751
3752 2007-03-22  Raja R Harinath  <rharinath@novell.com>
3753
3754         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
3755         unused properties.
3756
3757 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
3758         * class.cs: 
3759         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
3760         ordered_member_list, to TypeBuilder to store members to be defined
3761         in the order they were parsed in.
3762         - ordered_explicit_member_list contains all properties indexers
3763           and methods that are defined as explicit implementation of an
3764           interface or base class.
3765         - ordered_member_list contains all properties indexers and methods
3766           that are not defined as explicit implementation of an interface
3767           or base class.
3768
3769         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
3770         functionality in these removed classes has been replaced with 
3771         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
3772         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
3773
3774         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
3775         to CheckForDuplications inside GetMethod and SetMethod Define Method
3776         to handle method property and indexer name conflicts.
3777
3778         Fixes #79434
3779
3780         All code is contributed under the MIT/X11 license.
3781
3782 2007-03-20  Martin Baulig  <martin@ximian.com>
3783
3784         * class.cs (TypeContainer.Interfaces): Removed; they're now
3785         included in `TypeContainer.Types'.
3786
3787 2007-03-20  Martin Baulig  <martin@ximian.com>
3788
3789         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
3790
3791         * class.cs (TypeContainer.CreateType): New public method.  This is
3792         now called before DefineType() to create the TypeBuilders.
3793         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
3794         has already been created by CreateType().
3795         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
3796         don't resolve our base classes here; this has been moved into
3797         DefineBaseTypes().  We're now called from CreateType().
3798         (TypeContainer.DefineBaseTypes): New private method; resolve our
3799         base classes here.  We're now called from DefineType().
3800
3801         * rootcontext.cs
3802         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
3803         our types first to create all the TypeBuilders.  After that, call
3804         TypeContainer.DefineType() on all the types which'll resolve their
3805         base classes and setup the resolve order.
3806
3807 2007-03-20  Martin Baulig  <martin@ximian.com>
3808
3809         * class.cs (TypeContainer.Enums): Removed; they're now included in
3810         `TypeContainer.Types'.  
3811
3812 2007-03-20  Martin Baulig  <martin@ximian.com>
3813
3814         * class.cs
3815         (TypeContainer.DefineType): Don't call ResolveMembers() here.
3816         (TypeContainer.DoResolveMembers): Call DefineType() on our
3817         `compiler_generated' classes; moved here from DefineNestedTypes().
3818
3819         * rootcontext.cs
3820         (RootContext.ResolveTree): Call ResolveMembers() on all
3821         TypeContainer's in the `type_container_resolve_order'.
3822
3823 2007-03-19  Marek Safar  <marek.safar@gmail.com>
3824
3825         * class.cs: Use corlib to handle InternalMethodImplAttribute.
3826
3827 2007-03-17  Marek Safar  <marek.safar@gmail.com>
3828
3829         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
3830         implementation flags.
3831
3832 2007-03-17  Marek Safar  <marek.safar@gmail.com>
3833
3834         * class.cs: More optimizations for type parameters.
3835
3836 2007-03-15  Marek Safar  <marek.safar@gmail.com>
3837
3838         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
3839
3840         * ecore.cs, parameter.cs: More common code for both corlibs.
3841
3842         * typemanager.cs (IsGenericMethod): Simplified.
3843
3844 2007-03-15  Raja R Harinath  <rharinath@novell.com>
3845
3846         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
3847         'returns'.
3848         * statement.cs, iterators.cs, lambda.cs: Update to changes.
3849
3850         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
3851         unconditionally.  Simplify explanation.
3852         (Try.Resolve, Using.Resolve): Likewise.
3853
3854 2007-03-15  Martin Baulig  <martin@ximian.com>
3855
3856         Fix #80731.
3857
3858         * decl.cs (DeclSpace): If we're a partial class, use our
3859         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
3860
3861 2007-03-15  Raja R Harinath  <rharinath@novell.com>
3862
3863         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
3864         'throws'.
3865         (FlowBranching.UsageVector): Update to changes.
3866         (FlowBranching.MergeSiblings): Likewise.
3867         * statement.cs: Likewise.
3868
3869 2007-03-15  Martin Baulig  <martin@ximian.com>
3870
3871         Fix #79302.
3872
3873         * decl.cs
3874         (MemberCache): Added a special .ctor for type parameters.
3875
3876         * typemanager.cs
3877         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
3878         `MemberCache'.  
3879
3880 2007-03-09  Martin Baulig  <martin@ximian.com>
3881
3882         * enum.cs (Enum): Make this a TypeContainer.
3883         (EnumMember): Derive from `Const'.
3884
3885         * const.cs
3886         (Const.DoResolveValue): New protected virtual method; move most of
3887         the functionality of ResolveValue() here so we can override it in
3888         `EnumMember'.
3889         (Const.CreateConstantReference): Make this virtual.
3890
3891         * class.cs (Kind): Add `Kind.Enum'.
3892         (TypeContainer.Emit): Don't emit the enums here; they're already
3893         in the `RootContext.typecontainer_resolve_order'.
3894
3895         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
3896         here; they're already in the `typecontainer_resolve_order'.
3897
3898         * ecore.cs (EnumConstant.ConvertImplicitly): Add
3899         TypeManager.DropGenericTypeArguments().
3900
3901         * typemanager.cs
3902         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
3903         (TypeManager.IsEnumType): Likewise.
3904         (TypeManager.EnumToUnderlying): Likewise.
3905         (TypeManager.IsEqual): Add support for enums.
3906
3907 2007-03-12  Raja R Harinath  <rharinath@novell.com>
3908
3909         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
3910         DefaultParameterValueAttribute to be undefined, say if System.dll
3911         is not referenced.
3912
3913 2007-03-11  Marek Safar  <marek.safar@gmail.com>
3914
3915         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
3916         any mscorlib.
3917
3918 2007-03-10  Marek Safar  <marek.safar@gmail.com>
3919
3920         * class.cs, parameter.cs: Unified parameters verification.
3921
3922 2007-03-08  Martin Baulig  <martin@ximian.com>
3923
3924         * cs-parser.jay (constructor_header): Pass the location to the
3925         newly created TopLevelBlock.
3926
3927 2007-03-07  Martin Baulig  <martin@ximian.com>
3928
3929         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
3930
3931 2007-03-06  Miguel de Icaza  <miguel@novell.com>
3932
3933         * convert.cs (ExplicitReferenceConversionExists): Sync this method
3934         with the changes from David, fixes the build.
3935
3936 2007-03-05  David Mitchell  <dmitchell@logos.com>
3937
3938         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
3939         and its base interfaces to a one-dimensional array type S[],
3940         provided there is an implicit or explicit reference conversion
3941         from S to T.
3942
3943 2007-03-03  Marek Safar  <marek.safar@gmail.com>
3944
3945         * cs-tokenizer.cs: Implemented basic linq grammar.
3946
3947         * driver.cs: Set linq lang version on demand.
3948
3949 2007-02-26  Marek Safar  <marek.safar@gmail.com>
3950
3951         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
3952
3953 2007-02-25  Marek Safar  <marek.safar@gmail.com>
3954
3955         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
3956         (Fixes #80455)
3957
3958         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
3959         here.
3960         Check property and event extern attributes.
3961
3962         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
3963         charset.
3964
3965 2007-02-24  Marek Safar  <marek.safar@gmail.com>
3966
3967         A fix for bug #80407
3968         * ecore.cs: Don't report ambiguity error when methods have same parent.
3969
3970 2007-02-23  Marek Safar  <marek.safar@gmail.com>
3971
3972         A fix for bug #80878
3973         * class.cs, cs-parser.jay: Event property can host anonymous methods.
3974
3975 2007-02-22  Marek Safar  <marek.safar@gmail.com>
3976
3977         * attribute.cs: Enable ExtensionAttribute presence test.
3978
3979 2007-02-22  Marek Safar  <marek.safar@gmail.com>
3980
3981         * class.cs: Warn about missing GetHashCode only when Equals is override.
3982
3983         * decl.cs: Check accessibility of type arguments.
3984
3985         * typemanager.cs: Correctly report nullable array.
3986
3987 2007-02-20  Marek Safar  <marek.safar@gmail.com>
3988
3989         * class.cs, report.cs: Capture more details when things go wrong.
3990
3991 2007-02-20  Marek Safar  <marek.safar@gmail.com>
3992
3993         A fix for bug #80650
3994         * cs-parser.jay: Anonymous container starts at constructor declaration
3995         and not at block beginning because it has to be usable in constructor
3996         initializer.
3997
3998         * statement.cs: Use context location and not block one for error reporting.
3999
4000 2007-02-18  Marek Safar  <marek.safar@gmail.com>
4001
4002         A fix for bug #78712
4003         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
4004         too.
4005
4006 2007-02-18  Marek Safar  <marek.safar@gmail.com>
4007
4008         A fix for bug #80493 by Atsushi Enomoto
4009         * cs-parser.jay: Ignore invalid attribute target.
4010
4011 2007-02-18  Marek Safar  <marek.safar@gmail.com>
4012  
4013         * cs-tokenizer.cs: Ignore '\0' as white space character.
4014
4015 2007-02-17  Miguel de Icaza  <miguel@novell.com>
4016
4017         * cs-parser.jay: Add support for lambda expressions to the mcs
4018         compiler as well.
4019
4020         * lambda.cs: Only clone when we are probing, not on the final call
4021         (Compatible is the final call). 
4022
4023         * statement.cs (CloneContext): Introduce class to provide block
4024         remapping during clone.
4025
4026         All statements Clone themselves now.
4027
4028         (Clone): special handling for blocks, when we clone a block, we
4029         register the block inside this routine, as children of the block
4030         might trigger a lookup. 
4031         
4032         * expression.cs: Add support for CloneContext in all expressions. 
4033         
4034 2007-02-17  Marek Safar  <marek.safar@gmail.com>
4035  
4036         A fix for bug #80493
4037         * statement.cs: Report ambiguous warning when interfaces are not related.
4038
4039 2007-02-15  Marek Safar  <marek.safar@gmail.com>
4040
4041         C# 3.0 extension methods.
4042
4043         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
4044         cannot be used directly.
4045
4046         * class.cs (Class.Emit): Emit extension attribute if any class method
4047         is extension method.
4048         (Method.Define): Add basic extension method validation conditions.
4049         (Method.Emit): Emit extension attribute for method.
4050
4051         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
4052         extension method exists. Currently we follow same approach as Microsoft
4053         does, emit even if a method or a class are private but this can change
4054         later.
4055
4056         * cs-parser.jay: Add handling of `this' keyword in method parameters
4057         context.
4058
4059         * decl.cs (DeclSpace.IsStaticClass): New property.
4060         (MemberCache.FindExtensionMethods): Looks for extension methods with
4061         defined name and extension type.
4062
4063         * doc.cs: Updated after OverloadResolve changes.
4064
4065         * driver.cs: Add new soft reference to System.Core.dll.
4066
4067         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
4068         (ExtensionMethodGroupExpr): Represents group of extension methods.
4069
4070         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
4071         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
4072         to MethodGroupExpr and made non-static for easier customization.
4073         (Invocation.DoResolve): Add extension method lookup when no standard
4074         method was found.
4075         (MemberAccess.DoResolve): Try extension methods if no member exists.
4076
4077         * modifiers.cs: Add METHOD_EXTENSION modifier.
4078
4079         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
4080         as well as candidate extension type.
4081         (ComputeNamespaces): When assembly constains extension methods registers
4082         them.
4083         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
4084         extension method lookup.
4085         (Namespace.LookupExtensionMethod): Looks for extension method in this
4086         namespace.
4087         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
4088         find a method which matches name and extensionType.
4089
4090         * parameter.cs (Parameter): Add This modifer.
4091         (HasExtensionMethodModifier): New property.
4092         (Resolve): Add extension parameter check.
4093         (ModFlags): turned to property to exclude this modifier as it is not real
4094         parameter modifier.
4095         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
4096
4097         * support.cs (ParameterData): Add ExtensionMethodType.
4098         (ReflectionParameters): Implemented ExtensionMethodType interface property.
4099
4100         * typemanager.cs: Add type and ctor extension attribute type.
4101
4102 2007-02-15  Miguel de Icaza  <miguel@novell.com>
4103
4104         * report.cs (DisableErrors, EnableErrors): used to prevent error
4105         output when we are "trying" to compile various methods with
4106         different types. 
4107
4108         * ecore.cs (Expression): Add Clone method that calls the virtual
4109         CloneTo method.  The current CloneTo method in Expression throws
4110         an exception so we can track down all the places where this must
4111         be implemented (not using abstract, because that would be a lot of
4112         up-front-work before we can start testing the implementation
4113         idea). 
4114
4115         Important: we only need Clone capabilities for expressions created
4116         by the parser, as the expressions we will be cloning are
4117         expressions in the pre-resolved state.   This vastly simplifies
4118         the work required. 
4119         
4120         (SimpleName): Add CloneTo that does nothing.
4121         (EmptyCast): Add CloneTo.
4122         
4123         * expression.cs (Binary): Implement CloneTo.
4124         (Invocation.IsApplicable): Store the current ec in
4125         EmitContext.TempEc and restore it on return.  This is used so we
4126         do not have to sprinkle hundres of methods with an extra
4127         EmitContext, we know that the only user is the lambda expression
4128         ImplicitConversionExists code. 
4129         
4130         (Argument): Add Cloning capabilities.
4131         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
4132         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
4133         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
4134         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
4135         IndexerAccess): Add Clone capability.
4136
4137         (LocalVariableReference, This): TODO: needs cloned Block mapping.
4138
4139         (Argument): Add cloning capability.
4140
4141         * assign.cs (Assign): Implement CloneTo.
4142
4143         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
4144         
4145         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
4146         version by calling Convert with the EmitContext (that we are
4147         currently storing in ec, this is not great, but will do for now,
4148         to avoid passing EmitContext parameters to hundreds of functions
4149         that do not need them now).
4150
4151         (SetExpression): Remove, it is not needed.
4152         
4153         (ContextualReturn): Implement CloneTo.
4154
4155         * statement.cs (Statement): Implement cloning infrastructure,
4156         similar to expressions.
4157
4158         (Block): Partial implementation of Clone for statements.
4159
4160         (Return): Implement clone.
4161         
4162         * constant.cs (Constant.CloneTo): New method, does nothing.
4163
4164         * codegen.cs (TempEc): Add a static EmitContext as a temporary
4165         solution, until we decide how to exactly do this.  
4166         
4167 2007-02-14  Marek Safar  <marek.safar@gmail.com>
4168  
4169         A fix for bug #80493
4170         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
4171         a property is override we need to use second accessor.
4172
4173 2007-02-13  Marek Safar  <marek.safar@gmail.com>
4174  
4175         A fix for bug #80418
4176         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
4177         methods.
4178
4179 2007-02-13  Marek Safar  <marek.safar@gmail.com>
4180
4181         Another fix for bug #80749
4182         * pending.cs: Abstract class has priority over interfaces.
4183
4184 2007-02-13  Marek Safar  <marek.safar@gmail.com>
4185
4186         Another fix for bug #80749
4187         * pending.cs: Abstract class has priority over interfaces.
4188
4189 2007-02-13  Marek Safar  <marek.safar@gmail.com>
4190
4191         Another fix for bug #80749
4192         * pending.cs: Abstract class has priority over interfaces.
4193
4194 2007-02-13  Marek Safar  <marek.safar@gmail.com>
4195
4196         Another fix for bug #80749
4197         * pending.cs: Abstract class has priority over interfaces.
4198
4199 2007-02-13  Marek Safar  <marek.safar@gmail.com>
4200
4201         * class.cs Better error message.
4202
4203         * driver.cs: Add shorter versions of -optimize option.
4204
4205 2007-02-13  Martin Baulig  <martin@ximian.com>
4206
4207         * class.cs (Constructor.Emit): Check the return value of
4208         ec.ResolveTopBlock() and return on error.
4209
4210 2007-02-13  Raja R Harinath  <rharinath@novell.com>
4211
4212         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
4213         message to fix error message regression.
4214
4215 2007-02-12  Marek Safar  <marek.safar@gmail.com>
4216
4217         * delegate.cs: Delegate creation expression cannot be of Nullable type.
4218
4219 2007-02-12  Marek Safar  <marek.safar@gmail.com>
4220
4221         A fix for bug #80749
4222         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
4223         its parent container.
4224
4225         * class.cs (DefineFieldInitializers): Each initializer can has different
4226         resolve context.
4227
4228         * const.cs: Updated.
4229
4230 2007-02-11  Miguel de Icaza  <miguel@novell.com>
4231
4232         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
4233         now all the heavy lifting to check that embedded statements or
4234         expressions have the right form is done in the ContextualReturn.
4235
4236         (ContextualReturn): New class.  
4237
4238         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
4239         method that can be invoked to report 201, so we do not replicate
4240         this everywhere.
4241
4242         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
4243         
4244         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
4245         treating tabs as spaces. 
4246
4247 2007-02-09  Marek Safar  <marek.safar@gmail.com>
4248
4249         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
4250         * assign.cs: Use full implicit conversion for right side check.
4251
4252 2007-02-09  Marek Safar  <marek.safar@gmail.com>
4253
4254         * statement.cs (Switch): Switch over boolean type is not standardized.
4255
4256 2007-02-08  Marek Safar  <marek.safar@gmail.com>
4257
4258         A fix for bug #80755
4259         * decl.cs (FindBaseEvent): Don't use method cache for events.
4260
4261 2007-02-07  Marek Safar  <marek.safar@gmail.com>
4262
4263         * cs-parser.jay: Better syntax error handling.
4264
4265         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
4266         instead of underlying type value.
4267
4268 2007-02-06  Marek Safar  <marek.safar@gmail.com>
4269
4270         * driver.cs: Check define identifier before is registered.
4271
4272         * namespace.cs: Use existing error message.
4273
4274         * report.cs: New warning.
4275
4276 2007-02-06  Marek Safar  <marek.safar@gmail.com>
4277
4278         A fix for bug #80742
4279         * expression.cs: Delegate Invoke method can be called directly.
4280
4281 2007-02-06  Marek Safar  <marek.safar@gmail.com>
4282
4283         A fix for bug #80676
4284         * class.cs (IsEntryPoint): The Main method can have params modifier.
4285
4286 2007-02-04  Miguel de Icaza  <miguel@novell.com>
4287
4288         * parameter.cs (Parameter, Parameters): Add Clone method.
4289
4290         * anonymous.cs (Compatible): Turn method into virtual method, so
4291         LambdaExpression can implement a different behavior.
4292
4293         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
4294         out the basic checking here, so it can be used by
4295         LambdaExpressions.
4296         
4297         * lambda.cs: Introduce "Compatible" function that will do the
4298         heavy lifting.
4299
4300 2007-02-02  Marek Safar  <marek.safar@gmail.com>
4301
4302         * attribute.cs: Unified one error message.
4303
4304         * class.cs (Class): Use type attributes and not properties to test static
4305         class.
4306         (IsEntryPoint): Don's pass local variable.
4307
4308         * convert.cs: Removed duplicate check.
4309
4310         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
4311
4312         * driver.cs: Don't crash when soft reference does not exist.
4313
4314         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
4315         (UsingEntry): Removed redundant allocation.
4316
4317         * parameter.cs: Add fast path for type parameters.
4318
4319         * support.cs: Don't allocate attribute when it's not used.
4320
4321 2007-01-30  Miguel de Icaza  <miguel@novell.com>
4322
4323         * anonymous.cs
4324         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
4325         this into a virtual method, so we can override it in LambdaExpression.
4326
4327         * driver.cs: Improve diagnostics in case of failure. 
4328
4329         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
4330         write a function that is slightly more complex and that parses:
4331
4332         type identifier [, type identifier]* )
4333
4334         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
4335         this expression:
4336
4337                 (canEmpty ? i >= 0 : i > 0)
4338
4339 2007-01-30  Raja R Harinath  <rharinath@novell.com>
4340
4341         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
4342         exception on possibly valid code.
4343
4344 2007-01-29  Raja R Harinath  <rharinath@novell.com>
4345
4346         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
4347         Push/PopPosition.
4348         (parse_opt_type_arguments): Remove.  It's almost the same as
4349         parse_less_than.
4350         (parse_namespace_or_typename): Use parse_less_than.
4351
4352 2007-01-28  Miguel de Icaza  <miguel@novell.com>
4353
4354         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
4355         this bug took a few hours to find, because the state saved and
4356         restored by PushPosition and PopPosition was ignoring the state of
4357         parse_generic_less_than.
4358
4359         I can also now remove the handling of OP_LT and OP_GT, this solves
4360         the big mistery.
4361         
4362         * cs-tokenizer.cs: store the location for the ARROW token, we use
4363         that in the parser.
4364
4365         (PushPosition, PopPosition): save/restore also `current_token',
4366         restore `parse_generic_less_than' (was missing).
4367
4368         (parse_opt_type_arguments): use parse_type, not
4369         parse_namespace_or_typename to parse types.
4370
4371         * lambda.cs: Empty new file, will eventually have the lambda
4372         expression implementation.
4373
4374         * lambda.test: used to test the internal tokenizer. 
4375
4376         * report.cs (FeatureIsNotISO1): Rename from
4377         FeatureIsNotStandardized, because it was about the language level
4378         (1 vs 2) it was not about standarization.
4379
4380         (FeatureRequiresLINQ): New.
4381
4382         * support.cs (SeekableStreamReader): Only require that the reader
4383         is a TextReader, not a StreamReader, so we can plug StringReader. 
4384
4385         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
4386         given position in the input stream the following tokens can be
4387         parsed as a type followed by an identifier.
4388
4389         (is_punct): after a '(' if parse_type_and_parameter returns true,
4390         then return a special token OPEN_PARENS_LAMBDA which is used to
4391         avoid reduce/reduce errors in the grammar for the
4392         lambda_expression rules.
4393
4394         (parse_type): implement a type parser inside the
4395         tokenizer, the parser only returns true or false depending on
4396         whether the input at a given position can be parsed as a type.
4397
4398         (peek_token): new method used during type parsing.
4399
4400 2007-01-28  Raja R Harinath  <rharinath@novell.com>
4401
4402         Fix #80531
4403         * anonymous.cs (ScopeInfo.InflateParameters): New.
4404         (AnonymousContainer.Resolve): Use it to redirect types of
4405         delegate parameters.
4406
4407 2007-01-27  Raja R Harinath  <rharinath@novell.com>
4408
4409         Fix #80530
4410         * expression.cs (Error_InvalidArguments): Don't use two different
4411         messages for CS1503.  Use ExtraInformation and
4412         SymbolRelatedToPreviousError instead.
4413
4414         Fix #80358
4415         * decl.cs (DeclSpace.initialize_type_params): Don't access
4416         'type_params' of a partial class directly.
4417
4418 2007-01-26  Miguel de Icaza  <miguel@novell.com>
4419
4420         * constant.cs: Removed a handful of out-of-range checks that were
4421         not necessary. 
4422
4423 2007-01-25  Marek Safar  <marek.safar@gmail.com>
4424
4425         * expression.cs (CheckUselessComparison): Add additional check for char
4426         constants.
4427
4428         * namespace.cs: Fixed typo.
4429
4430 2007-01-23  Miguel de Icaza  <miguel@novell.com>
4431
4432         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
4433         gone, instead we inline the test, preventing the needless casts to
4434         longs, ulongs and doubles for the parameters, avoiding calls to
4435         methods that overchecked stuff, and instead inlined things
4436         nicely. 
4437
4438 2007-01-20  Marek Safar  <marek.safar@gmail.com>
4439
4440         * cs-parser.jay: Better parameter error handling.
4441
4442 2007-01-17  Marek Safar  <marek.safar@gmail.com>
4443
4444         A fix for bug #80368, #80522
4445         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
4446         whether array initializer contains constants only.
4447         (ArrayCreation.Emit): Use better formula to decide when
4448         are array initializers for static initialization.
4449         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
4450         have to emit even constants otherwise they are pre-initialized.
4451
4452 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
4453             Raja R Harinath  <rharinath@novell.com>
4454
4455         Fix emit order of 'get' vs. 'set'.
4456         * support.cs (Accessors): New.
4457         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
4458         Note the order in which accessors are declared in the source.
4459         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
4460         Refactored from Property.Define and Indexer.Define.
4461         (PropertyBase.DefineAccessors): New helper that calls the above in
4462         appropriate order as noted by the parser.
4463         (Property.Define, Indexer.Define): Update to changes.
4464         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
4465
4466 2007-01-17  Raja R Harinath  <rharinath@novell.com>
4467
4468         Fix cs0029-6.cs and gcs0029-2.cs (regression)
4469         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
4470         there's an implicit conversion from the current type to the target
4471         type before converting the underlying constant.
4472
4473 2007-01-16  Marek Safar  <marek.safar@gmail.com>
4474
4475         * const.cs (ResolveValue): Updated after constant conversion was made more
4476         generic.
4477
4478         * constant.cs (GetAttributableValue): constant to object conversion is
4479         used for attributes only.
4480         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
4481         constant conversions.
4482         (LongConstant.ConvertImplicitly): Ditto.
4483
4484         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
4485         (ImplicitConversionStandard): Handle constant conversion as extra step.
4486         It solves the issue when constant conversion was called indirectly like
4487         inside array initializer and constant folding was skipped.
4488
4489         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
4490         this change.
4491
4492         * statement.cs(ImplicitConversionStandard): Updated after constant
4493         conversion was made more generic.
4494
4495 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
4496
4497         * expression.cs (As.DoResolve): Use GenericConstraints instead of
4498         Constraints, solves the problem where the compiler incorrectly
4499         reported that a type parameter was not constrained to a class (Bug
4500         80518)
4501
4502 2007-01-14  Marek Habersack  <grendello@gmail.com>
4503
4504         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
4505
4506 2007-01-14  Marek Safar  <marek.safar@gmail.com>
4507
4508         A fix for bug #80368
4509         * assign.cs (FieldInitializer): New class implements field
4510         initializer statement.
4511
4512         * attribute.cs: Update after FieldMember rename.
4513
4514         * class.cs (PropertyBasedMember): New common class for property based
4515         types.
4516         (InterfaceMemberBase): New base class for all members which can be used as
4517         an interface members.
4518         (MethodCore): Moved really common code to InterfaceMemberBase.
4519         (Method.Define): Equal and GetHasCode detection is relevant for methods
4520         only.
4521         (MethodData.Define): Don't assume that public event implements an
4522         interface automatically.
4523         (MethodData.DefineMethodBuilder): Issue an error even if only extern
4524         modifier is used.
4525         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
4526         (FieldMember): Merged with FieldBase.
4527         (EventProperty.AEventPropertyAccessor): New specialization to check whether
4528         event extern modifier can be used.
4529         (EventField.EventFieldAccessor): Moved event field specific code here.
4530         (Event.AllowedModifiers): Even event can be extern.
4531         (Event.FindOutBaseMethod): New override specific to events.
4532         (Indexer.parameters): Reintroduce parameters because base class holds
4533         only properties common data.
4534         (Indexer.CheckForDuplications): Indexers are threated as methods so we
4535         need do extra parameters check.
4536
4537         * const.cs: Update after FieldMember rename.
4538
4539         * decl.cs (MemberCache.FindBaseEvent): New method.
4540
4541         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
4542         to reflect that indexer is now derived from PropertyBased.
4543
4544         * ecore.cs (GetMemberType): Made public.
4545         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
4546         obsolete event.
4547
4548         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
4549         
4550         * typemanager.cs (CSharpSignature): Correctly print event accessors.
4551         (RegisterEvent): Removed.
4552         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
4553         (GetPrivateFieldOfEvent): Renamed to GetEventField.
4554
4555 2007-01-11  Raja R Harinath  <rharinath@novell.com>
4556
4557         Fix #80249
4558         * statement.cs (CollectionForeach.TryType): Prefer generic
4559         GetEnumerator over non-generic variant.  Fix code to follow comments.
4560
4561 2007-01-09  Raja R Harinath  <rharinath@novell.com>
4562
4563         Fix #80446
4564         * support.cs (ReflectionParameter): Don't use an invalid index on
4565         the generic parameter data.
4566
4567 2007-01-08  Miguel de Icaza  <miguel@novell.com>
4568
4569         * driver.cs: Just add a tiny bit of infrastructure.
4570
4571 2007-01-02  Marek Safar  <marek.safar@gmail.com>
4572
4573         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
4574         where field type is struct from current assembly.
4575         
4576         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
4577         it is possible.
4578
4579 2007-01-02  Marek Safar  <marek.safar@gmail.com>
4580
4581         A fix for bug #80381
4582         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
4583         the core types.
4584
4585         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
4586         messages.
4587         (Namespace.LookupType): Always use core types from corlib when speficied.
4588
4589         * report.cs: A new warning.
4590
4591         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
4592         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
4593         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
4594
4595         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
4596         (InitCoreTypes): Set expression type of object_type and value_type
4597         immediately after lookup.
4598
4599 2007-01-01  Miguel de Icaza  <miguel@novell.com>
4600
4601         * cs-tokenizer.cs: Accept Pc class characters (Connector
4602         Punctuation) as valid identifiers.  Fixes #78259
4603
4604         * expression.cs (Invocation.DoResolve): Moved the check for the
4605         use of `this' for doing method calls to the Invocation resolution
4606         step, after overload resolution has taken place instead of doing
4607         the check at the low-level `This.DoResolve' level.
4608
4609         The `This.DoResolve'(appens before overload resolution, so it has
4610         no way of knowing if the method that will be called will be
4611         instace or static, triggering an erroneous report for cs0188 (Bug
4612         78113).
4613
4614         We now do the check for instance method invocations after we know
4615         what method will be called.
4616
4617         (This.CheckThisUsage): Move the actual use of this structure
4618         checking into its own method and expose it. 
4619
4620         * Everywhere that called Error_ValueCannotBeConverted: pass a new
4621         EmitContext.
4622
4623         Exceptions: Null.ConvertImplicitly,
4624         Constant.ImplicitConversionRequired as there are too many call
4625         sites for passing the ec. 
4626
4627         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
4628         EmitContext, if the value is null, then we do not try to provide
4629         the extra information from the error (If a userdefined conversion
4630         exists, as UserDefinedConversion requires a non null-EmitContext).
4631
4632         Fixes: #80347
4633
4634 2006-12-30  Raja R Harinath  <rharinath@novell.com>
4635
4636         * flowanalysis.cs (MyBitVector): Document some invariants.
4637         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
4638         introduced below, and add a couple of others, 
4639
4640 2006-12-30  Marek Safar  <marek.safar@gmail.com>
4641
4642         * attribute.cs (GetMethodObsoleteAttribute): Uses new
4643         GetPropertyFromAccessor and GetEventFromAccessor.
4644         
4645         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
4646         overrides non-obsolete one.
4647         (Indexer.Define): Error message has been moved to the parser.
4648
4649         * cs-parser.jay: Better syntax errors handling.
4650
4651         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
4652         when an invocation has no arguments.
4653
4654         * ecore.cs: Removed not used caching.
4655
4656         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
4657         implementation.
4658
4659         * report.cs: Add a new warning.
4660
4661         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
4662
4663         * typemanager.cs (enumeration_type): Removed.
4664         (CSharpSignature): Reuses IsSpecialMethod.
4665         (IsEqual): Hack for MS BCL.
4666         (GetPropertyFromAccessor): New method.
4667         (GetEventFromAccessor): New method.
4668         (IsSpecialMethod): Fixed to handle more cases.
4669
4670 2006-12-30  Marek Safar  <marek.safar@gmail.com>
4671
4672         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
4673         Made white spaces array static.
4674
4675         * ecore.cs (RemoveGenericArity): Optimized.
4676
4677         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
4678         10 times faster).
4679         (MyBitVector.initialize_vector): Simplified.
4680
4681 2006-12-22  Miguel de Icaza  <miguel@novell.com>
4682
4683         * ecore.cs: Am not entirely happy with this hack, but it seems to
4684         address the issue in 80257 (a small test case for
4685         CreativeDocs.NET). 
4686
4687         I set the MethodGroupExpr.Type to an internal compiler type
4688         (itself in this case) to force the resolution to take place.   Why
4689         it does not take place with a null is beyond me.
4690
4691 2006-12-20  Marek Safar  <marek.safar@gmail.com>
4692
4693         A fix for bug #80288
4694         * expression.cs (ResolveOperator): Consider user defined conversion for
4695         logical and operator too.
4696         (EmitBranchable): Optimization for logical and when full constant folding
4697         could not be applied but one operand is constant.
4698
4699 2006-12-19  Marek Safar  <marek.safar@gmail.com>
4700
4701         * class.cs (GetClassBases): Write 5 times every day, will never use
4702         FullName for error reporting.
4703
4704         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
4705
4706 2006-12-19  Martin Baulig  <martin@ximian.com>
4707
4708         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
4709         the symbol file info here.
4710
4711 2006-12-18  Marek Safar  <marek.safar@gmail.com>
4712
4713         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
4714         of `elseif' is taking then following sections are not taking.
4715         Fixes an issue reported on mono mailing list.
4716
4717 2006-12-18  Marek Safar  <marek.safar@gmail.com>
4718
4719         A fix for bug #80300
4720         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
4721         a caller is not taking.
4722
4723 2006-12-18  Raja R Harinath  <rharinath@novell.com>
4724
4725         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
4726         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
4727         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
4728         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
4729         * class.cs: Update to changes.
4730
4731 2006-12-17  Marek Safar  <marek.safar@gmail.com>
4732
4733         A fix for bug #79934
4734         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
4735         partial container.
4736
4737         * class.cs (ResolveMembers): Register an iterator in current container and
4738         not in shared one.
4739
4740 2006-12-16  Raja R Harinath  <rharinath@novell.com>
4741
4742         Fix test-543.cs
4743         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
4744         satisfy a params annotated parameter.
4745
4746 2006-12-16  Marek Safar  <marek.safar@gmail.com>
4747
4748         A fix for bug #77014
4749         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
4750         paramters correctly and not rely on hacks in Parameters class.
4751         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
4752         at any possition.
4753         (Invocation.VerifyArgumentsCompat): Ditto.
4754         (Invocation.EmitArguments): Changed to correctly emit params arguments at
4755         any possition.
4756
4757         * parameter.cs (HasParams): Don't assume that params is the last one.
4758
4759         * support.cs (ReflectionParameters.ctor): Look for params attribute
4760         correctly.
4761         (ReflectionParameters.ParameterType): Removed hack when we returned last
4762         parameter for out of range parameters.
4763         (ParameterName, ParameterModifier): Ditto.
4764
4765 2006-12-14  Marek Safar  <marek.safar@gmail.com>
4766
4767         A fix for bug #79987
4768         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
4769         when assembly is not CLS compliant but type is. I have no idea why is this
4770         allowed.
4771
4772         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
4773
4774 2006-12-13  Miguel de Icaza  <miguel@novell.com>
4775
4776         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
4777         in struct constructors, they are basically no-ops.
4778
4779 2006-12-12  Marek Safar  <marek.safar@gmail.com>
4780
4781         * cs-tokenizer.cs (Position): Save preprocessor status too.
4782
4783 2006-12-12  Marek Safar  <marek.safar@gmail.com>
4784
4785         A fix for bug #77794
4786         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
4787
4788 2006-12-12  Marek Safar  <marek.safar@gmail.com>
4789
4790         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
4791         Fixes #69299.
4792         (pp_expr): Report error for an invalid expression.
4793         (handle_preprocessing_directive): Simplified; add more error checking.
4794
4795 2006-12-11  Marek Safar  <marek.safar@gmail.com>
4796
4797         A fix for bug #74939
4798         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
4799         directives handling.
4800
4801 2006-12-10  Marek Safar  <marek.safar@gmail.com>
4802
4803         A fix for bugs #80093, and #75984
4804         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
4805         logic, it seems to me as it worked before "by coincidence".
4806         (xtoken): Simplified to use reworked handle_preprocessing_directive.
4807         (cleanup): Enabled endif check.
4808
4809 2006-12-09  Marek Safar  <marek.safar@gmail.com>
4810
4811         A fix for bug #80162
4812         * statement.cs (CollectionForeach.TryType): Generics and non-generics
4813         enumerators are never ambiguous.
4814
4815 2006-12-08  Raja R Harinath  <rharinath@novell.com>
4816
4817         Fix #80060
4818         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
4819
4820 2006-12-06  Marek Safar  <marek.safar@gmail.com>
4821
4822         A fix for bug #80144
4823         * class.cs (EventProperty.Define): Explicit implementation means
4824         that an even is used.
4825
4826 2006-12-06  Marek Safar  <marek.safar@gmail.com>
4827
4828         Fixes the operators implementation (part II)
4829
4830         * cfold.cs (DoConstantNumericPromotions): Renamed to
4831         DoBinaryNumericPromotions and simplified.
4832         (BinaryFold): Couple of conversion fixes; simplified.
4833
4834         * constant.cs, ecore.cs, literal.cs
4835         (ToType): Renamed to ConvertImplicitly.
4836         (Reduce): Renamed to ConvertExplicitly.
4837
4838         * class.cs, convert.cs: Updated.
4839
4840         * expression.cs: TryReduce doesn't throw an exception.
4841
4842 2006-12-01  Marek Safar  <marek.safar@gmail.com>
4843
4844         A fix for bug #80108
4845         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
4846         compatible.
4847
4848 2006-11-30  Marek Safar  <marek.safar@gmail.com>
4849
4850         Fixes unary operators implementation (part I)
4851         Also fixes #80026
4852
4853         * cfold.cs (Error_CompileTimeOverflow): Made internal
4854
4855         * const.cs (IConstant): Changed to use reference to constant and
4856         not constant itself.
4857         Updated IConstant implementations.
4858
4859         * constant.cs (CreateConstant): New factory method.
4860         Updated IConstant implementation.
4861
4862         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
4863
4864         * ecore.cs: Updated to use CreateConstantReference.
4865
4866         * enum.cs: Reflects IConstant changes.
4867
4868         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
4869
4870         * literal.cs (NullConstant): Change to be independently usable.
4871
4872 2006-11-29  Martin Baulig  <martin@ximian.com>
4873
4874         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
4875         we need to emit the scope initializer before calling the base .ctor.
4876
4877         * anonymous.cs: Merged back from the new anonymous methods branch.
4878         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
4879
4880         * expression.cs (ParameterReference.DoResolveBase): Create a
4881         "normal" ScopeInfo when capturing parameters rather than using the
4882         root scope; this makes things work with anonymous methods having
4883         parameters.
4884
4885         * statement.cs
4886         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
4887
4888 2006-11-22  Marek Safar  <marek.safar@gmail.com>
4889
4890         A fix for bug #79987
4891         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
4892         check to a base class.
4893         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
4894         only when assembly has missing attribute.
4895         * report.cs: Update.
4896
4897 2006-11-21  Marek Safar  <marek.safar@gmail.com>
4898
4899         * cs-tokenizer.cs: Merged with gmcs version.
4900
4901 2006-11-20  Marek Safar  <marek.safar@gmail.com>
4902
4903         * cs-tokenizer.cs,
4904         * cs-parser.jay: Better error message when partial keyword is misplaced.
4905
4906 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
4907
4908         A fix for bug #79810
4909         report.cs: CS1058 only applies to 2.0 profile (gmcs).
4910         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
4911         a RuntimeWrappedException by default.
4912
4913 2006-11-18  Marek Safar  <marek.safar@gmail.com>
4914
4915         A fix for bug #79843
4916         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
4917         implementation.
4918         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
4919
4920 2006-11-18  Marek Safar  <marek.safar@gmail.com>
4921
4922         * driver.cs, namespace.cs: Uses faster IndexOf version.
4923
4924 2006-11-17  Marek Safar  <marek.safar@gmail.com>
4925
4926         A fix for bug #79941
4927         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
4928         operators.
4929         (Operator.Define): Implicit/Explicit operator of same type is duplicate
4930         even if internal name is different.
4931         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
4932         (UserDefinedConversion): Simplified as the operators cannot be internal.
4933         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
4934         conversions.
4935         (MethodLookup): Replaced EmitContext with parentType.
4936         * expression.cs: Updated.
4937
4938 2006-11-09  Raja R Harinath  <rharinath@novell.com>
4939
4940         * driver.cs (BadAssembly): Handle all the ugliness of
4941         DefineDynamicAssembly.
4942
4943 2006-11-08  Raja R Harinath  <rharinath@novell.com>
4944
4945         Address parts of #58244 -- most of what's left is in the runtime
4946         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
4947         CS1509 error checks, and handle them for all assembly loads, not
4948         just the first invocation.
4949         (LoadModule): Likewise.  Move handling of 'adder_method' ...
4950         * codegen.cs (AssemblyClass.AddModule): ... here.
4951
4952 2006-11-02  Marek Safar  <marek.safar@gmail.com>
4953
4954         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
4955         IEnumerable<T> is ambiguous.
4956
4957 2006-10-31  Marek Safar  <marek.safar@gmail.com>
4958
4959         A fix for bug #67689
4960         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
4961         GetEnumerator is ambiguous.
4962
4963         * report.cs: Add new warning.
4964
4965 2006-10-29  Marek Safar  <marek.safar@gmail.com>
4966
4967         A fix for bug #78602
4968         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
4969         to protected member can be nested type.
4970
4971 2006-10-28  Marek Safar  <marek.safar@gmail.com>
4972
4973         A fix for bug #78965
4974         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
4975         to protected member must derive from current type.
4976
4977 2006-10-27  Marek Safar  <marek.safar@gmail.com>
4978
4979         assign.cs: Reuses error method.
4980
4981         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
4982         instead of type for constants.
4983         (Expression.Error_ValueAssignment): Common error method.
4984
4985         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
4986         for any assignment.
4987
4988 2006-10-27  Marek Safar  <marek.safar@gmail.com>
4989
4990         A fix for bug #79081
4991         * expression.cs (MemberAccess.DoResolve): Check nested type
4992         accessibility.
4993
4994 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
4995
4996         * doc.cs : nested delegates were not handled. Fixed bug #79754.
4997
4998 2006-10-26  Marek Safar  <marek.safar@gmail.com>
4999
5000         A fix for bug #76591
5001         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
5002
5003 2006-10-26  Marek Safar  <marek.safar@gmail.com>
5004
5005         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
5006         type forwarder of the same type multiple times.
5007
5008 2006-10-26  Raja R Harinath  <rharinath@novell.com>
5009
5010         Fix #78820
5011         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
5012         instance as an rvalue, even when we later resolve as an lvalue.
5013
5014 2006-10-25  Martin Baulig  <martin@ximian.com>
5015
5016         * anonymous.cs: Fix #79673.
5017
5018 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
5019
5020         A fix for bug #79666
5021         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
5022         ignored when is optimized (= default value) as its value is already set.
5023
5024 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
5025
5026         A fix for bug #79724
5027         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
5028         TypeContainer for type lookup.
5029
5030 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
5031
5032         A fix for bug #79231
5033         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
5034         * expression.cs (OverloadResolve): Always convert type name for
5035         an error message.
5036         (ResolveNamespaceOrType): Don't confuse a nested type with any 
5037         other member.
5038
5039 2006-10-18  Martin Baulig <martin@ximian.com>
5040
5041         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
5042
5043 2006-10-17  Miguel de Icaza  <miguel@novell.com>
5044
5045         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
5046         an int32, but requesting an int64 from the conversion
5047
5048 2006-10-12  Martin Baulig  <martin@ximian.com>
5049
5050         * anonymous.cs
5051         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
5052         
5053 2006-10-12  Martin Baulig  <martin@ximian.com>
5054
5055         * statement.cs
5056         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
5057
5058 2006-10-11  Miguel de Icaza  <miguel@novell.com>
5059
5060         * convert.cs: Remove broken code: I was doing the "Existance"
5061         tests for Implicit conversions.
5062
5063 2006-10-10  Miguel de Icaza  <miguel@novell.com>
5064
5065         * convert.cs: Added one missing case in
5066         ImplicitStandardConversionExists uint64 to intptr.
5067
5068         Fixes #59800
5069         
5070         * typemanager.cs (uintptr_type): another core known type.   
5071
5072         * ecore.cs (OperatorCast): routine used to do cast operations that
5073         depend on op_Explicit.  We could change some of the Decimal
5074         conversions to use this.
5075
5076         This one has a probe mechanism that checks both types for an op_
5077         which it coudl be used to eliminate two classes: CastToDecimal
5078         and CastFromDecimal.
5079
5080         * convert.cs: Implement the conversions documented in #59800
5081         
5082 2006-10-10  Martin Baulig  <martin@ximian.com>
5083
5084         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
5085         before RootScope.ResolveMembers().
5086
5087         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
5088         `CurrentType' if appropriate.
5089
5090 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
5091
5092         A fix for bug #78568
5093         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
5094         when contains binary operators.
5095         * cs-parser.jay: Updated.
5096
5097 2006-10-09  Martin Baulig  <martin@ximian.com>
5098
5099         * delegate.cs
5100         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
5101         moved that into Define() and also do the other type parameter
5102         checks there.  Fixes #79094.  Added gtest-292.cs.
5103
5104         * expression.cs
5105         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
5106         since that doesn't include type parameters; don't use `Ldelema'
5107         for type parameters.  Fixes #78980.  Added gtest-293.cs.
5108
5109 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
5110
5111         A fix for #77796
5112         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
5113         conversion is allowed.
5114
5115 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
5116
5117         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
5118         error reporting when no error occurs.
5119
5120 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
5121
5122         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
5123         does not exist.
5124
5125 2006-10-06  Raja R Harinath  <rharinath@novell.com>
5126
5127         Fix #79584
5128         * class.cs (DefineTypeBuilder): Check circular dependencies before
5129         setting the parent of the TypeBuilder.
5130         (CheckRecursiveDefinition): Don't use 'BaseType', since
5131         it may not be valid until after DefineTypeBuilder.  Use
5132         'base_type' instead.
5133
5134 2006-10-04  Martin Baulig  <martin@ximian.com>
5135
5136         Merged the Anonymous Methods patch.
5137
5138         * anonymous.cs, iterators.cs: The new anonymous methods code.
5139
5140         * statement.cs (Variable): New public abstract class.
5141         (LocalInfo.Variable): New public property.
5142         (LocalInfo.ResolveVariable): New public method.
5143         (Block.Flags): Add `IsIterator'.
5144         (Block.AddVariable): Improved the CS0136 check.
5145         (Block.AnonymousChildren): New public property.
5146         (Block.AddAnonymousChild): New public method.
5147         (ToplevelBlock): Update to use the new anonymous method framework.
5148         (ToplevelBlock.ctor): `container' is now a `Block' and not a
5149         `ToplevelBlock'; this is required to correctly implement the
5150         CS0136 check.
5151         (Fixed, Using): Use `TemporaryVariable' instead of directly
5152         creating the `LocalBuilder'.
5153
5154         * parameter.cs (Parameter.ResolveVariable): New public method.
5155         (Parameters.ResolveVariable): Likewise.
5156
5157         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
5158
5159         * class.cs (TypeContainer): Replaced the `iterators' list and
5160         corresponding methods with a list of `CompilerGeneratedClass'es.
5161         (TypeContainer.ResolveMembers): New public method.
5162         (Method): `IIteratorContainer' has been replaced by
5163         `IAnonymousHost'.
5164
5165         * expression.cs (VariableReference): New public abstract base
5166         class for `LocalVariableReference', `ParameterReference' and
5167         `This'.
5168
5169         * codegen.cs (EmitContext): Removed `capture_context',
5170         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
5171         (EmitContext.EmitThis): Removed.
5172
5173         * cs-parser.jay: Replace `iterator_container' with
5174         `anonymous_host'.       
5175
5176 2006-10-04  Martin Baulig  <martin@ximian.com>
5177
5178         * generic.cs (GenericMethod): Don't make this abstract.
5179         (Constraints.Clone): Added dummy implementation.
5180
5181 2006-10-04  Raja R Harinath  <harinath@gmail.com>
5182
5183         Fix #79577
5184         * namespace.cs (LookForAnyGenericType): Avoid nullref on
5185         'declspaces'.  Avoid allocating arrays willy-nilly.
5186
5187         Fix #79553
5188         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
5189         cases out of the switch.
5190
5191 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
5192
5193         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
5194         message when non-generic type is used with the type arguments.
5195         * expression.cs: Updated.
5196
5197 2006-09-28  Raja R Harinath  <rharinath@novell.com>
5198
5199         Fix #79013
5200         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
5201         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
5202         Change semantics slightly.  Don't insist on having only one
5203         temporary EmptyExpression -- just throttle the creation of new ones.
5204
5205         Fix #79451
5206         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
5207         non-interfaces too.  If no methods are found, don't try to create
5208         a MethodGroupExpr.
5209
5210 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
5211
5212         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
5213         generic type.
5214
5215         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
5216         us produce better error message.
5217
5218 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
5219
5220         * expression.cs (Binary.ResolveOperator): Warn about a side effect
5221         of the `|' operator.
5222
5223         * report.cs: A new warning added.
5224
5225 2006-09-27  Martin Baulig  <martin@ximian.com>
5226
5227         * generic.cs (GenericMethod): Don't make this abstract.
5228
5229 2006-09-27  Martin Baulig  <martin@ximian.com>
5230
5231         * report.cs
5232         (InternalErrorException): Added overloaded ctor taking a params array.
5233
5234 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
5235
5236         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
5237         Fixed the cases when same error was reported twice.
5238
5239         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
5240         now report symbol information.
5241
5242 2006-09-25  Martin Baulig  <martin@ximian.com>
5243
5244         * class.cs: Completely unified with the gmcs version.
5245
5246 2006-09-25  Martin Baulig  <martin@ximian.com>
5247
5248         * typemanager.cs (TypeManager.IsNullableType): New public function.
5249         (TypeManager.IsNullableTypeOf): Likewise.
5250         (TypeManager.IsNullableValueType): Likewise.
5251
5252         * class.cs (MethodCore): Added the `GenericMethod' argument from
5253         gmcs and also unified all classes derived from `MethodCore' with gmcs.
5254
5255 2006-09-24  Raja R Harinath  <harinath@gmail.com>
5256
5257         * convert.cs: Unify with gmcs version.
5258
5259 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
5260
5261         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
5262         verify them as well.
5263
5264         * report.cs: New warning.
5265
5266 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
5267
5268         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
5269         for anonymous block with out argument.
5270
5271 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
5272
5273         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
5274         not used private events only.
5275
5276 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
5277
5278         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
5279
5280         * const.cs (Const.Define): Check for constant type.
5281         (Const.IsConstantTypeValid): Looks for valid constant types.
5282
5283         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
5284
5285         * ecore.cs (EmptyConstantCast): New common class for all constant based
5286         EmptyCast(s).
5287
5288         * expression.cs (Is.DoResolve): Handle null constant especially.
5289         (New.DoResolve): Check for new void().
5290         (MemberAccess.DoResolve): Cope with all kind of nulls.
5291
5292         * literal.cs (NullConstant): Uses EmptyConstantCast.
5293         (NullDefault): Based on EmptyConstantCast.
5294         (NullLiteral): Uses EmptyConstantCast.
5295
5296         * statement.cs (Block.ResolveMeta): Check for constant type.
5297
5298 2006-09-22  Martin Baulig  <martin@ximian.com>
5299
5300         * delegate.cs, attribute.cs: Merged with the gmcs versions.
5301
5302 2006-09-22  Raja R Harinath  <rharinath@novell.com>
5303
5304         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
5305         not the null type.
5306
5307         Fix part of #79451
5308         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
5309         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
5310         code slightly.
5311
5312 2006-09-22  Martin Baulig  <martin@ximian.com>
5313
5314         * ecore.cs: Merged with the gmcs version.
5315
5316         * generic.cs (ConstructedType): New dummy class.
5317         (TypeArguments): Don't make this abstract.
5318
5319         * typemanager.cs
5320         (TypeManager.IsGenericTypeDefinition): New method.
5321         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
5322
5323 2006-09-22  Raja R Harinath  <rharinath@novell.com>
5324
5325         * expression.cs (ComposedCast): Check for arrays of TypedReference
5326         before creating the type, not after.
5327
5328 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
5329
5330         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
5331         after ToType change.
5332
5333         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
5334         when constant must be implicitly convertible.
5335
5336         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
5337
5338         * ecore.cs (NullCast): Derives from NullConstant.
5339
5340         * expression.cs (Is.DoResolve): Removed useless variables.
5341         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
5342         (New.Constantify): Add enum support.
5343         (MemberAccess.DoResolve): Add warning when accessing null constant or
5344         variable.
5345
5346         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
5347         property.
5348
5349         * literal.cs (NullConstant): New abstract class with common
5350         functionality for all null specializations.
5351         (NullDefault): Represents default(X) when result can be
5352         reduced to null.
5353         (NullLiteral): Updated.
5354
5355         * report.cs: Add new warning.
5356
5357 2006-09-21  Martin Baulig  <martin@ximian.com>
5358
5359         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
5360
5361 2006-09-21  Martin Baulig  <martin@ximian.com>
5362
5363         * generic.cs (GenericConstraints): New dummy class.
5364         (Constraints): Likewise.
5365         (TypeParameter): Likewise.
5366         (TypeParameterName): Likewise.
5367         (GenericMethod): Likewise.
5368
5369         * typemanager.cs (TypeManager.GetGenericArguments): New method.
5370
5371         * decl.cs: Merged with the gmcs version.
5372
5373 2006-09-21  Raja R Harinath  <rharinath@novell.com>
5374
5375         * generic.cs (TypeParameter): Implement IMemberContainer.
5376         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
5377
5378         * rootcontext.cs: Unify with gmcs version.
5379
5380         * report.cs: Unify with gmcs version.
5381         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
5382         from gmcs/generics.cs.
5383         * generics.cs (TypeParameter): New dummy class.
5384
5385         * support.cs: Unify with gmcs version.
5386
5387 2006-09-20  Raja R Harinath  <rharinath@novell.com>
5388
5389         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
5390         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
5391
5392         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
5393         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
5394         * mcs.exe.sources: Add generic.cs.
5395
5396         * codegen.cs: Unify with gmcs version.
5397
5398         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
5399         (EmitContext): Add GenericDeclContainer implementation.
5400         * decl.cs (MemberCore, DeclSpace): Likewise.
5401         * namespace.cs: Remove #ifdef GMCS_SOURCE.
5402
5403         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
5404         MCS TypeManager has a corresponding dummy method.
5405
5406 2006-09-19  Martin Baulig  <martin@ximian.com>
5407
5408         * expression.cs: Completely merged with the gmcs version.
5409
5410 2006-09-19  Martin Baulig  <martin@ximian.com>
5411
5412         * expression.cs (Invocation): Merged with the gmcs version.
5413         (ArrayAccess.GetStoreOpcode): Likewise.
5414
5415 2006-09-19  Martin Baulig  <martin@ximian.com>
5416
5417         * typemanager.cs
5418         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
5419         (TypeManager.IsGenericMethodDefinition): Likewise.
5420
5421 2006-09-19  Martin Baulig  <martin@ximian.com>
5422
5423         * typemanager.cs
5424         (TypeManager.IsEqual): Moved the gmcs implementation here.
5425         (TypeManager.DropGenericTypeArguments): Likewise.
5426         (TypeManager.DropGenericMethodArguments): Likewise.
5427         (TypeManager.GetTypeArguments): Moved here from gmcs.
5428         (TypeManager.HasGenericArguments): Likewise.
5429
5430 2006-09-19  Martin Baulig  <martin@ximian.com>
5431
5432         * expression.cs (Binary): Merged with the gmcs version.
5433
5434 2006-09-19  Martin Baulig  <martin@ximian.com>
5435
5436         * expression.cs (Probe, As, Is): Merged with the gmcs version.
5437
5438 2006-09-19  Martin Baulig  <martin@ximian.com>
5439
5440         * typemanager.cs: Merged with the gmcs version.
5441
5442 2006-09-16  Raja R Harinath  <rharinath@novell.com>
5443
5444         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
5445         * driver.cs: Likewise.
5446
5447 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
5448
5449         A fix for #79401
5450         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
5451         only if parent type is class.
5452         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
5453         update.
5454
5455 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
5456
5457         * cs-parser.jay,
5458         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
5459         keywords are used.
5460         * typemanager.cs(CSharpName): Converts NullType to null.
5461
5462 2006-09-15  Martin Baulig  <martin@ximian.com>
5463
5464         * typemanager.cs
5465         (TypeManager.GetMethodName): Added mcs implementation.
5466         (TypeManager.IsEqual): Likewise.
5467
5468         * ecore.cs
5469         (SimpleName.RemoveGenericArity): Added dummy implementation.
5470
5471         * pending.cs: Merged with the gmcs version.     
5472
5473 2006-09-15  Martin Baulig  <martin@ximian.com>
5474
5475         * statement.cs: Merge with the gmcs version.
5476
5477 2006-09-15  Martin Baulig  <martin@ximian.com>
5478
5479         * statement.cs (Switch): Merge with the gmcs implementation
5480         (without nullables), which is newer.
5481
5482 2006-09-15  Martin Baulig  <martin@ximian.com>
5483
5484         * statement.cs (Block.Variables): Make this public.
5485         (ToplevelBlock.Parameters): Make this a property.
5486         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
5487
5488 2006-09-15  Martin Baulig  <martin@ximian.com>
5489
5490         * namespace.cs: Merge with the gmcs version.
5491
5492 2006-09-15  Martin Baulig  <martin@ximian.com>
5493
5494         * decl.cs (MemberName): Minor code cleanups.
5495
5496 2006-09-15  Martin Baulig  <martin@ximian.com>
5497
5498         * parameter.cs: Merge with the gmcs version.
5499
5500 2006-09-15  Martin Baulig  <martin@ximian.com>
5501
5502         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
5503         and an error in mcs.
5504
5505 2006-09-15  Martin Baulig  <martin@ximian.com>
5506
5507         * flowanalysis.cs: Merged from GMCS; added the generics code into
5508         a `GMCS_SOURCE' conditional so we can share this file.
5509
5510 2006-09-08  Martin Baulig  <martin@ximian.com>
5511
5512         * typemanager.cs (TypeManager.interlocked_type): New public field.
5513         (TypeManager.int_interlocked_compare-exchange): New public field.
5514         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
5515         enumerator types here and call InitGenericCoreTypes().
5516         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
5517         after calling InitEnumUnderlyingTypes().
5518
5519         * rootcontext.cs
5520         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
5521         `classes_second_stage'. 
5522
5523 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
5524
5525         * assign.cs, ecore.cs, expression.cs: Share error message text.
5526         * class.cs (FieldMember.Define): Check for varible of static type.
5527         * driver.cs (LoadAssembly): Uses error output for errors.
5528         * statement.cs: Updated.
5529
5530 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
5531
5532         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
5533         type instance.
5534
5535 2006-09-07  Martin Baulig  <martin@ximian.com>
5536
5537         * driver.cs
5538         (MainDriver): Revert r62663 from Marek; see #70506 for details.
5539
5540 2006-08-29  Miguel de Icaza  <miguel@novell.com>
5541
5542         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
5543         
5544 2006-08-17  Miguel de Icaza  <miguel@novell.com>
5545
5546         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
5547         #52019 and #79064, the use of the \uXXXX sequence in source code
5548         to represent unicode characters.
5549
5550 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
5551
5552         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
5553         support.
5554         * class.cs, ecore.cs, statement.cs: Merged to one error message.
5555
5556 2006-08-13  Miguel de Icaza  <miguel@novell.com>
5557
5558         * assign.cs: Catch attempts to assign to a method groups in += and
5559         report as 1656
5560
5561 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
5562
5563         A fix for #79056
5564         * cs-parser.jay: Don't destroy current array type by typeof of array's.
5565
5566 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
5567
5568         * class.cs (Method.Define): Issue a warning when generic method looks like
5569         an entry point.
5570         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
5571         as well.
5572
5573 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
5574  
5575         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
5576         looking for ctor.
5577         * decl.cs (MemberCache.FindMembers): When container is interface we need to
5578         search all base interfaces as a member can be ambiguous.
5579         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
5580         Constructor member type filter. 
5581         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
5582         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
5583         reporting for returned memberinfos.
5584         * report.cs: Updated.
5585         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
5586         version to work on all runtimes.
5587         (TypeManager.RealMemberLookup): Removed members filtering.
5588
5589 2006-08-08  Raja R Harinath  <rharinath@novell.com>
5590
5591         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
5592         (PropertyExpr.EmitAssign): Likewise.
5593         * expression.cs (Indirection.EmitAssign): Likewise.
5594         (LocalVariableReference.EmitAssign): Likewise.
5595         (ParameterReference.EmitAssign): Likewise.
5596         (Invocation.EmitArguments): Likewise.
5597         (ArrayAccess.EmitAssign): Likewise.
5598         (IndexerAccess.EmitAssign): Likewise.
5599         (This.EmitAssign): Likewise.
5600         (ConditionalLogicalOperator.Emit): Likewise.
5601
5602         Fix #79026
5603         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
5604         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
5605         leave it in after returning it.
5606         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
5607
5608 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
5609
5610         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
5611         message.
5612
5613 2006-08-03  Raja R Harinath  <rharinath@novell.com>
5614
5615         Fix cs0146-3.cs and cs0146-4.cs.
5616         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
5617         enclosing types don't depend on the current type.
5618
5619 2006-08-02  Raja R Harinath  <rharinath@novell.com>
5620
5621         Fix #77963
5622         * class.cs (TypeContainer.DoDefineMembers): Use
5623         FindBaseMemberWithSameName on Parent, since we're interested in
5624         whether we hide inherited members or not.
5625         (FindBaseMemberWithSameName): Make slightly more robust.
5626
5627         Fix the non-generic testcase from #77396
5628         * decl.cs (DeclSpace.DeclContainer): Remove override.
5629
5630         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
5631         declspaces for doppelgangers too.
5632         (UsingEntry): Implement IResolveContext.
5633         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
5634         'this' as the resolve context.
5635         (LocalAliasEntry): Likewise.
5636
5637         Implement parts of #77403
5638         * roottypes.cs (RootDeclSpace): New.  Used to represent the
5639         toplevel declaration space.  Each namespace declaration introduces
5640         a "partial" root declaretion space.
5641         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
5642         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
5643         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
5644         from 'current_namespace.SlaveDeclSpace'.
5645         (namespace_declaration): Likewise.
5646         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
5647         check.  It can't happen now.
5648         * decl.cs (DeclSpace.LookupType): Likewise.
5649         * driver.cs (MainDriver): Sanity check.
5650
5651 2006-08-01  Raja R Harinath  <rharinath@novell.com>
5652
5653         * decl.cs (DeclSpace.FindNestedType): Remove.
5654         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
5655         LookupTypeContainer to get the container of the nested type.
5656         * class.cs (TypeContainer.FindNestedType): Make non-override.
5657
5658 2006-07-31  Raja R Harinath  <rharinath@novell.com>
5659
5660         * decl.cs (DeclSpace.PartialContainer): Move field from ...
5661         * class.cs (TypeContainer.PartialContainer): ... here.
5662         (TypeContainer.AddBasesForPart): New helper.
5663         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
5664         instead.
5665         * cs-parser.jay (current_class): Convert to DeclSpace.
5666         (struct_declaration, interface_declaration, class_declaration):
5667         Use AddBasesForPart instead of .Bases directly.
5668         * const.cs, iterators.cs: Update to changes.
5669
5670 2006-07-28  Raja R Harinath  <rharinath@novell.com>
5671
5672         * class.cs (TypeContainer.AddMemberType): Rename from
5673         AddToTypeContainer.
5674         (TypeContainer.AddMember): Rename from AddToMemberContainer.
5675         (AddTypeContainer): New.  Combine AddClassOrStruct and
5676         AddInterface.
5677         (AddPartial): Update.  Add 'is_partial' argument.
5678         * roottypes.cs: Update to changes.
5679         * cs-parser.jay (push_current_class): New helper for handling
5680         current_container and current_class.
5681         (struct_declaration, interface_declaration, class_declaration):
5682         Use it.
5683
5684 2006-07-26  Raja R Harinath  <rharinath@novell.com>
5685
5686         * roottypes.cs: Rename from tree.cs.
5687
5688         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
5689         * tree.cs (Tree, ITreeDump): Remove types.
5690         * rootcontext.cs (tree, Tree): Remove fields.
5691         (root, ToplevelTypes): New.
5692         * *.cs: Update to rename.
5693
5694         * tree.cs (Tree.RecordDecl): Remove.
5695         (RootTypes.AddToTypeContainer): Record the toplevel type in its
5696         namespace here.
5697         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
5698
5699 2006-07-23  Raja R Harinath  <harinath@gmail.com>
5700
5701         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
5702         DoFlowAnalysis and OmitStructFlowAnalysis here.
5703         (ec.With): Rename from WithUnsafe and generalize.
5704         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
5705         (ec.WithFlowAnalyis): New.
5706         * ecore.cs, expression.cs, statement.cs: Update.
5707
5708 2006-07-22  Raja R Harinath  <harinath@gmail.com>
5709
5710         * statement.cs (Block.ResolveMeta): Simplify slightly.
5711
5712         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
5713         multiple boolean fields.  Convert InUnsafe, constant_check_state,
5714         check_state to flags.
5715         (CheckState, ConstantCheckState): Update.
5716         (InUnsafe): New read-only property.
5717         (FlagsHandle): Rename from CheckStateHandle and convert to handle
5718         arbitrary flags.
5719         (WithUnsafe): New helper similar to WithCheckState.
5720         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
5721         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
5722
5723 2006-07-21  Raja R Harinath  <rharinath@novell.com>
5724
5725         Make comparisons use the same IL irrespective of whether they're
5726         in a 'checked' or 'unchecked' context: one of the issues in #78899
5727         * codegen.cs (EmitContext.CheckState): Make read-only property.
5728         (EmitContext.ConstantCheckState): Likewise.
5729         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
5730         helper that implement a save/restore stack for CheckState
5731         values.  This is the only way to change check-state.
5732         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
5733         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
5734         (CheckedExpr.EmitBranchable): New forwarding method.
5735         (UnCheckedExpr): Likewise.
5736         * statement.cs (Block.ResolveMeta): Use WithCheckState.
5737         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
5738         (Checked.Resolve, checked.DoEmit): Likewise.
5739
5740 2006-07-20  Miguel de Icaza  <miguel@novell.com>
5741
5742         * anonymous.cs: Cache the resolved anonymous delegate, and return
5743         this so that the ResolveTopBlock is only triggered once, not
5744         twice.
5745
5746         Currently we trigger ResolvetopBlock twice due to a first pass of
5747         argument check compatibility, and a second pass that does the
5748         actual resolution.   
5749         
5750 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
5751
5752         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
5753         modifiers.
5754         * rootcontext.cs (Reset): Add helper_classes.
5755
5756 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
5757
5758         A fix for #78860
5759         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
5760         correctly.
5761
5762 2006-07-13  Miguel de Icaza  <miguel@novell.com>
5763
5764         * statement.cs (Lock): Handle expressions of type
5765         TypeManager.null_type specially.  Fixes #78770
5766
5767 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
5768
5769         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
5770         to an event.
5771
5772 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
5773
5774         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
5775         for accessors as well.
5776         * ecore.cs (EventExpr): Add AccessorTable.
5777
5778 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
5779
5780         A fix for #78738
5781         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
5782         for CS0122 where appropriate.
5783         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
5784         level attributes.
5785         (Filter): Assembly can be null in the case of top level attributes.
5786
5787 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
5788
5789         A fix for #78690
5790
5791         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
5792         is done at global level.
5793
5794 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
5795
5796         A fix for #77002, Implemented TypeForwarder support.
5797
5798         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
5799         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
5800         * typemanager.cs (): Add type_forwarder_attr_type.
5801
5802 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
5803
5804         * report.cs: Add CS0469 warning.
5805
5806 2006-06-21  Martin Baulig  <martin@ximian.com>
5807
5808         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
5809         the `try'-block, so we also report CS0016 etc. there.
5810
5811 2006-06-21  Martin Baulig  <martin@ximian.com>
5812
5813         * delegate.cs
5814         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
5815
5816 2006-06-21  Martin Baulig  <martin@ximian.com>
5817
5818         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
5819         also report CS1686 for parameters.
5820
5821 2006-06-21  Martin Baulig  <martin@ximian.com>
5822
5823         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
5824         instead of an error if the value is not implicitly convertible to
5825         the switch types; fixes #77964.
5826
5827 2006-06-21  Raja R Harinath  <rharinath@novell.com>
5828
5829         Fix #78673
5830         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
5831         FieldBuilder is null.
5832
5833         Fix #78662
5834         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
5835         'left' and 'right' before error-checking.
5836
5837 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
5838
5839         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
5840         Fixed bug #78601.
5841         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
5842         (FieldExpr.DoResolve): likewise.
5843         (PropertyExpr.InstanceResolve): likewise.
5844         (EventExpr.InstanceResolve): likewise. 
5845
5846 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
5847
5848         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
5849         attribute applicable tests for attribute argument.
5850
5851 2006-06-02  Raja R Harinath  <rharinath@novell.com>
5852
5853         Fix #78079
5854         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
5855         (Binary.OverloadResolve_PredefinedIntegral): New.
5856         (Binary.OverloadResolve_PredefinedFloating): New.
5857         (Binary.OverloadResolve_PredefinedString): New.
5858         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
5859         Follow the standard more closely, and treat numeric promotions in
5860         terms of overload resolution.
5861         (Binary.CheckShiftArguments): Simplify.
5862
5863 2006-06-01  Raja R Harinath  <rharinath@novell.com>
5864
5865         * flowanalysis.cs (MyBitVector): Simplify representation.
5866         (MyBitVector.Clone): Avoid allocating BitArray.
5867         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
5868         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
5869         (*): Update.  Change all references to MyBitVector.And and
5870         MyBitVector.Or to &= and |=.
5871
5872 2006-05-29  Raja R Harinath  <rharinath@novell.com>
5873
5874         Fix cs0231-[34].cs.
5875         * cs-parser.jay (formal_parameter_list): Extend the pattern below
5876         to param arguments too.
5877
5878 2006-05-26  Miguel de Icaza  <miguel@novell.com>
5879
5880         * cs-parser.jay: Catch another parsing form for arglist being
5881         followed by other arguments.  Fixes #78313.
5882
5883 2006-05-24  Raja R Harinath  <rharinath@novell.com>
5884
5885         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
5886         checking of out parameters to ...
5887         (FlowBranchingToplevel.Merge): ... here.
5888         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
5889         set, propagate the origin upward, and only complain if there was
5890         no other error.
5891         (FlowBranchingException.AddContinueOrigin): Likewise.
5892         (FlowBranchingException.AddReturnOrigin): Likewise.
5893         (FlowBranchingException.AddGotoOrigin): Likewise.       
5894
5895 2006-05-23  Raja R Harinath  <rharinath@novell.com>
5896
5897         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
5898         unreachable, skip it.
5899         (FlowBranchingException.Merge): Always propagate jumps, even if
5900         the finally block renders subsequent code unreachable.
5901
5902 2006-05-18  Raja R Harinath  <rharinath@novell.com>
5903
5904         Fix #77601
5905         * statement.cs (Goto.Resolve): Move responsibility for resolving
5906         'goto' to FlowBranching.AddGotoOrigin.
5907         (Goto.SetResolvedTarget): New.  Callback to set the
5908         LabeledStatement that's the target of the goto.
5909         (Goto.DoEmit): Use Leave instead of Br when crossing an
5910         unwind-protect boundary.
5911         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
5912         LookupLabel and adjust to new semantics.
5913         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
5914         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
5915         Goto.SetResolvedTarget to update target.
5916         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
5917         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
5918         AddBreakOrigin & co.  Delay propagation until ...
5919         (FlowBranchingException.Merge): ... this.
5920
5921         * statement.cs (Block.Resolve): Always depend on flow-branching to
5922         determine unreachability.  Kill workaround that originally emitted
5923         only one statement after an "unreachable" label (see infloop in
5924         test-515.cs).
5925
5926         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
5927         This is still "wrong", but anything better would probably need a
5928         multi-pass algorithm.
5929         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
5930         usage vector.  Force current usage vector to be reachable, to
5931         optimistically signify backward jumps.
5932         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
5933         detected.
5934         (FlowBranchingLabeled.Merge): New.  If no backward jump was
5935         detected, return the original salted-away usage vector instead,
5936         updated with appropriate changes.  Print unreachable warning if
5937         necessary.
5938         * statement.cs (Block.Resolve): Don't print unreachable warning on
5939         a labeled statement.
5940
5941 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
5942
5943         * driver.cs: Pass filename without path to AssemblyBuilder's 
5944         AddResourceFile. Fixes bug #78407.
5945
5946 2006-05-17  Raja R Harinath  <rharinath@novell.com>
5947
5948         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
5949         * flowanalysis.cs (FlowBranchingLabeled): ... here.
5950         (FlowBranching.MergeChild): Overwrite
5951         reachability information from Labeled branchings too.
5952
5953 2006-05-16  Raja R Harinath  <rharinath@novell.com>
5954
5955         * statement.cs (Goto.Resolve): Merge jump origins here ...
5956         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
5957
5958         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
5959         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
5960         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
5961         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
5962         here, ...
5963         * statement.cs (Goto.Resolve): ... not here.
5964         (Goto.Emit): Remove CS1632 check.
5965
5966 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
5967
5968         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
5969         error message.
5970
5971 2006-05-11  Raja R Harinath  <rharinath@novell.com>
5972
5973         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
5974         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
5975         (FlowBranchingException.Label): Likewise.
5976
5977         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
5978         given value.
5979         (MyBitVector.Or): Use it to avoid losing information (Count).
5980         (FlowBranching.MergeOrigins): Likewise.
5981
5982         * flowanalysis.cs (UsageVector.IsDirty): Remove.
5983         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
5984         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
5985         (UsageVector.ToString): Simplify.
5986         (UsageVector.MergeSiblings): Move here from ...
5987         (FlowBranching.Merge): ... here.
5988         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
5989         not a MyBitVector.
5990
5991 2006-05-10  Raja R Harinath  <rharinath@novell.com>
5992
5993         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
5994         null bitvector is treated as all-true.
5995
5996         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
5997         (MyBitVector): Rationalize invariants.  'vector != null' implies
5998         that we have our own copy of the bitvector.  Otherwise,
5999         'InheritsFrom == null' implies all inherited bits are true.
6000
6001 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
6002
6003         * statement.cs (LocalInfo): Add IsConstant.
6004         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
6005         local variable for constants.
6006
6007 2006-05-09  Raja R Harinath  <rharinath@novell.com>
6008
6009         * flowanalysis.cs (MyBitVector.Empty): New.
6010         (MyBitVector): Don't allow InheritedFrom to be null.
6011         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
6012         (UsageVector, FlowBranching): Update to changes.
6013
6014         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
6015         recursion.  The 'Parent == null' condition isn't sufficient for
6016         anonymous methods.
6017         (FlowBranching.AddBreakOrigin): Likewise.
6018         (FlowBranching.AddContinueOrigin): Likewise.
6019         (FlowBranching.AddReturnOrigin): Likewise.
6020         (FlowBranching.StealFinallyClauses): Likewise.
6021         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
6022         (FlowBranching.CheckOutParameters): Likewise.
6023         (FlowBranchingToplevel): Terminate all the above recursions here.
6024         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
6025         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
6026
6027         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
6028         toplevel block.
6029         (FlowBranchingToplevel): New.  Empty for now.
6030         (FlowBranching.MergeTopBlock): Update.
6031         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
6032         branching for the anonymous delegate.
6033         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
6034
6035         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
6036         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
6037         information at the start of the merge.  Reorganize.
6038
6039 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
6040
6041         * class.cs (MethodData.Define): Method cannot implement interface accessor.
6042
6043 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
6044
6045         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
6046         to newly introduced ctor.
6047
6048         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
6049         message to one place.
6050         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
6051         global namespace.
6052
6053 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
6054
6055         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
6056
6057         * ecore.cs (Expression.ResolveAsConstant): Updated.
6058
6059         * statement.cs (ResolveMeta): Updated.
6060
6061 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
6062
6063         * cs-parser.jay: __arglist cannot be used in initializer.
6064
6065 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
6066
6067         A fix for #77879
6068         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
6069         private types.
6070
6071 2006-05-05  Raja R Harinath  <rharinath@novell.com>
6072
6073         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
6074         (LabeledStatement): Add 'name' parameter.
6075         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
6076         (Block.AddLabel): Update to changes.
6077         * cs-parser.jay (labeled_statement): Likewise.
6078
6079         * flowanalysis.cs (BranchingType.Labeled): New.
6080         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
6081         (FlowBranchingLabeled): New.  Does nothing for now, but will
6082         eventually handle 'goto' flows.
6083         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
6084         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
6085         that's terminated ...
6086         (Block.Resolve): ... here.
6087
6088         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
6089         (UsageVector.MergeFinallyOrigins): Likewise.
6090         (FlowBranching.InTryOrCatch): Likewise.
6091         (FlowBranching.AddFinallyVector): Likewise.
6092         (FlowBranchingException): Update to changes.
6093
6094         Fix #78290
6095         * statement.cs (Return.Resolve): Move error checking to ...
6096         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
6097         (FlowBranchingException): Handle return origins like break and
6098         continue origins.
6099         (FlowBranching.UsageVector.CheckOutParameters): Remove.
6100
6101 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
6102
6103         A fix for #76122
6104         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
6105         filter.
6106
6107 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
6108
6109         A fix for #77543
6110         * class.cs (MethodData.Define): Do public accessor check only when method
6111         implements an interface.
6112
6113 2006-05-04  Raja R Harinath  <rharinath@novell.com>
6114
6115         Remove special handling of 'break'
6116         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
6117         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
6118         (UsageVector.Break): Remove.
6119         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
6120         reachability.
6121         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
6122
6123         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
6124         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
6125
6126 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
6127
6128         A fix for #75726
6129         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
6130         be the interface member.
6131
6132 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
6133
6134         A fix for #60069
6135         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
6136         for emitting small (int) values.
6137
6138 2006-05-03  Raja R Harinath  <rharinath@novell.com>
6139
6140         Fix #59427
6141         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
6142         control-flow passes through the 'finally' after merging-in all the
6143         control-flows from 'try' and the 'catch' clauses.
6144
6145         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
6146         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
6147         always true at the only non-recursive entry point.
6148         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
6149         FlowBranchingBreakable.
6150         (FlowBranchingLoop): Remove.
6151         * statement.cs (Return.DoResolve): Update to changes.
6152
6153         Fix #76471, #76665
6154         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
6155         (FlowBranching.CreateBranching): Handle it: create a
6156         FlowBranchingContinuable.
6157         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
6158         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
6159         except that it handles the 'continue' command.
6160         (FlowBranching.UsageVector.MergeOrigins): Rename from
6161         MergeBreakOrigins.
6162         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
6163         except that it overrides AddContinueOrigin.
6164         (FlowBranchingException): Override AddContinueOrigin, similar to
6165         AddBreakOrigin.
6166         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
6167         Create a new branching around the embedded statement.
6168         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
6169         control flow after the embedded statement.
6170         (Continue.Resolve): Move all error checking to AddContinueOrigin.
6171
6172         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
6173         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
6174         FlowBranchingBreakable.
6175         (FlowBranchingSwitch): Remove.
6176
6177         Fix test-503.cs
6178         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
6179         error reporting to ...
6180         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
6181         Rename from 'AddBreakVector'.  Add new location argument.  Return
6182         a bool indicating whether the 'break' crosses an unwind-protect.
6183         (FlowBranchingException.AddBreakOrigin): Add.
6184         (FlowBranchingException.Merge): Propagate 'break's to surrounding
6185         flowbranching after updating with the effects of the 'finally'
6186         clause.
6187         (FlowBranchingBreakable): New common base class for
6188         FlowBranchingLoop and FlowBranchingSwitch.
6189
6190         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
6191         embedded statement.
6192         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
6193
6194 2006-05-02  Raja R Harinath  <rharinath@novell.com>
6195
6196         * statement.cs (Do.Resolve): If the loop is infinite, set the
6197         barrier.
6198         (While.Resolve, For.Resolve): Set a barrier after the embedded
6199         statement.  There's no direct control flow that goes from the end
6200         of the embedded statement to the end of the loop.
6201         * flowanalysis.cs (FlowBranching.Infinite): Remove.
6202         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
6203         above ensure that the reachability is correctly computed.
6204
6205         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
6206         (UsageVector.MergeBreakOrigins): If the current path is
6207         unreachable, treat it as if all parameters/locals are initialized.
6208         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
6209         infinite loops before merging-in break origins.
6210
6211         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
6212         (Reachability.Reachable): Split part into ...
6213         (Reachability.Unreachable): ... this.  Simplify.
6214         (Reachability.IsUnreachable): Use 'Unreachable' instead.
6215
6216         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
6217         (Reachability.SetThrowsSometimes): Likewise.
6218         (FlowBranchingBlock.MergeTopBlock): Don't compare against
6219         TriState.Always, use corresponding property.
6220         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
6221         (Block.Resolve): Likewise.  Remove some redundant checks.
6222
6223 2006-05-02  Raja R Harinath  <harinath@gmail.com>
6224
6225         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
6226         (Reachability.Meet): Don't bother checking AlwaysThrows --
6227         barrier is always set.
6228         (FlowBranchingBlock.Merge): Likewise.
6229
6230 2006-05-01  Raja R Harinath  <harinath@gmail.com>
6231
6232         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
6233         checks for unreachable.
6234
6235 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
6236
6237         A fix for #77980
6238         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
6239
6240         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
6241         whether field is really assigned.
6242
6243 2006-04-30  Raja R Harinath  <harinath@gmail.com>
6244
6245         * flowanalysis.cs (Reachability): Make 4-argument constructor
6246         private.
6247         (Reachability.Meet): Rename from 'And'.  Remove static variant.
6248         (Reachability.Always): Rename from the highly misleading
6249         'Reachability.Never'.
6250         (FlowBranching.Merge): Update to changes.  Mark an impossible
6251         situation with a 'throw'.
6252         (*): Update to changes.
6253
6254 2006-04-29  Raja R Harinath  <harinath@gmail.com>
6255
6256         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
6257         Remove 'Undefined'.
6258         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
6259         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
6260         (*): Update to changes.
6261         * statement.cs: Update to changes.
6262
6263 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
6264
6265         A fix for #78049
6266         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
6267
6268 2006-04-28  Raja R Harinath  <harinath@gmail.com>
6269
6270         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
6271         dummy UsageVector.
6272
6273         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
6274         argument to two arguments: an usage-vector and a bool.  Move call
6275         to FlowBranching.Merge () ...
6276         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
6277
6278         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
6279         handling of loop and switch reachability to ...
6280         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
6281
6282 2006-04-27  Raja R Harinath  <harinath@gmail.com>
6283
6284         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
6285         handling to FlowBranchingLoop.InLoop.
6286         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
6287
6288 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
6289
6290         A fix for #78115
6291         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
6292         anonymous method is allowed from AnonymousContainer here.
6293
6294         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
6295
6296 2006-04-24  Raja R Harinath  <rharinath@novell.com>
6297
6298         Fix #78156
6299         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
6300
6301 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
6302
6303         A fix for #49011.
6304         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
6305         (DoubleConstant.Reduce): Ditto.
6306
6307 2006-04-23  Raja R Harinath  <rharinath@novell.com>
6308
6309         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
6310         Remove 'lvalue_right_side' argument.  Move parts to ...
6311         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
6312         (LocalVariable.DoResolveLValue): ... these.
6313
6314 2006-04-21  Raja R Harinath  <rharinath@novell.com>
6315
6316         Fix cs1655.cs
6317         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
6318         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
6319         (LocalVariableReference.DoResolveBase): Use it to implement new
6320         CS1655 check.
6321         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
6322         (Argument.Resolve): Simplify.  Move CS1510 check ...
6323         * ecore.cs (Expression.ResolveLValue): ... here.
6324         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
6325         (PropertyExpr.DoResolveLValue): Likewise.
6326         (FieldExpr.Report_AssignToReadonly): Likewise.
6327         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
6328         LValueMemberAccess or LValueMemberOutAccess on instance depending
6329         on it.
6330         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
6331         DoResolve as appropriate.
6332
6333 2006-04-20  Raja R Harinath  <rharinath@novell.com>
6334
6335         Fix #75800
6336         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
6337         implicit conversions on 'out' and 'ref' arguments.
6338
6339         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
6340         improve clarity.  Remove dead code.
6341
6342         Fix #66031
6343         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
6344         (Catch.Resolve): Resolve VarBlock if it exists.
6345
6346 2006-04-19  Miguel de Icaza  <miguel@novell.com>
6347
6348         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
6349         twice, this was some residual code, the enumerator was emitted
6350         properly in the two branche of if later.
6351
6352 2006-04-19  Raja R Harinath  <rharinath@novell.com>
6353
6354         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
6355         cast is never an lvalue.
6356         (Cast.DoResolve, Cast.ResolveRest): Combine.
6357         (Argument.Emit): Simplify slightly.  Move 'Expr is
6358         IMemoryLocation' check ...
6359         (Argument.Resolve): ... here.
6360         (Argument.Error_LValueRequired): Remove.  Inline into only user.
6361
6362         Simplifications.  Fix cs0191-2.cs
6363         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
6364         CS1649 and CS1651 to ...
6365         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
6366         the actual selection of the error code and message to a lookup
6367         table.  Add a dummy return value to simplify callsites.
6368         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
6369         readonly fields of other instances of the same type.  Move CS0197
6370         warning from ...
6371         * expression.cs (Argument.Resolve): ... here.  Simplify code.
6372         Ensure that ec.InRefOutArgumentResolving is only set during LValue
6373         resolution of an out or ref argument.  The code simplification
6374         above uses this invariant.
6375
6376 2006-04-18  Raja R Harinath  <rharinath@novell.com>
6377
6378         Possibly fix #77752.  Fix cs1690-[4-7].cs.
6379         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
6380         CheckMarshallByRefAccess.  Drop parameter.
6381         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
6382         warning.
6383         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
6384         InstanceExpression.
6385         * report.cs (AllWarnings): Add CS1690.
6386         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
6387         for ref access too.
6388         (LocalVariableReference.DoResolveBase): Update.
6389
6390 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
6391
6392         * class.cs (MethodOrOperator): Moved common parts from method class.
6393         detect obsolete attributes.
6394         (Method.Define): Simplified as it reuses code from base.
6395         (Constructor.ValidAttributeTargets): Fixed issue found during
6396         refactoring.
6397         (Destructor.ValidAttributeTargets): Fixed issue found during
6398         refactoring.
6399         (Operator): Finished refactoring set off by #78020. Operator class is now
6400         ordinary method class.
6401
6402         * anonymous.cs: Updated.
6403
6404         * decl.cs (DeclSpace): Add IsGeneric
6405
6406 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
6407
6408         * class.cs (Constructor.Emit): Don't emit the attributes twice.
6409
6410 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
6411
6412         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
6413         detect obsolete attributes.
6414         (Method.CreateEmitContext): Moved to MethodOrOperator.
6415
6416 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
6417
6418         A fix for #78048.
6419         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
6420         customized exception to make crash detection easier.
6421         (MethodOrOperator): Started to work on new base class for methods and
6422         operators.
6423         (Method): Derives from MethodOrOperator.
6424         (Constructor.Emit): Emits its own attributes.
6425         (AbstractPropertyEventMethod.Emit): Ditto.
6426         (Operator): Derives from MethodOrOperator, will refactor fully in extra
6427         patch.
6428         (Operator.Emit): It's temporary more tricky than should be.
6429         
6430         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
6431
6432         * report.cs (InternalErrorException): Add ctor with inner exception.
6433
6434 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
6435
6436         A fix for #76744.
6437         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
6438         only not visible.
6439
6440 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
6441
6442         A fix for #77916.
6443         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
6444         array.
6445
6446 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
6447
6448         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
6449         attribute is present and Guid not.
6450         (Interface.ApplyAttributeBuilder): Ditto.
6451
6452         * attribute.cs: Add error message.
6453
6454 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
6455
6456         A fix for #78020.
6457
6458         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
6459         sources (it's composite) so hold them in extra array as they are used in
6460         Emit phase only. It worked in the previous versions by mistake.
6461         (Attribute.Emit): Emit attribute for more owners when exist.
6462
6463         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
6464         it has now different behaviour.
6465
6466 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
6467
6468         * constant.cs (Constant.IsDefaultInitializer): New method.
6469
6470         * class.cs: Updated.
6471
6472         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
6473         re-initialize default values. It saves KBs almost for every assembly.
6474         Thanks Zoltan for the idea.
6475         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
6476         (ArrayCreation.DoResolve): Resolve only once.
6477         (ArrayCreation.Emit): Emit static initializer only when it is faster.
6478         (ArrayCreation.GetAttributableValue): Cope with optimized values.
6479
6480 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
6481
6482         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
6483         From #77961.
6484
6485 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
6486
6487         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
6488         in an embedded statement too.
6489
6490 2006-04-01  Raja R Harinath  <rharinath@novell.com>
6491
6492         Fix #77958
6493         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
6494
6495 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
6496
6497         A fix for #77966.
6498
6499         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
6500         was not specified.
6501
6502         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
6503
6504 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
6505
6506         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
6507         phase.
6508
6509         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
6510         LocalTemporary change.
6511
6512         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
6513         TypeContainer.
6514         (ClassOrStruct.DefineFieldInitializers): Implemented static field
6515         initializers optimization.
6516         (ClassOrStruct.TypeAttr): Moved from modifiers.
6517         (Constructor.CheckBase): Don't crash when static ctor has parameters.
6518         (FieldBase.ResolveInitializer): Resolves initializer.
6519         (FieldBase.HasDefaultInitializer): New property.
6520
6521         * cs-parser.jay: Removed message.
6522
6523         * expression.cs (CompilerGeneratedThis): New specialization.
6524
6525         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
6526
6527 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
6528
6529         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
6530
6531 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
6532
6533         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
6534         be now EnumConstants only.
6535
6536 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
6537
6538         * attribute.cs, driver.cs: Reset more caches.
6539
6540 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
6541
6542         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
6543
6544 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
6545
6546         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
6547         for easier reuse. Updated all overrides.
6548         (IntegralConstant): New base class for all integral constants.
6549         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
6550         of the constant range, report custom error.
6551         (UIntConstant.Reduce): Fixed uint conversion.
6552
6553         * ecore.cs, literal.cs: Reduce updates.
6554
6555 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
6556
6557         A fix for #75813.
6558
6559         * class.cs (Constructor.Define): Removed extra if for default ctors.
6560         A patch from Atsushi Enomoto.
6561
6562 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
6563
6564         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
6565         GetAttributableValue.
6566
6567         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
6568         when required.
6569
6570         * convert.cs (ImplicitConversionRequired): Error message moved to
6571         DoubleLiteral.
6572
6573         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
6574         automatic implicit conversion of an output value.
6575         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
6576
6577         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
6578         conversion.
6579         (TypeOf.GetAttributableValue): Add extra handling for object type.
6580
6581         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
6582         special error message.
6583
6584 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
6585
6586         * class.cs (Constructor.Emit): Don't crash when struct ctor is
6587         InternalCall.
6588         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
6589         compatible with MS runtime.
6590
6591 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
6592
6593         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
6594         attribute arguments here.
6595
6596         * class.cs (Indexer.Define): The check was moved to attribute class.
6597
6598 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
6599
6600         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
6601         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
6602         easier.
6603
6604 2006-03-22  Raja R Harinath  <rharinath@novell.com>
6605
6606         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
6607         mcs to keep code differences small.
6608         * attribute.cs (Attribute.GetParameterDefaultValue): New.
6609         * typemanager.cs (parameter_default_value_attribute_type): New.
6610         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
6611         CS1908 check.
6612
6613 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
6614
6615         * expression.cs (StringConcat.Append): Reverted back to no warning state.
6616
6617 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
6618
6619         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
6620
6621         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
6622         the blocks too.
6623
6624 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
6625
6626         * doc-bootstrap.cs : fix build.
6627
6628 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
6629
6630         * expression.cs (StringConcat.Append): Issue a warning when empty string
6631         is going to append.
6632
6633 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
6634
6635         * assign.cs (CompoundAssign.ResolveSource): Removed.
6636
6637         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
6638         clean up.
6639
6640         * class.cs (TypeContainer.FindMethods): Removed.
6641         (TypeContainer.CheckMemberUsage): Made static.
6642
6643         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
6644
6645         * constant.cs (CheckRange): Removed unused type argument.
6646         (CheckUnsigned): Removed unused type argument.
6647
6648         * cs-parser.jay: Updated after MemberAccess clean up.
6649         Uses Length for empty string test.
6650
6651         * cs-tokenizer.cs: Uses Length for empty string test.
6652         (IsCastToken): Made static.
6653         (is_hex): Made static.
6654         (real_type_suffix): Made static.
6655
6656         * decl.cs (SetupCache): Made static.
6657         (OnGenerateDocComment): Removed unused ds argument.
6658
6659         * delegate.cs (VerifyDelegate): Removed unused argument.
6660
6661         * doc.cs: Uses Length for empty string test.
6662
6663         * driver.cs: Uses Length for empty string test.
6664
6665         * enum.cs (IsValidEnumType): Made static
6666
6667         * expression.cs (EnumLiftUp): Removed unused argument.
6668         (ResolveMethodGroup): Ditto.
6669         (BetterConversion): Ditto.
6670         (GetVarargsTypes): Ditto.
6671         (UpdateIndices): Ditto.
6672         (ValidateInitializers): Ditto.
6673         (MemberAccess.ctor): Ditto.
6674         (GetIndexersForType): Ditto.
6675
6676         * flowanalysis.cs: (MergeFinally): Removed unused argument.
6677
6678         * iterators.cs: Updated after MemberAccess clean up.
6679
6680         * location.cs: Uses Length for empty string test.
6681
6682         * namespace.cs: Uses Length for empty string test.
6683
6684          * report.cs (CheckWarningCode): Made static.
6685
6686         * statement.cs (LabeledStatement): Removed unused argument.
6687
6688         * typemanager.cs (FilterNone): Removed.
6689
6690 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
6691
6692         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
6693         obsolete.
6694
6695         * class.cs: Updated.
6696
6697 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
6698
6699         * cs-parser.jay.cs: __arglist is not allowed for delegates.
6700
6701 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
6702
6703         A fix for #77822.
6704
6705         * expression.cs (VerifyArgumentsCompat): Reverted to double error
6706         reporting, it's more tricky than I thought.
6707
6708 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
6709
6710         A fix for #77816.
6711
6712         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
6713         host container.
6714         (AnonymousMethod.ImplicitStandardConversionExists): New method.
6715         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
6716         Add more error reporting; Fixed issue with params.
6717
6718         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
6719
6720         * cs-parser.jay: AnonymousMethod requires host container.
6721
6722         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
6723
6724 2006-03-18  Raja R Harinath  <harinath@gmail.com>
6725
6726         * class.cs: Change 'TypeContainer ds' constructor argument to
6727         'DeclSpace parent'.  Some classes were missed below due to
6728         different naming convention.
6729
6730         * class.cs (MemberCore.Parent): Delete.  This makes the
6731         ParentContainer changes below enforceable by the compiler.
6732
6733         Treat pointers to enclosing declaration space as 'DeclSpace', not
6734         'TypeContainer'.
6735         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
6736         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
6737
6738         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
6739         of TypeContainer.
6740         (Block.AddThisVariable): Likewise.
6741         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
6742         (AbstractPropertyEventMethod.Emit): Likewise.
6743         (AbstractPropertyEventMethod.EmitMethod): Likewise.
6744         (GetMethod.Define, SetMethod.Define): Likewise.
6745         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
6746         (DelegateMethod.EmitMethod): Likewise.
6747
6748         Fix regression test-partial-13.cs.
6749         Rationalize use of PartialContainer.  Ensure that the partial
6750         class semantics can be tied to type-correctness, i.e., any
6751         violation will cause a compile error.
6752         * class.cs, const.cs: Access all fields that belong to class
6753         TypeContainer via ParentContainer.  Arguments of EmitContexts and
6754         Resolve()-like functions still use 'Parent'.
6755
6756         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
6757         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
6758         (PropertyMethod.CheckModifiers): Remove unused argument.
6759         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
6760         DeclSpace.
6761
6762 2006-03-17  Raja R Harinath  <harinath@gmail.com>
6763
6764         Make semantics of PartialContainer simpler.
6765         * decl.cs (DeclSpace.IsPartial): Remove.
6766         * class.cs (TypeContainer.IsPartial): Likewise.
6767         (TypeContainer..ctor): Set PartialContainer to point to self.
6768         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
6769         (TypeContainer.FindNestedType): Likewise.
6770         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
6771
6772 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
6773
6774         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
6775
6776 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
6777
6778         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
6779         classes.
6780
6781 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
6782
6783         * class.cs (Operator.Define): An error for base conversion was not
6784         reported correctly.
6785
6786 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
6787
6788         * iterator.cs : yield break is allowed in try statement which has
6789           catch clauses. Fixed bug #77767.
6790
6791 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
6792
6793         A fix for #77593, #77574.
6794
6795         * class.cs (MethodCore.CheckBase): Another if for operator.
6796
6797 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
6798
6799         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
6800         were not resolved
6801
6802         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
6803         (DelegateCreation.ImplicitStandardConversionExists): New method for just
6804         conversion test.
6805         
6806         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
6807         not needed.
6808
6809         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
6810         Updated after another emitcontext usage was clean up. It should help us to
6811         synchronize with gmcs easier.
6812
6813 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
6814
6815         A fix for #77353.
6816
6817         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
6818         (Event.Define): ditto
6819         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
6820
6821         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
6822         Removed redundant code and set NewSlot for Invoke method too.
6823
6824         * parameter.cs (Parameters.ctor): Add custom, type ctor.
6825         (Parameters.MergeGenerated): New method. Use this method when you merge
6826         compiler generated argument with user arguments.
6827
6828 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
6829
6830         * attribute.cs (ResolveAsTypeTerminal): Removed.
6831
6832         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
6833         specialization for predefined types; 30% speed up.
6834         Finally placed obsolete check to right place.
6835         (Expression.ResolveType): Removed.
6836
6837         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
6838         Updated after ResolveType was removed.
6839
6840         * expression.cs (Cast.ctor): Check void cast.
6841         (Binary.ResolveAsTypeTerminal): Is never type.
6842         (Conditional.ResolveAsTypeTerminal): Is never type.
6843
6844         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
6845
6846 2006-03-01  Raja R Harinath  <rharinath@novell.com>
6847
6848         Fix #77679.
6849         * expression.cs (ParameterReference.DoResolveBase): Change return
6850         type to bool.
6851         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
6852         Update.
6853
6854         Fix #77628.
6855         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
6856
6857         Fix #77642.
6858         * typemanager.cs (GetFullNameSignature): Don't nullref on
6859         protected accessors.
6860
6861 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
6862
6863         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
6864         these two separated members to simplify the code.
6865         (Attribute.Resolve): Refactored to use new fields and methods.
6866         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
6867         implemented obsolete attribute checking.
6868         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
6869         implemented obsolete checking again. It look line never ending quest ;-)
6870         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
6871
6872         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
6873
6874         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
6875
6876         *class.cs (Property.Define): Add RegisterProperty call.
6877
6878         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
6879         argument groups (only 2).
6880
6881         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
6882         encoding expression to arguments.
6883         (Expression.ExprClassToResolveFlags): Just turned to property.
6884
6885         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
6886         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
6887         optimized as well as implemented support for zero-length attributes.
6888
6889         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
6890         Add caching of PropertyInfo's.
6891
6892 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
6893
6894         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
6895         error multiple times.
6896
6897 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
6898
6899         New partial class implementation.
6900         A fix for #77027, #77029, #77403
6901
6902         * attribute.cs (Attributable): Made attributes protected.
6903
6904         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
6905         the replacements of ClassPart and PartialContainer.
6906         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
6907         (TypeContainer.AddInterface): Ditto.
6908         (TypeContainer.AddPartial): The main method for partial classes. It checks
6909         for errors and merges ModFlags and attributes. At the end class is added to
6910         partial_parts list.
6911         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
6912         required here.
6913         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
6914         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
6915         from the rest of partial classes.
6916         (TypeContainer.GetClassBases): Simplified.
6917         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
6918         DefineType.
6919         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
6920         (TypeContainer.HasExplicitLayout): Uses Flags now.
6921         (PartialContainer): Removed.
6922         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
6923         (StaticClass): Was merged with Class.
6924         (Class.GetClassBases): class and static class bases are verified here.
6925         (Class.TypeAttr): Added static attributes when class is static.
6926         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
6927         (MemberBase): In some cases we need to call parent container for partial
6928         class. It should be eliminated but it's not easy now.
6929
6930         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
6931
6932         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
6933         partial classed to accumulate class comments.
6934         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
6935
6936         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
6937
6938         * driver.cs (MainDriver): Tree.GetDecl was removed.
6939
6940         * modifiers.cs (Modifiers): Add partial modifier.
6941
6942         * tree.cs (Tree.decl): Removed.
6943         (RootTypes): Started to use this class more often for root types
6944         specializations.
6945
6946 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
6947
6948         A fix for #77615
6949
6950         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
6951         external interface does not have an attribute.
6952
6953 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
6954
6955         Another prerequisites for new partial classs implementation.
6956         
6957         * attribute.cs (Attribute.Equal): Implemented.
6958         (Attribute.Emit): Changed as attributes can be applied more than twice.
6959         (Attributes.Emit): Check for duplicate attributes here.
6960
6961         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
6962         as a parameter, clean-up.
6963
6964 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
6965
6966         A fix for #77485
6967
6968         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
6969         contains obsolete attribute check which can in some cases look for base
6970         type of current class which is not initialized yet.
6971         (TypeContainer.BaseType): Replacement of ptype.
6972
6973         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
6974
6975 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
6976
6977         First of prerequisites for new partial classs implemention.
6978         
6979         * attribute.cs (Attributable): Extended by ResolveContext;
6980         Attributes finally have correct context for resolving in all cases.
6981         (AttachTo): Attribute owner is assigned here.
6982
6983         * codegen.cs (IResolveContext): Introduce new interface to hold
6984         all information needed in resolving phase.
6985         (EmitContext): Implements IResolveContext; more clean-up needed here.
6986         
6987         * decl.cs (MemberCore): Implemented IResolveContext.
6988
6989         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
6990         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
6991         parameter.cs, statement.cs, tree.cs, typemanager.cs:
6992         Refactored to use new IResolveContext instead of EmitContext; cleanup
6993
6994 2006-02-06  Miguel de Icaza  <miguel@novell.com>
6995
6996         * codegen.cs (EmitScopeInitFromBlock): check here the
6997         capture_context, there is no need to make two calls to the
6998         EmitContext. 
6999
7000         * anonymous.cs: Add some debugging messages that might help me
7001         track other instances of this problem in the future (the
7002         regression of test 467).
7003
7004         * cs-parser.jay: track the variable block, as we need to initalize
7005         any captured variables declared in this block for the "catch"
7006         portion of the "Try" statement.
7007
7008         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
7009         scope initialization for captured variables. 
7010
7011         Also, move the emit for the variables after the block location has
7012         been marked.
7013
7014 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
7015
7016         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
7017
7018 2006-02-02  Miguel de Icaza  <miguel@novell.com>
7019
7020         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
7021         commit yesterday, the initialization for the roots is necessary.
7022         What is not necessary is the scope activation.
7023
7024 2006-02-02  Raja R Harinath  <rharinath@novell.com>
7025
7026         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
7027         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
7028         CS0206 checks.
7029         (Argument.Resolve): Remove CS0206 checks.
7030
7031 2006-02-01  Miguel de Icaza  <miguel@novell.com>
7032
7033         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
7034         scopes for all the roots, the scopes will now be emitted when the
7035         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
7036
7037         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
7038         code.  This reduces a lot of existing cruft.
7039         
7040         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
7041         that the ScopeInfo is generated as we enter the scope, not at the
7042         time of use, which is what we used to do before.
7043
7044         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
7045         every time a Block is about to be emitted if we have a
7046         CaptureContext. 
7047
7048 2006-02-01  Raja R Harinath  <rharinath@novell.com>
7049
7050         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
7051         (Reset): Update.
7052         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
7053
7054         * typemanager.cs (cons_param_array_attribute): Make private.
7055         (Reset): Set it to null.
7056         (InitCoreHelpers): Don't initialize it.
7057         (ConsParamArrayAttribute): New.  Initialize it as needed.
7058         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
7059
7060 2006-01-31  Miguel de Icaza  <miguel@novell.com>
7061
7062         * expression.cs: There might be errors reported during the
7063         selection of applicable methods.  If there are errors, do not
7064         continue execution as it will lead the compiler to crash.
7065
7066 2006-01-30  Miguel de Icaza  <miguel@novell.com>
7067
7068         * expression.cs: Member access is not allowed on anonymous
7069         methods.  Fixes #77402.
7070
7071 2006-01-30  Raja R Harinath  <rharinath@novell.com>
7072
7073         Fix #77401
7074         * cs-parser.jay (VariableDeclaration): Don't set
7075         current_array_type to null.
7076         (field_declaration, event_declaration, declaration_statement):
7077         Set it to null here.
7078
7079 2006-01-28  Raja R Harinath  <harinath@gmail.com>
7080
7081         * typemanager.cs (GenericParameterPosition): New.
7082         * doc.cs: Use it.
7083
7084 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
7085
7086         * doc.cs : To process "include" elements, first we should create
7087           another list than XmlNodeList, because it could result in node
7088           removal, which could result in that the XmlNodeList gives up
7089           yielding next node.
7090
7091           (Also made code identical to gmcs again.)
7092
7093 2006-01-25  Miguel de Icaza  <miguel@novell.com>
7094
7095         * ecore.cs: Introduce an error report that we were not catching
7096         before, if not silent, we must report the error.  Gonzalo ran into
7097         it.
7098
7099 2006-01-23  Miguel de Icaza  <miguel@novell.com>
7100
7101         A fix for bug: #76957
7102         
7103         * iterators.cs (MoveNextMethod.CreateMethodHost): call
7104         ComputeMethodHost before creating the method, this is a new
7105         requirement. 
7106
7107         * anonymous.cs (AnonymousContainer): Now we track all the scopes
7108         that this method references (RegisterScope).  The actual scope
7109         where the method is hosted is computed with the ComputeMethodHost
7110         before we create the method.
7111
7112         Moved the Deepest routine here.
7113
7114         (AnonymousContainer.ComputeMethodHost): New routine used to
7115         compute the proper ScopeInfo that will host the anonymous method.
7116
7117         (ScopeInfo): Deal with multiple roots.  The problem was that we
7118         did not have a unique root where all ScopeInfos could be hanged
7119         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
7120         of roots.  
7121
7122         Remove AdjustMethodScope which is now computed at the end.  Remove
7123         LinkScope which did a partial link, instead link all ScopeInfos
7124         before code generation from the new "LinkScopes" routine. 
7125
7126         Simplify all the Add* routines as they no longer need to maintain
7127         the tree, they just need to record that they are using variables
7128         from a ScopeInfo.
7129
7130         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
7131         routines to produce the forest of ScopeInfo trees.
7132
7133         * class.cs (TypeContainer.AppendMethod): This is just like
7134         AddMethod, but ensures that an interface implementation method
7135         (IEnumerable.XXX) is not inserted at the beginning of the queue of
7136         methods, but at the end.
7137
7138         We use this functionality to ensure that the generated MoveNext
7139         method in the iterator class is resolved/emitted before the
7140         enumerator methods created.   
7141
7142         This is required because the MoveNext method computes the right
7143         ScopeInfo for the method.  And the other methods will eventually
7144         need to resolve and fetch information computed from the anonymous
7145         method. 
7146
7147 2006-01-21  Raja R Harinath  <harinath@gmail.com>
7148             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
7149
7150         Fix rest of #76995.
7151         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
7152         the 'aliases' hash.
7153         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
7154         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
7155
7156 2006-01-18  Raja R Harinath  <rharinath@novell.com>
7157
7158         Fix #76656, cs0231-2.cs.
7159         * cs-parser.jay (formal_parameter_list): Make error case catch
7160         more issues.
7161         (parenthesized_expression_0): Add CS1026 check.
7162         (invocation_expression): Remove unused { $$ = lexer.Location }.
7163
7164 2006-01-17  Raja R Harinath  <rharinath@novell.com>
7165
7166         Fix #76824.
7167         * cs-parser.jay (statement_expression): Don't list out the
7168         individual statement-expressions.  Convert syntax error into
7169         CS0201 check.
7170
7171 2006-01-16  Raja R Harinath  <rharinath@novell.com>
7172
7173         Fix #76874.
7174         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
7175         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
7176         CheckIntermediateModification.
7177         (FieldExpr.DoResolve): Add new two-argument version that
7178         allows us to resolve the InstanceExpression as an lvalue.
7179         The one-argument variant is now just a wrapper.
7180         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
7181         Resolve the lhs as an lvalue if the it has a value type.
7182         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
7183         from Assign.DoResolve.
7184         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
7185         resolved as an lvalue.
7186         (PropertyExpr.DoResolve): Update.
7187         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
7188         has a value type.  Move CS1612 check here from
7189         CheckIntermediateModification.
7190         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
7191         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
7192         'right_side' of a ResolveLValue on an 'out' argument.
7193         (EmptyExpression.LValueMemberAccess): New.  Used as the
7194         'right_side' of a propagated ResolveLValue on a value type.
7195         (LocalVariableReference.DoResolveBase): Recognize
7196         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
7197         Add CS1654 check.
7198         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
7199         EmptyExpression.Null.
7200
7201 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
7202
7203         * typemanager.cs : added IsGenericParameter(). In mcs it always
7204           return false.
7205         * doc.cs : for generic parameters, use GenericParameterPosition,
7206           not FullName.
7207
7208 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
7209
7210         * expression.cs: Fix Console.WriteLine ((this = x).foo);
7211
7212 2006-01-12  Miguel de Icaza  <miguel@novell.com>
7213
7214         This fixes the problem where we used ldfld instead of ldflda to
7215         load the "THIS" pointer on captured parameters, when THIS is a
7216         value type.  See bug #77205.
7217         
7218         * iterators.cs (CapturedThisReference.Emit): Pass false to
7219         EmitThis (we do not need the address).
7220
7221         * codegen.cs (EmitThis): it needs to know whether we need the
7222         address of `this' or not.  This is used by value types.  
7223
7224         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
7225         every other call passes false.
7226
7227 2006-01-12  Raja R Harinath  <rharinath@novell.com>
7228
7229         Fix #77221.
7230         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
7231         GetOverride.
7232         * expression.cs (Invocation.OverloadResolve): Update.
7233         (Invocation.DoResolve): Avoid double resolution of invocation.
7234
7235 2006-01-11  Raja R Harinath  <rharinath@novell.com>
7236
7237         Fix #77180.
7238         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
7239         unary negation of floating point types as 0-expr; negation cannot
7240         overflow in floating point types.
7241
7242         Fix #77204.
7243         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
7244         on operands of 'void' type.
7245
7246         Fix #77200.
7247         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
7248         and ExclusiveOr for boolean constants too.
7249
7250 2006-01-09  Raja R Harinath  <rharinath@novell.com>
7251
7252         Fix #75636.
7253         * expression.cs (Invocation.OverloadResolve): Replace reflected
7254         override methods with their base virtual methods, rather than
7255         skipping over them.
7256         * typemanager.cs (TypeManager.GetOverride): New.
7257
7258 2006-01-05  Jb Evain  <jbevain@gmail.com>
7259
7260         * class.cs (Property.Define, Indexer.Define): do not tag the
7261         properties as SpecialName | RTSpecialName.
7262
7263 2006-01-04  Miguel de Icaza  <miguel@novell.com>
7264
7265         * class.cs (MethodCore.IsDuplicateImplementation): This method was
7266         doing a low-level comparission of parameter types.  It was lacking
7267         a check for __argslist. 
7268
7269 2005-12-30  Miguel de Icaza  <miguel@novell.com>
7270
7271         * expression.cs (ParameterReference.DoResolveBase): Allow
7272         reference parameters if they are local to this block. 
7273
7274         This allows the ref and out parameters of a delegate to be used in
7275         an anonymous method, for example:
7276
7277         delegate void set (out int x);
7278
7279         set s = delegate (out int x){
7280                 x = 0;
7281         };
7282
7283         This is used by functionality introduced late in the C# language.
7284         
7285         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
7286         method that take ref and out parameters. 
7287
7288         Fixes #77119 which was a late change in the spec.
7289
7290 2005-12-23  Miguel de Icaza  <miguel@novell.com>
7291
7292         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
7293         parent if its the same scope.  Fixes #77060.
7294
7295 2005-12-21  Miguel de Icaza  <miguel@novell.com>
7296
7297         * driver.cs: Report the case of no source files and no -out:
7298         argument provided.
7299
7300 2005-12-20  Raja R Harinath  <rharinath@novell.com>
7301
7302         Fix #77035.
7303         * expression.cs (ComposedCast.GetSignatureForError): Define.
7304
7305 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
7306
7307         Fix #76995
7308
7309         * namespace.cs (NamespaceEntry): Add extern_aliases as a
7310         ListDictionary, to contain the ExternAliasEntry entries (in
7311         addition to the NamespaceEntry.aliases hashtable). This field is
7312         shared between the original entry and its doppelganger (bodyless 
7313         copy of it).
7314         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
7315         extern_aliases field.
7316         (NamespaceEntry.Lookup): Move the IsImplicit check after the
7317         lookup in extern_aliases.
7318
7319 2005-12-16  Raja R Harinath  <rharinath@novell.com>
7320
7321         Fix #77006.
7322         * class.cs (TypeContainer.Mark_HasEquals): New.
7323         (TypeContainer.Mark_HasGetHashCode): New.
7324         (ClassPart): Override them.
7325         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
7326
7327         Fix #77008.
7328         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
7329         'parent' argument to the base constructor.
7330
7331         Remove all mention of TypeContainer from decl.cs.
7332         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
7333         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
7334         (DeclSpace.DeclSpace): Likewise.
7335         (DeclSpace.DefineMembers): Remove unused argument.
7336         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
7337         debugging check -- we don't care if the debug code throws an
7338         InvalidCastException instead of an InternalErrorException.
7339         * class.cs (TypeContainer.DefineMembers): Update to changes.
7340         (TypeContainer.DoDefineMembers): Likewise.
7341         (TypeContainer.GetMethods): Likewise.
7342         (PropertyMember.Define): Likewise.
7343         (MemberBase.Parent): New property that forwards to
7344         MemberCore.Parent, but ensures that we get a TypeContainer.
7345         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
7346         (RootContext.PopulateTypes): Likewise.  Remove special case code
7347         for !RootContext.StdLib: DefineMembers is idempotent.
7348
7349 2005-12-14  Miguel de Icaza  <miguel@novell.com>
7350
7351         * convert.cs (ExplicitConversionCore): Check the return value from
7352         ExplicitConversionCore which can return null on failure.  Fixes #76914
7353
7354 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
7355
7356         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
7357
7358 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
7359
7360         * doc.cs : The search for referenced namespace was insufficient to
7361           get global one as it used to do. Fixed bug #76965.
7362
7363 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
7364
7365         * doc.cs : check name in cref in the last phase that whether it is
7366           namespace or not.
7367
7368 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
7369
7370         * cs-tokenizer.cs : reverted the latest change: it somehow broke
7371           Mono.C5.
7372
7373 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
7374
7375         * doc.cs : so it turned out that we cannot skip override check for 
7376           interface members. Fixed bug #76954.
7377
7378 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
7379
7380         * cs-tokenizer.cs : fixed bug #75984:
7381           - #warning and #error should not be handled when the source line
7382             is disabled.
7383           - #line is not checked strictly when the source line is disabled.
7384           - #define and #undef is on the other hand checked strictly at any
7385             state.
7386
7387 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
7388
7389         * cs-tokenizer.cs : missing Location (actually, filename) in one of
7390           CS1027 report.
7391
7392 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
7393
7394         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
7395
7396         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
7397         event initializers.
7398         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
7399         (FieldBase.Initializer): Initializer is now optional.
7400         (EventField.Define): Only event field can have initializer.
7401
7402         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
7403
7404         * const.cs (Const): Reuse initializer.
7405
7406         * cs-parser.jay: Updated after FieldBase changes.
7407         Added current_array_type to simplify array initializers.
7408
7409         * ecore.cs (NullCast.IsDefaultValue): Implemented.
7410
7411         * expression.cs, iterators.cs: Updated.
7412
7413         * namespace.cs (NamespaceEntry): Made UsingFound private.
7414
7415 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
7416
7417         * parameterCollection.cs: Obsolete, removed.
7418         * parser.cs: Obsolete, removed.
7419
7420 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
7421
7422         Fix #76849.
7423         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
7424
7425         * enum.cs (Enum.Define): Set obsolete context here.
7426
7427 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
7428
7429         * doc.cs :
7430           - FindDocumentedMember() now expects 1) paramList as null
7431             when "we don't have to check the number of parameters" and
7432             2) Type.EmptyTypes when "there is no arguments".
7433           - Introduced FoundMember struct to hold the exact type which was
7434             used to find the documented member (the above change broke
7435             test-xml-044; it might be better just to use DeclaringType than
7436             what MS does, like this change does, but it depends on usage.)
7437
7438 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
7439
7440         * doc.cs : documented member might be from DeclaringType for nested
7441           types. Fixed bug #76782.
7442
7443 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
7444
7445         * anonymous.cs: Have the param code handle leaving copies on the
7446         stack etc. Allows anonymous params to take part in the assignment
7447         code (++, +=, etc). Fixes bug #76550
7448
7449         * expression.cs: Handle the prepare_for_load/leave_copy by passing
7450         it down to the anon code.
7451
7452         * iterators.cs: Use dummy var here
7453
7454         * codegen.cs: Handle new vars
7455
7456 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
7457
7458         Fix #76849.
7459         * class.cs (MethodData.Define): Set proper Obsolete context.
7460
7461         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
7462         obsolete context.
7463         (FieldExpr.DoResolve): Ditto.
7464
7465 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
7466
7467         Fix #76849.
7468         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
7469         parent is not obsolete.
7470
7471 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
7472
7473         * doc.cs : (FindDocumentedMember) find parameterless members first
7474           and get CS0419 in the early stage. Fixed first case of bug #76727.
7475
7476 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
7477
7478         Fix #76859.
7479         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
7480         no error was reported.
7481
7482         *expression.cs (Binary.DoResolve): left can be null.
7483
7484 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
7485
7486         Fix #76783.
7487         * class.cs (MethodData.Emit): Parameters should be labeled first.
7488
7489 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
7490
7491         Fix #76761.
7492         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
7493
7494 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
7495
7496         * attribute.cs (AreParametersCompliant): Moved to Parameter.
7497
7498         * class.cs (MethodCore): Parameter clean up.
7499         (IMethodData): Added ParameterInfo.
7500         (MethodData): Parameter clean up.
7501         (Indexer.Define): Parameter clean up.
7502
7503         * anonymous.cs,
7504         * codegen.cs,
7505         * cs-parser.jay,
7506         * decl.cs,
7507         * doc.cs,
7508         * ecore.cs,
7509         * flowanalysis.cs,
7510         * iterators.cs,
7511         * pending.cs,
7512         * statement.cs,
7513         * typemanager.cs: Parameter clean up.
7514
7515         * delegate.cs (Define): Get rid of duplicated code.
7516
7517         * expression.cs (ParameterReference): Removed useless parameters
7518         and simplified.
7519         (Invocation): Ditto.
7520
7521         * parameter.cs (ParamsParameter): New class, params specialization.
7522         (ArglistParameter): Attemp to separate arglist.
7523         (Parameter): Refactored to be reusable and faster.
7524         (Parameter.Modifier): Made understandable.
7525         (Parameters): Changed to be used as a class for `this' assembly
7526         parameters. Refactored to use new specialized classes.
7527
7528         * support.cs (ParameterData): Added Types property.
7529         (InternalParameters): Deleted.
7530
7531 2005-08-20  Martin Baulig  <martin@ximian.com>
7532
7533         Merging this patch from GMCS to fix #75867.
7534
7535         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
7536         scope if we don't already have it.
7537
7538 2005-11-17  Martin Baulig  <martin@ximian.com>
7539
7540         * anonymous.cs
7541         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
7542         inherit the scope from our parent.  Fixes #76653.
7543
7544 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
7545
7546         * doc.cs : the previous patch does not actually fix the bug.
7547           PropertyInfo override check is now implemented and really fixed it.
7548         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
7549
7550 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
7551
7552         * doc.cs : apply "override filter" also to properties.
7553           Fixed bug #76730.
7554
7555 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
7556
7557         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
7558           no need to check overrides. For classes, omit those results from 
7559           interfaces since they must exist in the class. Fixed bug #76726.
7560
7561 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
7562
7563         * typemanager.cs : (GetFullNameSignature) differentiate indexers
7564           with different parameters. Fixed the second problem in #76685.
7565
7566 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
7567
7568         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
7569           get expected 'protected' access in CheckValidFamilyAccess()).
7570           Fixed bug #76692.
7571
7572 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
7573
7574         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
7575           Fixed bug #76705.  CS1569 was incorrectly commented out.
7576
7577 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
7578
7579         * doc.cs : use Invocation.IsOverride() to do real override check.
7580         * expression.cs : made Invocation.IsOverride() internal.
7581
7582 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
7583
7584         * doc.cs : use TypeManager.FindMembers() instead of (possible)
7585           TypeBuilder.FindMembers() and filter overriden base members out.
7586           Fixed bug #76990.
7587
7588 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
7589
7590         * doc.cs : ref/out parameters are represented as '@' (instead of
7591           '&' in type FullName). Fixed bug #76630 (additionally crefs).
7592
7593 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
7594
7595         * doc.cs : when there was no '.' in cref to methods in doc comment,
7596           then parameters were missing in the output. Fixed bug #76691.
7597
7598 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
7599
7600         * driver.cs : don't output docs when there is an error.
7601           Fixed bug #76693.
7602
7603 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
7604
7605         * doc.cs :
7606           Now it should detect indexers. Fixed primary concern in bug #76685.
7607           Fixed CS0419 message to not show the identical member signature in
7608           the message.
7609
7610 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
7611
7612         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
7613           instead of Type.FindMembers() since it does not handle events.
7614           Fixed bug #71604.
7615
7616 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
7617
7618         * codegen.cs: Fixed typo (speficied -> specified).
7619
7620 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
7621
7622         Fix #76369.
7623         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
7624
7625 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
7626
7627         * attribute.cs: Changed error message.
7628
7629         * cs-tokenizer.cs: One more check.
7630
7631 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
7632
7633         * statement.cs (Block.Resolve): Ignore empty statement.
7634
7635 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
7636
7637         * report.cs: Made error/warning methods more strict to avoid
7638         their misuse.
7639
7640         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
7641         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
7642         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
7643         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
7644
7645 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
7646
7647         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
7648         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
7649
7650         * class.cs (TypeContainer.IsComImport): New property.
7651         (Constructor.Define): Create proper ctor for ComImport types.
7652
7653         * expression.cs (New.CheckComImport): Fixed.
7654
7655 2005-11-07  Miguel de Icaza  <miguel@novell.com>
7656
7657         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
7658         that a parameter has been captured does not mean that we do not
7659         have to do the rest of the processing.  This fixes the second part
7660         of #76592.  If there was another anonymous method capturing
7661         values in the past, the Scope would never be set for the second
7662         method that captured the same parameter.
7663
7664         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
7665         properly manipulate the stack.   Second part of fix for #76592.
7666
7667         * expression.cs (New): Add support for invoking "new" on
7668         interfaces that have been flagged with the ComImport attribute and
7669         the CoClass.  Fixes #76637 
7670
7671         * statement.cs (Try.DoEmit): When a variable is captured, do not
7672         try to emit the vi.LocalBuilder variable as it has been captured.
7673         Create a temporary variable and store the results on the
7674         FieldBuilder.  Fixes #76642
7675
7676 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
7677
7678         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
7679
7680         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
7681
7682         * expression.cs (Binary.DoResolve): Added && optimalization.
7683     
7684         * typemanager.cs (AddUserType): Removed useless argument.
7685
7686 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
7687
7688         * statement.cs (Block.variables): Uses ListDictionary.
7689
7690 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
7691
7692         Fix #75969.
7693         * class.cs (PartialContainer.EmitType): Customized to emit
7694         security attributes.
7695         (ClassPart.ApplyAttributeBuilder): Transform security attribute
7696         for partial classes.
7697
7698 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
7699
7700         Fix #76599.
7701         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
7702         access has to be fixed.
7703         
7704         * typemanager.cs (IsUnmanagedType): Wrong common field type.
7705
7706 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
7707
7708         Fix #76590.
7709         * ecore.cs (NullCast.Reduce): Implemented.
7710
7711         * expression.cs (ArrayCreation.CheckIndices): Correcly check
7712         constant type.
7713         
7714         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
7715         properly.
7716         (Foreach.Resolve): Catch null properly.
7717
7718 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
7719  
7720         * cs-tokenizer.cs: Warning text fix.
7721
7722         * driver.cs: AllWarningNumbers exposed on public interface.
7723
7724         * report.cs (): Reviewed warning numbers.
7725         (IsValidWarning): Use binary search.
7726
7727 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
7728  
7729         * driver.cs: Implemeted resource visibility.
7730         (Resources): New class for code sharing between /res: and
7731         /linkres:
7732  
7733 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
7734
7735         Fix #76568.
7736         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
7737         folding.
7738         
7739         * convert (Convert.ImplicitReferenceConversion): NullCast holds
7740         contants only.
7741         
7742         * ecore.cs (NullCast): Child is contant only.
7743         
7744         * literal.cs (NullLiteral.Reduce): null can be converted to any
7745         reference type.
7746
7747 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
7748
7749         * driver.cs: Use Encoding.Default as default code page instead
7750           of ISO-28591.
7751
7752 2005-10-27  Raja R Harinath  <rharinath@novell.com>
7753
7754         Fix #76085.
7755         * expression.cs (Invocation.Error_InvalidArguments): Handle
7756         __arglist parameters.
7757         (Invocation.VerifyArgumentsCompat): Likewise.
7758         * support.cs (ReflectionParameters.GetSignatureForError): Print
7759         __arglist parameters.
7760         (InternalParamters.GetSignatureForError): Likewise.
7761         * parameter.cs (Parameters.GetSignatureForError): Likewise.
7762
7763 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
7764
7765         * attribute.cs (GetPropertyValue): Made public.
7766
7767         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
7768         Resolve.
7769         Add new property WrapNonExceptionThrows to handle 2.0 assembly
7770         attribute.
7771         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
7772         is not defined.
7773         
7774         * driver.cs: Reflect method name change.
7775         
7776         * statement.cs (Try.Resolve): Warn when try has both general
7777         exception handlers.
7778         
7779         * typemanager.cs: runtime_compatibility_attr_type new predefined
7780         type.
7781
7782 2005-10-26  Raja R Harinath  <harinath@gmail.com>
7783
7784         Fix #76419.
7785         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
7786         treat it as an empty parameter list.
7787
7788 2005-10-26  Raja R Harinath  <rharinath@novell.com>
7789
7790         Fix #76271.     
7791         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
7792         ResolveAsTypeStep silent.
7793         * statement.cs (Block.AddConstant): Mark block as used.
7794         (Block.ResolveMeta): Avoid piling on error messages
7795         if a constant initializer resolution fails.
7796
7797 2005-10-25  Raja R Harinath  <rharinath@novell.com>
7798
7799         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
7800         Remove.
7801         (NamespaceEntry.VerifyAllUsing): New.
7802         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
7803         behaviour.  Delegates actual resolution of alias to ...
7804         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
7805         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
7806         Update.
7807         * driver.cs (Driver.MainDriver): Update.
7808         
7809         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
7810         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
7811         property.
7812         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
7813         Remove.
7814         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
7815         RootNamespace.DefineNamespacesForAll.
7816
7817 2005-10-24  Raja R Harinath  <harinath@gmail.com>
7818
7819         * typemanager.cs (assemblies, external_aliases, modules)
7820         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
7821         (ComputeNamespaces, GetRootNamespace): Remove extra staging
7822         overhead.  Move resposibility ...
7823         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
7824         * driver.cs, attribute.cs, codegen.cs: Update to changes.
7825
7826 2005-10-23  Raja R Harinath  <harinath@gmail.com>
7827
7828         * namespace.cs (RootNamespace.all_namespaces): Renamed from
7829         cached_namespaces.  Improve usage.
7830         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
7831         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
7832         Move from GlobalRootNamespace and simplify.
7833         (RootNamespace.Global): Make instance variable.
7834         (RootNamespace.RootNamespace): Add "alias name" parameter.
7835         (GlobalRootNamespace): Simplify drastically.
7836         (Namespace.Lookup): Don't use GetNamespace.
7837         * typemanager.cs (GetRootNamespace): Rename from
7838         ComputeNamespaceForAlias.
7839         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
7840
7841 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
7842
7843         * anonymous.cs (AnonymousContainer): Don't crash when container
7844         doesn't exist.
7845
7846 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
7847
7848         * expression.cs (Binary.DoResolve): Warn when comparing same
7849         values.
7850
7851 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
7852
7853         Fix #76486.
7854         * expression.cs (Binary.DoResolve): It looks like there are no
7855         convetsion rules in enum context.
7856
7857 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
7858
7859         Add support for extern alias qualifiers.
7860         * typemanager.cs: Move some LookupTypeReflection code
7861         to namespace.cs, to have cleaner code. Added some methods
7862         to help us keep track of the extern aliased references.
7863         * driver.cs: Add suport for extern alias assemblies on command
7864         line and check for their warnings/errors. Also keep track of the
7865         extern aliased assemblies.
7866         * namespace.cs: Move the global functionality of Namespace
7867         to GlobalRootNamespace/RootNamespace. Now the global namespace
7868         is GlobalRootNamespace.Globa. Also the code moved from 
7869         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
7870         Finally added LocalAliasEntry (AliasEntry before) and
7871         ExternAliasEntry, to handle alias statements.
7872         * cs-parser.jay: Add support in the grammar for extern alias
7873         statement.
7874         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
7875         Update callings to Namespace (now in GlobalRootNamespace).
7876
7877 2005-10-18  Raja R Harinath  <rharinath@novell.com>
7878
7879         Fix #76371.
7880         * class.cs (TypeContainer.DefineType): Move updating of
7881         topological sort earlier in the code.
7882         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
7883
7884 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
7885
7886         Fix #76273.
7887         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
7888         
7889         * constant.cs (Constant.TryReduce): Moved from Cast class.
7890         (Reduce): Made little bit more OO and fixed missing conversions.
7891         
7892         * ecore.cs (Reduce): Implemented.
7893         (Binary.EnumLiftUp): New method to upgrade values to enum values.
7894         
7895         * literal.cs (Reduce): Implemented.
7896         
7897         * class.cs: Reverted Miguel's wrong commit.
7898
7899 2005-10-14  Miguel de Icaza  <miguel@novell.com>
7900
7901         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
7902
7903 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
7904
7905         * cs-parser.jay, expression.cs : CS0214 was missing error location
7906           for constants. Fixed bug #76404.
7907
7908 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
7909
7910         Fix #76370.
7911         * convert.cs (ExplicitConversionCore): Fixed object->enum
7912         conversion.
7913
7914 2005-10-10  Raja R Harinath  <rharinath@novell.com>
7915
7916         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
7917         InstanceExpression.
7918         (PropertyExpr.EmitCall): Likewise.
7919         * expression.cs (Invocation.EmitArguments): Handle case where
7920         arguments == null.
7921         (Invocation.EmitCall): Avoid allocating temporary variable if
7922         there are no arguments.
7923
7924 2005-10-07  Raja R Harinath  <rharinath@novell.com>
7925
7926         Fix #76323.
7927         * convert.cs (ImplicitConversionStandard): Move conversion of
7928         void* to arbitrary pointer types ...
7929         (ExplicitConversionStandard): .. here.
7930         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
7931         error to always print typenames.
7932
7933 2005-10-07  Raja R Harinath  <rharinath@novell.com>
7934
7935         * convert.cs (GetConversionOperator): Rename from
7936         GetConversionOperators.  Move operator selection code from ...
7937         (UserDefinedConversion): ... here.
7938
7939 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
7940
7941         * convert.cs (ExplicitConversionCore): Removed duplicate enum
7942         conversion.
7943
7944 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
7945
7946         * assign.cs (Assign.DoResolve): Error method changed.
7947
7948         * cfold.cs (DoConstantNumericPromotions): Error method changed.
7949         
7950         * const.cs (ResolveValue): Reset in_transit immediately.
7951         
7952         * constant.cs: Error method changed.
7953         
7954         * convert.cs: Removed useless location parameter.
7955         (ExplicitNumericConversion): Don't do double enum check.
7956         (ExplicitConversionCore): Renamed from ExplicitConversion.
7957         (ExplicitUnsafe): Extracted from ExplicitConversion.
7958         (ExplicitConversion): Uses for error reporting.
7959         
7960         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
7961         error messages.
7962         (ResolveBoolean): Uses common error method.
7963         (CastToDecimal): Get rid of ec.
7964         (CastFromDecimal): Optimized.
7965         (ConvCast): Get rid of ec.
7966         
7967         * enum.cs (ResolveValue): Reset in_transit immediately.
7968         (Emit): Return after first error.
7969         
7970         * expression.cs: Convert changes.
7971         
7972         * literal.cs: Error method changed.
7973         
7974         * statement.cs: Error method changed.
7975
7976 2005-10-03  Raja R Harinath  <rharinath@novell.com>
7977
7978         * support.cs (SeekableStreamReader.Position): Don't error out when
7979         the requested position is just beyond the end of the current
7980         buffered data.
7981
7982 2005-09-28  Raja R Harinath  <rharinath@novell.com>
7983
7984         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
7985         try to keep in sync with the byte count of the underlying Stream.
7986         However, this limits us to a window size of 2048 characters: i.e.,
7987         the maximum lookahead of our lexer/parser can be 2048 characters.
7988
7989 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
7990
7991         Fix #76255.
7992         * driver.cs: Fix compilation files with full root path.
7993
7994 2005-09-25  Miguel de Icaza  <miguel@novell.com>
7995
7996         * report.cs (SymbolRelatedToPreviousError): Format the output so
7997         it does not use an open parenthesis that is never closed. 
7998
7999         * driver.cs: Follow coding guidelines
8000
8001 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
8002
8003         Fix #72930.
8004         * const.cs (Const.ResolveValue): Check for assigning non-null
8005         value to reference type.
8006
8007 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
8008
8009         * anonymous.cs: Implemented ExprClassName.
8010         
8011         * assign.cs (Assign.DoResolve): Don't chrash when type is not
8012         delegate.
8013         
8014         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
8015         check.
8016         
8017         * class.cs (StaticClass.DefineContainerMembers): Report protected
8018         members as error.
8019         
8020         * codegen.cs: if(ed) PRODUCTION.
8021         
8022         * convert.cs (Error_CannotImplicitConversion): Better error
8023         distinction.
8024         
8025         * cs-parser.jay: More error checks.
8026         
8027         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
8028         
8029         * driver.cs (CSCParseOption): Enabled wrong option check.
8030         
8031         * ecore.cs (Expression.ExprClassName): Turned to property.
8032         (MemberExpr.CheckIntermediateModification): For checking boxed
8033         value types     modification.
8034         
8035         * statement.cs (Fixed.Resolve): Expression type must be
8036         convertible to fixed type.
8037         (CollectionForeach.GetEnumeratorFilter,TryType):
8038         Small refactoring for easier error checking.
8039
8040 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
8041
8042         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
8043         attributes.
8044         
8045         * class.cs (GeneratedBaseInitializer): New class for customization
8046         compiler generated initializers.
8047         (MemberBase.DoDefine): Check Obsolete attribute here.
8048         (FieldMember.DoDefine): Ditto.
8049         
8050         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
8051         constants.
8052         
8053         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
8054         (MemberCore.GetObsoleteAttribute): Removed argument.
8055         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
8056         (MemberCore.CheckObsoleteType): New helper.
8057         
8058         * delegate.cs,
8059         * enum.cs,
8060         * statement.cs: Updates after MemberCore changes.
8061         
8062         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
8063         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
8064         
8065         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
8066         obsolete attribute for compiler construct.
8067         (As.DoResolve): Cache result.
8068         
8069         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
8070
8071 2005-09-26  Raja R Harinath  <rharinath@novell.com>
8072
8073         Fix #76133.
8074         * expression.cs (This.VerifyFixed): In a value type T, the type of
8075         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
8076         value type R, 'this' is treated as a value parameter.
8077
8078 2005-09-22  Miguel de Icaza  <miguel@novell.com>
8079
8080         * statement.cs (Lock): Use the TemporaryVariable class instead of
8081         manually using local variables as those do not work when variables
8082         are captured.
8083
8084         * ecore.cs: Moved the TemporaryVariable class from being a nested
8085         class inside Foreach to be a public class that can be employed in
8086         other places. 
8087
8088 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
8089
8090         * cs-parser.jay: interface_accessors replaced by
8091         accessor_declarations.
8092
8093         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
8094         location.
8095         
8096         * statement.cs (GotoCase.Resolve): Convert null constant to
8097         null case.
8098         (SwitchLabel.ResolveAndReduce): Ditto.
8099         (SwitchLabel.NullStringCase): Custom null stamp.
8100         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
8101         
8102         typemanager.cs (CSharpSignature): Don't skip first argument
8103         for full names.
8104
8105 2005-09-18  Miguel de Icaza  <miguel@novell.com>
8106
8107         * driver.cs: Set InEmacs based on the environment variable EMACS. 
8108
8109         * location.cs (InEmacs): in this mode, do not report column
8110         location as it confuses Emacs.
8111
8112 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
8113
8114         * cfold.cs, constant.cs, convert.cs, ecore.cs,
8115         expression.cs, iterators.cs, literal.cs: Store constants and
8116         literals location.
8117         
8118         * class.cs (MemberBase.ShortName): Pass location.
8119         
8120         * cs-parser.jay: Some location fixes.
8121         
8122         * ecore.cs (Expression.Location): Made virtual.
8123
8124 2005-09-05  Miguel de Icaza  <miguel@novell.com>
8125
8126         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
8127         if the underlying types are the same, otherwise we need to produce
8128         code that will do the proper cast.
8129
8130         This was exposed by Marek's constant rewrite which produced
8131         invalid code for the call site:
8132
8133         enum X : long { a }
8134         void Method (X v) {}
8135
8136         Method ((X) 5)
8137
8138         This fixes test-49.cs
8139
8140 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
8141
8142         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
8143           Type/Object should be allowed as well. Fixed bug #75968.
8144
8145 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
8146
8147         * expression.cs : (Binary.DoResolve): when one is enum constant and
8148           another is constant 0, then return enum one *as enum type*.
8149           Fixed bug 74846.
8150
8151 2005-09-02  Raja R Harinath  <rharinath@novell.com>
8152
8153         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
8154         internal.
8155
8156         Fix #75941.
8157         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
8158         flow-branching for LocalVariableReferences in case we were invoked
8159         from a MemberAccess.
8160         * expression.cs (LocalVariableReference.VerifyAssigned): New.
8161         Carved out of ...
8162         (LocalVariableReference.DoResolveBase): ... this.
8163         (MemberAccess.Resolve): Do the check that was disabled during
8164         SimpleNameResolve.
8165
8166 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
8167
8168         * class.cs :
8169           (PartialContainer.Create): check abstract/sealed/static strictly
8170           but abstract/sealed can exist only at one side. Fixed bug #75883.
8171
8172 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
8173
8174         Fix #75945.
8175         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
8176         specified, don't default to UnmanagedType.I4.
8177
8178 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
8179
8180         * expression.cs : conditional operator should check possibly
8181           incorrect assign expression. Fixed bug #75946.
8182
8183 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
8184
8185         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
8186           Reverting the change. gmcs is much complex than mcs on this matter.
8187
8188 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
8189
8190         * cs-tokenizer.cs : To read another token ahead of the actual 
8191           consumption, use new SavedToken and cache token instead of moving
8192           back the stream with SeekableStreamReader (it seemed problematic).
8193         * cs-parser.jay,
8194           driver.cs : Thus use StreamReader directly.
8195         * support.cs : Thus removed SeekableStreamReader.
8196
8197 2005-08-30  Raja R Harinath  <rharinath@novell.com>
8198
8199         Fix #75934.
8200         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
8201         (ScopeInfo.EmitScopeType): Use it to construct field names from
8202         names of captured locals.
8203
8204         Fix #75929.
8205         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
8206         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
8207         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
8208         (ExplicitConversion): Remove enum cases already handled by
8209         implicit conversion.  Move implicit conversion check to the beginning.
8210         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
8211         * expression.cs (ArrayCreation.EmitDynamicInitializers):
8212         Don't treat System.Enum as a struct.
8213
8214 2005-08-30  Jb Evain  <jbevain@gmail.com>
8215
8216         * attribute.cs: handles as expression in parameters.
8217
8218 2005-08-30  Raja R Harinath  <rharinath@novell.com>
8219
8220         Fix #75802.
8221         * class.cs (TypeContainer.VerifyClsName): Don't use a
8222         PartialContainer when verifying CLS compliance.
8223         (AbstractPropertyEventMethod): Set Parent here, ...
8224         (PropertyMethod): ... not here.
8225
8226 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
8227
8228         * attribute.cs : escaped attribute name should not be allowed to be
8229           resolved (e.g. @class as classAttribute). Fixed bug #75930.
8230
8231 2005-08-29  Raja R Harinath  <rharinath@novell.com>
8232
8233         Fix #75927.
8234         * convert.cs (ImplicitStandardConversionExists): Allow zero also
8235         when converting a long constant to unsigned long.
8236         * expression.cs (Invocation.OverloadResolve): Add sanity check to
8237         detect where IsApplicable and VerifyArgumentsCompat disagree.
8238
8239 2005-08-29  Raja R Harinath  <rharinath@novell.com>
8240         and Carlos Alberto Cortez  <carlos@unixmexico.org>
8241
8242         Fix #75848.
8243         * class.cs (TypeContainer.CanElideInitializer): New helper.
8244         (TypeContainer.EmitFieldInitializers): Use it to determine if we
8245         can safely emitting the initializer of a field.
8246
8247 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
8248
8249         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
8250           allowed inside a switch (without loop). Fixed bug #75433.
8251
8252 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
8253
8254         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
8255         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
8256
8257 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
8258
8259         * driver.cs : kinda reverting the default encoding changes (not exact 
8260           revert since I noticed that "codepage:reset" might not work fine).
8261
8262 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
8263
8264         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
8265           Location. Now getter and setter store location correctly.
8266           (errors/cs0111-12.cs now reports the expected location.)
8267
8268 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
8269
8270         * driver.cs : Use default encoding on the environment.
8271           Removed (now that) extra parameter for SeekableStreamReader.
8272         * support.cs : (SeekableStreamReader) third .ctor() argument for
8273           StreamReader is not required (always true). preamble size could
8274           be acquired in simpler and safe way.
8275
8276 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
8277
8278         * cs-parser.jay: report CS0642 at warning level 3
8279           and report CS0642 for an if else statement also
8280           fixes bug #74745. Patch by John Luke (and a bit
8281           modified by me).
8282           Removed extra CS0642 warning check for "while",
8283           "for" and "fixed".
8284         * statement.cs: In Block.Resolve(), CS0642 check
8285           is reimplemented to check a sequence of an empty
8286           statement and a block.
8287
8288           Both fix bug #66777.
8289
8290 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
8291
8292         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
8293         detection until I fix it.
8294         
8295         * cs-tokenizer.cs: Changed error message.
8296         
8297         * cs-parser.jay: Fixed 2 error locations.
8298         
8299         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
8300         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
8301         properties.
8302         
8303         * enum.cs (GetSignatureForError): Fixed.
8304         
8305         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
8306         method detection.
8307         
8308         * class.cs,
8309         * typemanager.cs (RegisterProperty): Removed.
8310         
8311         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
8312
8313 2005-08-24  Raja R Harinath  <rharinath@novell.com>
8314
8315         Fix #75874.
8316         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
8317         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
8318
8319 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
8320
8321         * expression.cs : tiny fix is required for not warning positive ulong.
8322           See test-441.cs.
8323
8324 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
8325
8326         * expression.cs : add CS0652 check for constant and integral
8327           expression. Fixed bug #53974.
8328
8329 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
8330
8331         * expression.cs : in DoNumericPromotions(), check if there is implicit
8332           conversion overload for string (to check CS0034). Fixed bug #52492.
8333
8334 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
8335
8336         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
8337
8338 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
8339
8340         * ecore.cs : report location when it is *not* Null.
8341
8342 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
8343
8344         * codegen.cs,
8345           ecore.cs,
8346           flowanalysis.cs,
8347           expression.cs:
8348           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
8349           correctly. Fixed bug #75721.
8350
8351 2005-08-23  Raja R Harinath  <rharinath@novell.com>
8352
8353         * support.cs (SeekableStreamReader.Position): Avoid an expensive
8354         loop that performs 'min (pos, char_count)'.
8355
8356         Fix #75862.
8357         * expression.cs (Unary.ResolveOperator): Don't discard implicit
8358         converted value in Operator.OnesComplement.
8359
8360 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
8361
8362         * anonymous.cs: If the anon method is pulled into a helper class,
8363         it needs to be `internal' not `private'. Fixes runtime behavior on
8364         msft. bug #75704
8365
8366 2005-08-20  Martin Baulig  <martin@ximian.com>
8367
8368         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
8369         scope if we don't already have it.
8370
8371         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
8372         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
8373         fixes #75867.
8374
8375 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
8376
8377         Fix #75803
8378         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
8379         is a partial class.
8380
8381 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
8382
8383         The big constants rewrite
8384         Fix #75746, #75685 and more
8385         As a side effect saved 1MB for MWF ;-)
8386         
8387         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
8388         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
8389         enum based for corlib compilation.
8390         
8391         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
8392         subtractions.
8393         
8394         * class.cs (FixedField.Define): Use ResolveAsConstant.
8395         
8396         * const.cs (IConstant): Interface constants and enums.
8397         (Const.ResolveValue): New method for constant resolvning.
8398         (ExternalConstant): Constants from imported assemblies.
8399         
8400         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
8401         conversion; like enums.
8402         (Constant.ToType): Converts this constant to different type.
8403         (Constant.Increment): Adds 1.
8404         
8405         * convert.cs (ImplicitConversionRequired): Simplified.
8406         
8407         * cs-parser.jay: Create EnumMember directly.
8408         
8409         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
8410         
8411         * doc.cs (GenerateEnumDocComment): Removed.
8412         
8413         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
8414         (ConvertIntLiteral): Removed.
8415         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
8416         
8417         * enum.cs (EnumMember): Implement IConstant.
8418         (Enum.IsValidEnumConstant): Removed.
8419         (Enum.GetNextDefaultValue): Removed.
8420         (Enum.FindMembers): Updated.
8421         (Enum.GenerateDocComment): Iterate enum members.
8422         
8423         * expression.cs (Cast.TryReduce): Handle enums correctly.
8424         (New.Constantify): Made public.
8425         (MemberAccess.DoResolve): Removed contant specific if(s).
8426         
8427         * literal.cs (NullLiteral): Implement new abstract methods.
8428         
8429         * statement.cs (GotoCase.Resolve): Use new constant methods.
8430         (SwitchLabel.ResolveAndReduce): Use new constant methods.
8431         
8432         * typemanager.cs (LookupEnum): Removed.
8433         (IsEnumType): Fixed to work with corlib.
8434         (RegisterConstant): Removed.
8435         (LookupConstant): Removed.
8436         (GetConstant): Changed to work with IConstant.
8437
8438 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
8439
8440         * location.cs : Fixed overflown (>255) column number.
8441
8442 2005-08-03  Raja R Harinath  <rharinath@novell.com>
8443
8444         First cut of the qualified-alias-member feature.
8445         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
8446         token.
8447         * cs-parser.jay (DOUBLE_COLON): New token.
8448         (namespace_or_type_name): Add rule for recognizing
8449         qualified-alias-members.
8450         (primary_expression): Likewise.
8451         (element_access): Allow QualifiedAliasMember as a possible
8452         type-bearing expression.
8453         (local_variable_type, local_variable_pointer_type): Likewise.
8454         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
8455         aliases in the current and enclosing namespace declarations.
8456         (NamespaceEntry.UsingAlias): Add CS0440 warning.
8457         * decl.cs (MemberName.is_double_colon): New.
8458         (MemberName.MemberName): Add new constructor for alias-member.
8459         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
8460         * expression.cs (QualifiedAliasMember): New expression type.
8461
8462 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
8463
8464         * location.cs : it borked when no argument was specified.
8465
8466 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
8467
8468         * location.cs : tiny ToString() format fix.
8469
8470 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
8471
8472         * statement.cs : oops, it was missing.
8473
8474 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
8475
8476         A set of fixes for precise line/column location.
8477
8478         * location.cs :
8479           "token" field now holds a file/line "delta", a line number offset 
8480           from the segment, and a column number. See also:
8481           http://lists.ximian.com/pipermail/mono-devel-list/2004-
8482           December/009508.html
8483           Removed static IsNull. Use instance IsNull property instead.
8484         * cs-tokenizer.cs :
8485           For some tokens it stores Location. For Identifier it stores
8486           LocatedToken which is a pair of string name and location.
8487           Column numbers are adjusted only at getChar().
8488         * report.cs :
8489           Use Location.ToString() for reporting (it now contains column).
8490         * cs-parser.jay :
8491           Largely modified to use LocatedToken instead of
8492           string (IDENTIFIER), and to acquire Location from some tokens.
8493         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
8494           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
8495           codegen.cs :
8496           Now MemberName holds Location. DeclSpace.ctor() receives Location
8497           as a parameter. Removed extra parameters to all derived classes.
8498           Replaced Location.IsNull() with instance property.
8499         * assign.cs, expression.cs :
8500           Added .ctor() overload that omits Location.
8501         * attribute.cs :
8502           Added "nameEscaped" flag that indicates the identifier was escaped
8503           in the source file. This fixes bug #57047.
8504
8505 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
8506
8507         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
8508         New method, looking for lo-case imported cls type.
8509
8510         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
8511         here.
8512
8513         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
8514
8515         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
8516
8517         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
8518         all_imported_types.
8519         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
8520
8521         Optimized to save 3.5 MB for SWF compilation.
8522
8523 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
8524
8525         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
8526         (PartialContainer.Create): Moved logic AddToContainer.
8527         (PartialContainer.MarkForDuplicationCheck): Shares name.
8528         
8529         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
8530         place.
8531         
8532         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
8533         initialization.
8534         (Namespace.GetSignatureForError): New method.
8535         
8536         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
8537         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
8538
8539 2005-08-01  Raja R Harinath  <rharinath@novell.com>
8540
8541         Fix #75669.
8542         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
8543         member lookup rather than qualifier_type, since qualifier_type can
8544         be null.
8545
8546 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
8547
8548         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
8549         enum member.
8550
8551 2005-07-31  Miguel de Icaza  <miguel@novell.com>
8552
8553         * statement.cs: Copy the local exception into the exception
8554         captured local.  Fixes 75674
8555
8556 2005-07-31  Raja R Harinath  <harinath@gmail.com>
8557
8558         Fix #75658.
8559         * expression.cs (Invocation.OverloadResolve): Don't report error
8560         CS1501 if error CS1502 has been reported.
8561         (New.DoResolve): Delegate CS1501 reporting to
8562         Invocation.OverloadResolve.
8563
8564         Fix #75656.
8565         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
8566         invariant-meaning-in-block property in an enclosing block if
8567         necessary.
8568
8569 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
8570
8571         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
8572         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
8573         (Switch.CheckSwitch): Just save 50kb for SWF.
8574
8575 2005-07-27  Martin Baulig  <martin@ximian.com>
8576
8577         * anonymous.cs (CaptureContext.AddField): Added
8578         `AnonymousContainer am' argument; compute its toplevel scope if
8579         it's not already computed.  Fixes #75649.
8580
8581 2005-07-26  Raja R Harinath  <rharinath@novell.com>
8582
8583         Fix #75628.
8584         * class.cs (Constructor.Emit): Reset block to null if the block
8585         resolve fails.
8586
8587 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
8588
8589         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
8590
8591 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
8592
8593         * class.cs (MethodData.Define): Check whether accessor implementing
8594         interface is public.
8595
8596         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
8597
8598 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
8599
8600         Fix #57245
8601         * namespace.cs (LookupType): Moved same type check to...
8602         
8603         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
8604         with the same name.
8605
8606 2005-07-21  Raja R Harinath  <rharinath@novell.com>
8607
8608         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
8609         already found a typebuilder.
8610         * class.cs (MethodCore.IsDuplicateImplementation): Compare
8611         MemberNames, not strings.
8612
8613         * const.cs (Error_ExpressionMustBeConst): 
8614         Rename from Error_EpressionMustBeConst.
8615         * const.cs, class.cs, statement.cd: Update.
8616
8617 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
8618
8619         Fix #65573
8620
8621         * const.cs (Const.LookupConstantValue): Report missing contant expression
8622         everytime.
8623         (Error_EpressionMustBeConstant): Only one error method.
8624
8625         * class.cs, statement.c: Updated.
8626
8627 2005-07-20  Raja R Harinath  <rharinath@novell.com>
8628
8629         * statement.cs (Block.Flags): Add back HasVarargs.
8630         (Block.flags): Make protected.
8631         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
8632
8633         * typemanager.cs (types, typecontainers, user_types): Remove.
8634         (UserTypes, TypeContainers): Likewise.
8635         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
8636         (CleanUp, Reset): Update.
8637         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
8638         (GetNestedType): Use Type.GetNestedType.
8639         (CoreLookupType): Take two arguments, the namespace and the
8640         basename of the type.  Update to use the Namespace.Lookup
8641         mechanism.
8642         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
8643         (RealMemberLookup): Use IsNestedChildOf instead of playing with
8644         string concatenation and substring matches.
8645         * class.cs, enum.cs, delegate.cs: Update to changes.
8646
8647 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
8648
8649         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
8650         Expression and made virtual.
8651
8652         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
8653         (ImplicitStandardConversionExists): Fixed `byte' typo ?
8654
8655         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
8656
8657         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
8658         error message.
8659
8660         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
8661         change.
8662
8663 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
8664
8665         Fix #57707
8666         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
8667         AssemblyCultureAttribute is not used on executable.
8668
8669         * rootcontext.cs,
8670         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
8671
8672 2005-07-16  Raja R Harinath  <rharinath@novell.com>
8673
8674         Fix #60638.
8675         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
8676         New.  Reports CS0252/CS0253.
8677         Mostly taken from preliminary patch by Duncak Mak.
8678         (Binary.DoResolveOperator): Store results of operator lookup.
8679         Use them to detect if we need to warn about unintended reference
8680         comparisons.
8681
8682 2005-07-15  Raja R Harinath  <rharinath@novell.com>
8683
8684         Fix #72969.
8685         * namespace.cs (Namespace.Lookup): Add back location parameter.
8686         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
8687         * delegate.cs, ecore.cs, expression.cs: Update to changes.
8688
8689         * codegen.cs (EmitContext.DeclSpace): Make readonly.
8690         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
8691         (Namespace.LookupType): ... this.
8692         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
8693         of namespaces.
8694         * typemanager.cs (LookupTypeReflection): Remove buggy code that
8695         purported to handle pointers.
8696         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
8697         CoreLookupType.
8698
8699 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
8700
8701         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
8702         type as namespace.
8703
8704 2005-07-15  Raja R Harinath  <rharinath@novell.com>
8705
8706         * namespace.cs (Namespace.Lookup): Drop location parameter.
8707         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
8708         (NamespaceEntry.Lookup): ... this.
8709         (NamespaceEntry.Error_AmbiguousTypeReference):
8710         Move here from DeclSpace.
8711         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
8712         names ...
8713         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
8714         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
8715         Move to NamespaceEntry.
8716         * delegate.cs, expression.cs: Update to changes.
8717
8718 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
8719
8720         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
8721         CheckAttributeType and refactored.
8722         (Attribute.ResolvePossibleAttributeType): Changed to reuse
8723         ResolveAsTypeTerminal error handling.
8724         (ResolveAsTypeTerminal): Introduced because of global attributes extra
8725         handling.
8726         (GetSignatureForError): Print errors in same way.
8727
8728         * class.cs,
8729         * codegen.cs: Reflect attribute GetSignatureForError change.
8730
8731         * ecore.cs,
8732         * expression.cs: Add silent parameter to ResolveAsTypeStep.
8733
8734         * namespace.cs (UsingEntry): Refactored to make fields private.
8735
8736         * assign.cs,
8737         statement.cs: Error_UnexpectedKind has extra parameter.
8738
8739 2005-07-14  Raja R Harinath  <rharinath@novell.com>
8740
8741         * ecore.cs (IAlias): Remove.
8742         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
8743         that implement the interface.
8744         * namespace.cs (Namespace): Likewise.
8745         (Namespace.declspaces): Renamed from 'defined_names'.
8746         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
8747         DeclSpace instead of an IAlias.
8748         * tree.cs (Tree.AddDecl): Update.
8749
8750 2005-07-12  Raja R Harinath  <rharinath@novell.com>
8751
8752         * statement.cs (Block.Flags); Remove HasVarargs.
8753         (Block.HasVarargs): Move to ToplevelBlock.
8754         (Block.ThisVariable, Block.AddThisVariable): Likewise.
8755         (Block.Variables): Make protected.  Initialize variable hashtable
8756         if necessary.
8757         (Block.AddVariable): Update.
8758         (Block.Resolve): Update to changes.
8759         (ToplevelBlock.HasVarargs): New boolean.
8760         (ToplevelBlock.ThisVariable): Move here from Block.
8761         (ToplevelBlock.AddThisVariable): Likewise.
8762         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
8763         * expression.cs (This.ResolveBase): Update to changes.
8764         (ArglistAccess.DoResolve): Likewise.
8765
8766 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
8767
8768         Fix #75321
8769         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
8770
8771         * class.cs (TypeContainer.VerifyMembers): Distinguish between
8772         not used and not used & assigned.
8773         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
8774
8775 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
8776
8777         Fix #75053
8778         * expression.cs (Is.DoResolve): null is never provided type.
8779
8780 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
8781
8782         Fix #52496
8783         * cs-parser.jay: Less strict event error rule to catch more errors.
8784
8785 2005-07-08  Martin Baulig  <martin@ximian.com>
8786
8787         Fix test-iter-10.cs - distinguish whether we `yield' in a property
8788         gettter (allowed) or setter (not allowed).
8789
8790         * class.cs (Accessor): Implement IIteratorContainer.
8791         (Accessor.Yields): New public field.
8792         (PropertyBase.PropertyMethod.Define): Handle iterators on a
8793         per-accessor basis.
8794
8795         * cs-parser.jay
8796         (get_accessor_declaration, set_accessor_declaration): Set the
8797         `yields' flag on the accessor, not the property.
8798         (property_declaration): Do the iterators check on a per-accessor
8799         basis and not for the whole property.
8800
8801 2005-07-08  Martin Baulig  <martin@ximian.com>
8802
8803         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
8804         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
8805
8806 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
8807
8808         Fix #74975
8809         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
8810         (ExtractSecurityPermissionSet): Cope with self referencing security
8811         attributes properly.
8812
8813         * driver.cs (SetOutputFile): Made public property OutputFile.
8814
8815 2005-07-07  Raja R Harinath  <rharinath@novell.com>
8816
8817         Fix #75486.
8818         * class.cs (TypeContainer.first_nonstatic_field): Rename from
8819         has_nonstatic_fields.  Make into a FieldBase pointer.
8820         (TypeContainer.AddField): Add CS0282 check.
8821         (TypeContainer.EmitType): Update.
8822
8823 2005-07-06  Miguel de Icaza  <miguel@novell.com>
8824
8825         * cs-tokenizer.cs (consume_identifier): Do not create strings to
8826         compare if they start with __.
8827
8828 2005-07-06  Raja R Harinath  <rharinath@novell.com>
8829
8830         * statement.cs (Switch.SwitchGoverningType): Only look at
8831         UserCasts that don't need implicit standard conversions to one of
8832         the allowed switch types (Fixes test-322.cs).
8833         (LocalInfo.Resolve): Re-enable sanity-test.
8834
8835 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
8836
8837         * cs-tokenizer.cs (consume_identifier): Detect double undescores
8838         
8839         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
8840         
8841         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
8842
8843 2005-07-06  Raja R Harinath  <rharinath@novell.com>
8844
8845         Fix #75472.
8846         * ecore.cs (SimpleName.GetSignatureForError): Add.
8847         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
8848         (MemberAccess.GetSignatureForError): Add.
8849
8850 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
8851  
8852         The big error and warning messages review.
8853         
8854         * anonymous.cs,
8855         * assign.cs,
8856         * attribute.cs,
8857         * class.cs,
8858         * codegen.cs,
8859         * convert.cs,
8860         * cs-parser.jay,
8861         * cs-tokenizer.cs,
8862         * decl.cs,
8863         * delegate.cs,
8864         * doc.cs,
8865         * driver.cs,
8866         * ecore.cs,
8867         * enum.cs,
8868         * expression.cs,
8869         * flowanalysis.cs,
8870         * iterators.cs,
8871         * literal.cs,
8872         * location.cs,
8873         * modifiers.cs,
8874         * namespace.cs,
8875         * parameter.cs,
8876         * pending.cs,
8877         * report.cs,
8878         * rootcontext.cs,
8879         * statement.cs,
8880         * support.cs,
8881         * tree.cs,
8882         * typemanager.cs: Updated.
8883         
8884         * class.cs: (MethodCore.SetYields): Moved here to share.
8885         (PropertyMethod.Define): Moved iterator setup here.
8886         
8887         * iterators.cs: Add orig_method to have full access to parent
8888         container.
8889
8890 2005-07-05  Raja R Harinath  <rharinath@novell.com>
8891
8892         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
8893         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
8894         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
8895         variable of struct type.
8896         * expression.cs (Unary.ResolveOperator): Update to change.
8897         (Indirection.VerifyFixed): Likewise.
8898         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
8899         (ParameterReference.VerifyFixed): Value parameters are fixed.
8900         (This.VerifyFixed): Treat 'this' as a value parameter.
8901         * statement.cs (LocalInfo.IsFixed): Remove.
8902
8903 2005-07-01  Martin Baulig  <martin@ximian.com>
8904
8905         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
8906         `ec.EmitThis ()' to get the correct scope.
8907
8908 2005-07-01  Martin Baulig  <martin@ximian.com>
8909
8910         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
8911         instance is a ParameterReference; fixes #75299.
8912
8913 2005-07-01  Martin Baulig  <martin@ximian.com>
8914
8915         Reverted Marek's latest patch (r46725):
8916         - it contains structural changes which are neither mentioned in
8917           the ChangeLog nor explained anywhere; for example the additional
8918           argument of EmitContext's and Iterator's .ctor's and the
8919           TypeContainer.DefineMembers() change.
8920         - structural changes like this should go in in seperate patches
8921           and not be hidden in a huge patch which just seems to affect
8922           warnings and errors.
8923           a big and hard to understand patch.
8924         - it breaks iterators and causes regressions, for instance in
8925           test-iter-03.cs.      
8926
8927 2005-06-30  Raja R Harinath  <rharinath@novell.com>
8928
8929         Fix #75412.
8930         * expression.cs (Indexers.map): Remove.
8931         (Indexers.Append): Filter out inaccessible setters and getters.
8932         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
8933
8934         Fix #75283.
8935         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
8936         Refactored from ...
8937         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
8938         (FieldExpr.Emit, PropertyExpr.Emit): Update.
8939         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
8940         * expression.cs (Invocation.EmitCall): Add CS0120 check.
8941
8942 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
8943
8944         Fix #75322
8945         * class.cs (FieldBase.GetInitializerExpression): One more field
8946         for backup.
8947
8948 2005-06-28  Miguel de Icaza  <miguel@novell.com>
8949
8950         * pending.cs: Do not define a proxy if the base method is virtual,
8951         it will be picked up by the runtime (bug 75270).
8952
8953 2005-06-08  Martin Baulig  <martin@ximian.com>
8954
8955         The big Iterators rewrite :-)
8956
8957         * iterators.cs: Rewrite this to use the anonymous methods framework.
8958
8959         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
8960         before the TypeContainers; see 2test-21.cs.
8961
8962         * class.cs
8963         (TypeContainer.DefineType): Don't create a new EmitContext if we
8964         already have one (this only happens if we're an Iterator).
8965         (TypeContainer.Define): Also call Define() on all our iterators.
8966         (Method.CreateEmitContext): Added support for iterators.
8967
8968         * anonymous.cs
8969         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
8970         (AnonymousContainer.CreateMethodHost): Moved here from
8971         AnonymousMethod and made abstract.
8972         (AnonymousContainer.CreateScopeType): New abstract method.
8973         (AnonymousContainer.IsIterator): New public property.
8974         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
8975         get the ScopeTypeBuilder rather than manually defining it here. 
8976         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
8977         iterators here.
8978
8979         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
8980         before RootContext.DefineTypes().
8981
8982         * codegen.cs (EmitContext.RemapToProxy): Removed.
8983         (EmitContext.CurrentAnonymousMethod): Changed type from
8984         AnonymousMethod -> AnonymousContainer.
8985         (EmitContext.ResolveTopBlock): Protect from being called twice.
8986         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
8987         (EmitContext.EmitThis): Removed the iterators hacks; use the
8988         anonymous methods framework for that.
8989
8990         * statement.cs
8991         (ToplevelBlock.Container): Make this a property, not a field.
8992         (ToplevelBlock.ReParent): New public method; move the
8993         ToplevelBlock into a new container.
8994         (Foreach.TemporaryVariable): Simplify.
8995
8996 2005-06-05  Martin Baulig  <martin@ximian.com>
8997
8998         * statement.cs (LocalInfo.CompilerGenerated): New flag.
8999         (Block.AddTemporaryVariable): New public method; creates a new
9000         `LocalInfo' for a temporary variable.
9001         (Block.EmitMeta): Create the LocalBuilders for all the temporary
9002         variables here.
9003         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
9004         non-iterator variables.
9005
9006 2005-06-05  Martin Baulig  <martin@ximian.com>
9007
9008         * statement.cs (Foreach.TemporaryVariable): Create the
9009         LocalBuilder in the Emit phase and not in Resolve since in some
9010         situations, we don't have an ILGenerator during Resolve; see
9011         2test-19.cs for an example.
9012
9013 2005-06-04  Martin Baulig  <martin@ximian.com>
9014
9015         **** Merged r45395 from GCS ****
9016
9017         The big Foreach rewrite - Part II.
9018
9019         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
9020         with `PropertyInfo ienumerator_getcurrent'.
9021
9022         * codegen.cs (VariableStorage): Removed.
9023
9024         * statement.cs
9025         (Foreach): Derive from Statement, not ExceptionStatement.
9026         (Foreach.CollectionForeach): New nested class.  Moved all the code
9027         dealing with collection foreach here.
9028         (Foreach.ForeachHelperMethods): Removed.
9029         (Foreach.TemporaryVariable): Implement IMemoryLocation.
9030
9031 2005-05-23  Martin Baulig  <martin@ximian.com>
9032
9033         * statement.cs (Try.DoResolve): Don't create a `finally' if we
9034         don't need to.  Fix #75014.
9035
9036 2005-05-20  Martin Baulig  <martin@ximian.com>
9037
9038         Merged r44808 from GMCS.
9039
9040         * class.cs (TypeContainer.CircularDepException): Removed.
9041         (TypeContainer.DefineType): Removed the `InTransit' stuff.
9042         (TypeContainer.CheckRecursiveDefinition): Check for circular class
9043         (CS0146) and interface (CS0529) dependencies here.
9044
9045 2005-06-21  Raja R Harinath  <rharinath@novell.com>
9046
9047         * expression.cs (Invocation.EmitCall): Fix initialization
9048         'this_call' to reflect current behaviour.  Fix indentation.
9049
9050         * convert.cs (FindMostEncompassedType): Add two trivial special
9051         cases (number_of_types == 0 || number_of_types == 1).
9052         (FindMostEncompasingType): Likewise.
9053
9054 2005-06-17  Raja R Harinath  <rharinath@novell.com>
9055
9056         Some cleanups preparing for the fix of #75283.
9057         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
9058         error testing.
9059         (EventExpr.InstanceResolve): Likewise.
9060         (EventExpr.DoResolve): Remove redundant checks.
9061
9062 2005-06-10  Duncan Mak  <duncan@novell.com>
9063
9064         * cs-tokenizer.cs (process_directives): New flag for controlling
9065         the processing of preprocessor directives.
9066         (x_token): After seeing a '#', return Token.NONE instead of going
9067         to handle_preprocessing_directive() when not processing
9068         directives. This avoids unnecessary processing during the token peek in
9069         is_punct().
9070
9071         This fixes #74939.
9072
9073         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
9074         the existing error reporting methods instead of Report.Error.
9075
9076         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
9077         after Raja's rewrite.
9078
9079 2005-06-08  Miguel de Icaza  <miguel@novell.com>
9080
9081         * class.cs: Small fix.
9082
9083 2005-06-08  Raja R Harinath  <rharinath@novell.com>
9084
9085         Fix #75160.
9086         * class.cs (GetPartialBases): Fix return value check of
9087         part.GetClassBases.
9088
9089 2005-06-07  Raja R Harinath  <rharinath@novell.com>
9090
9091         Ensure that partial classes are registered in their enclosing
9092         namespace.  Initial part of fix of #75160.
9093         * tree.cs (Tree.RecordDecl): Add new namespace argument.
9094         Register declspace with namespace here, not in
9095         DeclSpace.RecordDecl.
9096         * cs-parser.jay: Pass namespace to RecordDecl.
9097         * class.cs (PartialContainer.Create): Likewise.
9098         (ClassPart.DefineType): New sanity-check.  Throws an exception if
9099         called.
9100         * decl.cs (Declspace.RecordDecl): Remove.
9101         * namespace.cs (NamespaceEntry.DefineName): Remove.
9102
9103 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
9104
9105         * rootcontext.cs: Reset TargetExt as well.
9106
9107 2005-06-03  Raja R Harinath  <rharinath@novell.com>
9108
9109         * ecore.cs (Expression.Resolve): Emit CS0654 error when
9110         -langversion:ISO-1.
9111
9112 2005-06-02  Raja R Harinath  <rharinath@novell.com>
9113
9114         Fix #75080, cs0119.cs.
9115         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
9116         of ...
9117         (Expression.Resolve): ... this.  Use it.  Remove bogus code
9118         allowing ExprClass.Type and ExprClass.Namespace for
9119         ResolveFlags.VariableOrValue.
9120         (Expression.Resolve) [1-argument variant]: Change default resolve
9121         flags based on language version.
9122         (Expression.Error_UnexpectedKind): Use a simple string array
9123         rather than an ArrayList.
9124         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
9125         not ExprClass.Type.
9126         (TypeOfVoid.DoResolve): Likewise.
9127         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
9128         flags argument -- it always has the same value.
9129
9130 2005-05-31  Raja R Harinath  <rharinath@novell.com>
9131
9132         Fix #75081.
9133         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
9134         Use it in the error message.
9135         * assign.cs, expression.cs, statement.cs: Update.
9136
9137 2005-05-30  Raja R Harinath  <rharinath@novell.com>
9138
9139         Fix #75088.
9140         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
9141         the "almostMatchedMember" case too.
9142         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
9143         that failed the accessibility checks to 'almost_match'.
9144
9145 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
9146
9147         * attribute.cs: Use internal MethodBuilder methods to set
9148         ExactSpelling and SetLastError on PInvoke methods, instead
9149         of passing them via charset.  Fixes #75060.
9150
9151 2005-05-27  Raja R Harinath  <rharinath@novell.com>
9152
9153         * parameter.cs (Parameter): Remove TODO comment.
9154         (Parameter.DefineParameter): Remove Location parameter.
9155         (Parameters.LabelParameters): Likewise.
9156         * class.cs (Constructor.Emit): Update to change.
9157         (MethodData.Emit): Likewise.
9158         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
9159         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
9160
9161 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
9162
9163         * parameter.cs,
9164           Removed Parameters.Location and added Parameter.Location instead.
9165           Removed Location parameter from Emit() and GetSignature().
9166         * anonymous.cs,
9167           class.cs,
9168           cs-parser.jay,
9169           delegate.cs,
9170           iterators.cs,
9171           statement.cs :
9172           Modified all related calls.
9173
9174 2005-05-26  Raja R Harinath  <rharinath@novell.com>
9175
9176         Improve user-defined conversion handling.
9177         * convert.cs (GetConversionOperators): Rewrite.  Return only the
9178         applicable operators.
9179         (AddConversionOperators): New.  Helper for GetConversionOperators.
9180         (FindMostEncompassedType, FindMostEncompassingType): Verify that
9181         there is only one most encompassed/encompassing type.
9182         (FindMostSpecificSource, FindMostSpecificTarget): Remove
9183         "applicable operator" handling.
9184         (UserConversion): Move cache here from GetConversionOperators.
9185         Directly cache the chosen operator, rather than the whole
9186         MethodGroup.
9187         (ExplicitNumericConversion): Fix buggy implementation of Decimal
9188         case.  Allow conversion of decimal to sbyte and byte too.
9189         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
9190         New static methods.  Used to avoid allocating EmptyExpressions in
9191         convert.cs.
9192
9193 2005-05-24  Duncan Mak  <duncan@novell.com>
9194
9195         * ecore.cs (CastFromDecimal): New class for casting a decimal to
9196         another class, used in Convert.ExplicitNumericConversion.
9197         (CastToDecimal): New class, similar to above, but casts to
9198         System.Decimal, used in Convert.ImplicitNumericConversion and also
9199         in explicit convesion from double/float to decimal.
9200
9201         * convert.cs (ImplicitNumericConversion): Handle implicit
9202         conversions to System.Decimal.
9203         (ExplicitNumericConversion): handle explicit conversions to
9204         System.Decimal.
9205
9206         This fixes #68711.
9207         
9208 2005-05-20  Miguel de Icaza  <miguel@novell.com>
9209
9210         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
9211         know the type at this stage, just break through.   Fixes #75008 
9212
9213 2005-05-19  Martin Baulig  <martin@ximian.com>
9214
9215         * delegate.cs
9216         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
9217         to disable error reporting.
9218
9219         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
9220         here since we don't want to report an error; see the new test-336.cs.
9221
9222 2005-05-19  Raja R Harinath  <rharinath@novell.com>
9223
9224         * statement.cs (ToplevelBlock.GetParameterReference)
9225         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
9226         Move here from class Block.
9227         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
9228         * expression.cs (ParameterReference.DoResolveBase): Likewise.
9229
9230 2005-05-18  Martin Baulig  <martin@ximian.com>
9231
9232         Fix #74978.
9233
9234         * flowanalysis.cs
9235         (FlowBranching.Reachability): Add non-static public And() and Or()
9236         methods.
9237         (FlowBranchingSwitch): New class; do the `break_origins' thing
9238         like in FlowBranchingLoop.
9239         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
9240         reachability, not just locals and parameters.
9241         (FlowBranching.MergeChild): Remove some of the hacks for loop and
9242         switch; MergeBreakOrigins() now takes care of that.
9243
9244 2005-05-18  Martin Baulig  <martin@ximian.com>
9245
9246         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
9247         a loop and may leave it, reset the barrier; fixes #74974.
9248
9249 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
9250         
9251         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
9252         is back.
9253         
9254         * cs-parser.jay: Catch more lexical errors.
9255         
9256         * report.cs: Add one more Error method.
9257         
9258         * rootcontext.cs,
9259         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
9260
9261 2005-05-17  Martin Baulig  <martin@ximian.com>
9262
9263         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
9264         #70970. 
9265
9266 2005-05-16  Raja R Harinath  <rharinath@novell.com>
9267
9268         Fix test-382.cs.  Emit values of decimal constants.
9269         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
9270         Carved out of ...
9271         (TypeContainer.AddField): ... this.
9272         (TypeContainer.EmitFieldInitializers): Allow the list of fields
9273         with initializers to include 'Const's.
9274         (ClassPart.RegisterFieldForInitialization): Forward to
9275         PartialContainer.
9276         * const.cs (Const.Const): Pass initializer to base class.
9277         (Const.Define): In case of decimal constants, register them for
9278         initialization in a static constructor.
9279
9280 2005-05-14  Martin Baulig  <martin@ximian.com>
9281
9282         * statement.cs (Block.Resolve): Correctly handle unreachable code;
9283         do not call ResolveUnreachable() on unreachable statements in
9284         here, see the comment in the source code.
9285
9286 2005-05-13  Raja R Harinath  <rharinath@novell.com>
9287
9288         Fix #74934.
9289         * expression.cs (BinaryResolveOperator): If one of the operands of
9290         an equality comparison is 'null' and the other is a pointer type,
9291         convert the null to a NullPointer.
9292         * convert.cs (ImplicitReferenceConversion): If the expression is a
9293         NullLiteral and the target type is a pointer type, return a
9294         NullPointer instead.
9295         (ImplicitConversionStandard): Likewise.
9296
9297 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
9298         
9299         * cs-parser.jay: Set readonly context based on special constructs.
9300         
9301         * expression.cs (LocalVariableReference.DoResolveBase): Improved
9302         readonly variable error handling.
9303         
9304         * rootcontext.cs (EmitCode): Don't verify members when error
9305         occurred.
9306         
9307         * statement.cs (LocalInfo): Add reaodnly context information.
9308         (SetReadOnlyContext, GetReadOnlyContext): New methods.
9309
9310 2005-05-13  Raja R Harinath  <rharinath@novell.com>
9311
9312         * statement.cs (Block.Resolve): Revert change below.  Modify fix
9313         for #74041 to initialize 'resolved' to false only for explicit
9314         blocks.  Fixes #74873.
9315
9316 2005-05-12  Raja R Harinath  <harinath@gmail.com>
9317
9318         Fix #74920.
9319         * typemanager.cs (unmanaged_enclosing_types): New.
9320         (IsUnmanagedType): Avoid infloops by using
9321         'unmanaged_enclosing_types' to talk with recursive invocations.
9322
9323 2005-05-13  Martin Baulig  <martin@ximian.com>
9324
9325         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
9326         instance variable, not a local.  Fix #74873.
9327         (Block.ResolveUnreachable): Set it to true here.
9328
9329 2005-05-11  Duncan Mak  <duncan@novell.com>
9330
9331         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
9332         continuing to process for 'arg'.
9333         (handle_preprocessing_directive): Check the argument of the #endif
9334         directive and report error CS1025 if there are any trailing
9335         characters.
9336
9337         According to the C# spec, having even whitespace after the #endif
9338         directive is illegal; however, because we call arg.TrimEnd ()
9339         beforehand, we have the same behavior as csc, allowing whitespace
9340         after the directive.
9341
9342         Fixes #74892.
9343
9344 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
9345
9346         Fix #74863.
9347         
9348         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
9349         (Constructor.GetObsoleteAttribute): Implemented correctly.
9350
9351 2005-05-10  Martin Baulig  <martin@ximian.com>
9352
9353         * support.cs (ReflectionParameters.ParameterModifier): Use
9354         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
9355         and `ParameterAttributes.In'.  Fixes #74884.
9356
9357 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
9358
9359         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
9360         
9361         * expression.cs (Argument.GetParameterModifier): Turned to property.
9362         (Invocation.Error_InvalidArguments): Add more descriptive errors.
9363         
9364         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
9365         its C# equivalent.
9366         
9367 2005-05-09  Raja R Harinath  <rharinath@novell.com>
9368
9369         Fix #74852.
9370         * decl.cs (MemberCache.AddMethods): Register override methods,
9371         rather than non-override methods.
9372         * typemanager.cs (RegisterOverride): New.
9373         (IsOverride): Update.
9374
9375 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
9376
9377         Fix #73105.
9378         
9379         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
9380         recursive declaration.
9381         
9382         * statement.cs (Block.ResolveMeta): Report any error in resolving.
9383         
9384 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
9385
9386         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
9387         
9388         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
9389
9390 2005-05-05  Raja R Harinath  <rharinath@novell.com>
9391
9392         Fix #74797.
9393         * decl.cs (DeclSpace.FamilyAccessible): 
9394         Use TypeManager.IsNestedFamilyAccessible.
9395
9396         Fix reopened #64812.
9397         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
9398         internal'.
9399
9400 2005-05-04  Raja R Harinath  <rharinath@novell.com>
9401             Abin Thomas  <projectmonokochi@rediffmail.com>
9402             Anoob V E  <projectmonokochi@rediffmail.com>
9403             Harilal P R  <projectmonokochi@rediffmail.com>
9404
9405         Fix #64812.
9406         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
9407         allow access to all static members.
9408
9409 2005-05-04  Martin Baulig  <martin@ximian.com>
9410
9411         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
9412
9413 2005-05-04  Martin Baulig  <martin@ximian.com>
9414
9415         Fix #74655.
9416
9417         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
9418         section at the end; make things work if `default' is not the last
9419         section.        
9420
9421 2005-05-04  Martin Baulig  <martin@ximian.com>
9422
9423         Fix #70400.
9424
9425         * statement.cs (Switch): Replaced the `got_default' field with a
9426         `default_section' one.
9427         (Switch.CheckSwitch): Set `default_section' here.
9428         (Switch.Resolve): If we're a constant switch and the constant is
9429         not found, use the default section.
9430
9431 2005-05-03  Martin Baulig  <martin@ximian.com>
9432
9433         * expression.cs (ArrayAccess.EmitGetLength): New public method.
9434
9435         * statement.cs (Foreach.ArrayForeach): New nested class.
9436         (Foreach.TemporaryVariable): New nested class.
9437         (Foreach.EmitArrayForeach): Removed; this is now in the new
9438         ArrayForeach class.
9439
9440 2005-05-03  Raja R Harinath  <rharinath@novell.com>
9441
9442         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
9443         more conservative.
9444         (VerifyPendingMethods): Revert change below.
9445
9446         * typemanager.cs (IsOverride, RegisterNonOverride): New.
9447         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
9448         that used to trigger warning -28.  Remove warning -28.
9449         * expression.cs (Invocation.OverloadResolve): Use
9450         TypeManager.IsOverride to distinguish override methods.
9451
9452         Fix #74773.
9453         * pending.cs (VerifyPendingMethods): If a base type implements the
9454         requested interface, don't bother checking individual methods of
9455         the base type.  As a side-effect, this prevents the creation of
9456         unnecessary proxies.
9457
9458 2005-05-02  Martin Baulig  <martin@ximian.com>
9459
9460         Fix #70182.
9461
9462         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
9463         Also `And' the locals if the old vector is null.
9464         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
9465         null; in this case we basically reset all the variables.        
9466
9467 2005-05-02  Martin Baulig  <martin@ximian.com>
9468
9469         Fix #74529.
9470
9471         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
9472         Added `FlowBranching branching' argument; always `and' the
9473         variables instead of `or'ing them unless we're an infinite loop.
9474
9475         * statement.cs (While.Resolve): Create a new sibling unless we're
9476         infinite.       
9477
9478 2005-05-02  Martin Baulig  <martin@ximian.com>
9479
9480         Fix #70140.
9481
9482         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
9483         arguments; use it instead of creating a new TopLevelBlock.
9484         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
9485         our ConstructorInitializer.
9486
9487         * statement.cs
9488         (TopLevelBlock.TopLevelBranching): New public property.
9489         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
9490         and create our `TopLevelBranching'.
9491
9492         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
9493         anonymous method host, use `block.TopLevelBranching' rather than
9494         creating a new branching.
9495
9496 2005-04-20  Miguel de Icaza  <miguel@novell.com>
9497
9498         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
9499         a ScopeInfo, if any of the current children is a child of the new
9500         entry, move those children there.
9501
9502 2005-04-30  Martin Baulig  <martin@ximian.com>
9503
9504         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
9505         at the beginning of a SwitchSection.  Fix #73335.
9506
9507 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
9508
9509         Fix #74378
9510         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
9511         
9512         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
9513         (FieldExpr.DoResolve): Obsolete members are ignored for field
9514         initializers.
9515         
9516 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
9517
9518         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
9519         of arrays detection.
9520
9521         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
9522         verification.
9523         (Field.VerifyClsCompliance): Volatile fields are not compliant.
9524
9525         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
9526         arrays report.
9527
9528 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
9529
9530         * cs-parser.jay: Use the prefered version of -unsafe in error
9531         message.
9532
9533 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
9534
9535         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
9536         circumstances.
9537
9538 2005-04-20  John Luke  <john.luke@gmail.com>
9539
9540         * driver.cs: fix typo in error message, --outout to --output
9541
9542 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
9543
9544         * codegen.cs (InRefOutArgumentResolving): New field.
9545         
9546         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
9547         fields outside contructor.
9548         
9549         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
9550         
9551 2005-04-19  Miguel de Icaza  <miguel@novell.com>
9552
9553         * anonymous.cs (CaptureContext.EmitParameterInstance): The
9554         parameter code was not completed ever, so it was not as up-to-date
9555         as local variables.  Must finish it.
9556
9557         The bug fix was to compare the Toplevel of the block, not the
9558         current block.  Thanks for Ben for pointing this out. 
9559
9560 2005-04-19  Raja R Harinath  <rharinath@novell.com>
9561
9562         * decl.cs (AddMethods): Use the declaring type of the problem
9563         method to determine if we want to squash a warning.
9564
9565 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
9566
9567         * attribute.cs: Removed debug output.
9568
9569         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
9570         
9571         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
9572         Report.Stderr.
9573         
9574 2005-04-18  Raja R Harinath  <rharinath@novell.com>
9575
9576         Fix #74481.
9577         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
9578         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
9579         all null comparisons against reference types.
9580
9581 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
9582
9583         Fix# 74565
9584         * class.cs (TypeContainer.CircularDepException) New nested
9585         exception class.
9586         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
9587         (TypeContainer.DefineType): Removed error, reset InTransit before
9588         exit.
9589         (Class.DefineType): Throw exception when is in Transit.
9590         Catch exception and report error.
9591         (Struct.DefineType): Throw exception when is in Transit.
9592         Catch exception and report error.
9593         (Interface.DefineType): Throw exception when is in Transit.
9594         Catch exception and report error.
9595
9596         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
9597         handle nested exception handlers.
9598
9599         * flowanalysis.cs (InTryWithCatch): New method, search for try with
9600         a catch.
9601
9602         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
9603         InFinally and InCatch storage.
9604
9605         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
9606         (Catch.Resolve): Set and Restore ec.InCatch.
9607         (Try.Resolve): Set and Restore ec.InFinally.
9608         (Try.HasCatch): True when try has catch.
9609
9610 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
9611
9612         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
9613           for the same event member, so exclude such cases from warning 419.
9614           Fixed bug #74633.
9615
9616 2005-04-16  Miguel de Icaza  <miguel@novell.com>
9617
9618         * expression.cs (Binary.ResolveOperator): Apply patch from John
9619         Luke to fix bug 59864: operators &, | and ^ on enumerations
9620         require that the same enum type on both sides.
9621
9622         * driver.cs: Add warnings to old flag usage, this is to assist
9623         people who produce Makefiles and hope that the Makefiles will be
9624         used on Windows.
9625
9626         * class.cs (TypeContainer.EmitType): Moved the definition of the
9627         special $PRIVATE$ field from the resolve phase to the Emit phase.
9628         During resolve we do not know if we are a struct with
9629         HasExplicitLayout, we know this only after the attributes for the
9630         type are emitted.
9631
9632         Set the FieldOffset to zero on the dummy field that we create for
9633         the class.   Fixes 74590.
9634
9635 2005-04-16  Raja R Harinath  <rharinath@novell.com>
9636
9637         Fix #73834.
9638         * ecore.cs (PropertyExpr.resolved): New.
9639         (DoResolve): Use it to handle a case of double resolution here.
9640         Handle a case of identical-name-and-type-name.
9641         * expression.cs (ArrayCreation.CheckIndices): Avoid double
9642         resolution by storing the results of expression resolution back
9643         into the "probes" array.
9644
9645 2005-04-15  Raja R Harinath  <rharinath@novell.com>
9646
9647         Fix cs0208-7.cs and cs0208-8.cs.
9648         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
9649         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
9650         error reporting to point out the reason a struct is not unmanaged.
9651
9652 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
9653
9654         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
9655           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
9656
9657 2005-04-13  Raja R Harinath  <rharinath@novell.com>
9658
9659         Fix #74528.
9660         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
9661         IdenticalNameAndTypeName here.
9662         (EventExpr.InstanceResolve): Likewise.
9663
9664 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
9665
9666         C# 2.0 DefaultCharSetAttribute implementation
9667         
9668         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
9669         which allows us to set GlobalNamespace for every resolve.
9670         (Attribute.ResolveArguments): Cut from Resolve.
9671         (Attribute.GetCharSetValue): Returns CharSet named argument.
9672         (Attribute.DefinePInvokeMethod): Gets default charset from
9673         module settings.
9674         (GlobalAttribute.ResolveAsTypeStep): Override.
9675         (GlobalAttribute.ResolveArguments): Override.
9676         
9677         * class.cs (TypeAttr): Is protected.
9678         
9679         * codegen.cs (ModuleClass.DefaultCharSet): New member.
9680         (ModuleClass.DefaultCharSetType): New memeber.
9681         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
9682         
9683         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
9684         charset from module.
9685         
9686         * delegate.cs (TypeAttr): Override.
9687         (Delegate.DefineType): Use this TypeAttr.
9688         
9689         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
9690         at very early stage (before types are defined) to resolve model
9691         module attributes. It will probably not work with corlib but it
9692         should be ok.
9693         
9694         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
9695         charset from module.
9696         
9697         * typemanager.cs (default_charset_type): New type.
9698
9699 2005-04-13  Raja R Harinath  <rharinath@novell.com>
9700
9701         * decl.cs (MemberCache.AddMethods): Don't warn if
9702         System.Object.Finalize has buggy MethodAttributes.
9703
9704         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
9705         removed below.
9706
9707 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
9708
9709         * doc.cs : detect ambiguous reference to overloaded members.
9710           Fixed bug #71603. MS 1.1 csc does not detect it.
9711
9712 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
9713
9714         * doc.cs : delegates must not be referenced with parameters.
9715           Fixed bug #71605.
9716
9717 2005-04-12  Miguel de Icaza  <miguel@novell.com>
9718
9719         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
9720
9721 2005-04-10  Miguel de Icaza  <miguel@novell.com>
9722
9723         * driver.cs (MainDriver): Stop processing if the CLS stage found
9724         errors. 
9725
9726         (CompilerCallableEntryPoint.InvokeCompiler): Always
9727         reset after execution;   Take a TextWriter argument for the
9728         output.
9729
9730         * report.cs: Use the error stream instead of hardcoding stderr. 
9731
9732 2005-04-09  Miguel de Icaza  <miguel@novell.com>
9733
9734         * class.cs: Reduce code paths to test, too small of an
9735         optimization to make it worth the extra testing.  Always perform
9736         it. 
9737
9738 2005-04-08  Raja R Harinath  <rharinath@novell.com>
9739
9740         Fix #74510.
9741         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
9742         operators that had errors reported on them.
9743
9744 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
9745
9746         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
9747         argument types.
9748         (Attribute.Resolve): Add named argument type checking.
9749         
9750         * class.cs (FixedField.Define): Use IsPrimitiveType
9751         
9752         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
9753         
9754         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
9755         unsafe parameter types.
9756         
9757         * statement.cs (Using.ResolveExpression): Add better error description.
9758         
9759         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
9760         
9761 2005-04-08  Raja R Harinath  <rharinath@novell.com>
9762
9763         Fix #74484.
9764         * attribute.cs (Attribute.GetAttributeUsage): Resolve
9765         AttributeUsageAttribute in the emitcontext of the attribute class,
9766         not in the emitcontext of the attributable entity it was attached to.
9767         * cs-parser.jay: Use 'current_class', not 'current_container',
9768         when creating a GlobalAttribute.
9769
9770 2005-04-08  Alp Toker  <alp@atoker.com>
9771
9772         * pending.cs: The fix to #58413 failed to compile methods implementing
9773         interfaces with/without params modifiers and vice versa, even though
9774         params modifiers aren't part of the signature. Make the modifier check
9775         less strict as in csc.
9776
9777 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
9778             Anoob V E  <projectmonokochi@rediffmail.com>
9779             Harilal P R  <projectmonokochi@rediffmail.com>
9780
9781         Fix #58413.
9782         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
9783         modifiers of pending methods.
9784         (PendingImplementation.PendingImplementation): Initialize it.
9785         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
9786         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
9787         with ParameterData.  Add check for modifiers.
9788         * class.cs (MethodData.Define): Update to changes.
9789
9790 2005-04-07  Raja R Harinath  <rharinath@novell.com>
9791
9792         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
9793
9794 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
9795
9796         * class.cs (PropertyMethod.Define): Check private accessor in abstract
9797         property.
9798         
9799         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
9800         
9801         * rootcontext.cs,
9802         * typemanager.cs: Registered RequiredAttributeAttribute.
9803         
9804 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
9805
9806         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
9807         Warning CS0169 is back at level 3.
9808         (IMethodData.SetMemberIsUsed): New method.
9809         
9810         * decl.cs (IsUsed): New value; moved from FieldBase.Status
9811         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
9812         
9813         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
9814
9815         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
9816         contants.
9817         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
9818         is used.
9819         
9820         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
9821         is used.
9822         
9823         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
9824         to avoid the problems with nested types.
9825
9826 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
9827             Anoob V.E  <projectmonokochi@rediffmail.com>
9828             Harilal P.R  <projectmonokochi@rediffmail.com>
9829             Raja R Harinath  <rharinath@novell.com>
9830
9831         Fix #73820.
9832         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
9833         attribute.
9834         * typemanager (GetConstructor): Make public.
9835
9836 2005-04-05  John Luke  <john.luke@gmail.com>
9837             Raja R Harinath  <rharinath@novell.com>
9838
9839         Fix #62232.
9840         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
9841         struct too.  Return false quicker in a few cases.
9842         (VerifyUnManaged): Use it.
9843
9844 2005-04-05  Raja R Harinath  <rharinath@novell.com>
9845
9846         Fix #74041.
9847         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
9848         not 'unreachable_seen'.
9849
9850 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
9851
9852         * attribute.cs (Attribute.GetValue): Removed unused.
9853         
9854         * codegen.cs (CodeGen.TrimExt): Removed unused.
9855         
9856         * cs-parser.jay (output): Removed unused.
9857         
9858         * cs-tokenizer.cs (hex_digits): Removed unused.
9859         
9860         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
9861         
9862         * expression.cs (Indirection.LoadExprValue): Removed unused.
9863         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
9864         
9865         * iterators.cs (Iterator.param_types): Removed unused.
9866         
9867         * statement.cs (Goto.block): Removed unused.
9868         (ToplevelBlock.did): Removed unused.
9869         (Switch.ResolveConstantSwitch): Removed unused.
9870
9871 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
9872
9873         * rootcontext.cs: Allow mcs to bootstrap with the compilation
9874         resetting thingy.
9875
9876 2005-04-01  Raja R Harinath  <rharinath@novell.com>
9877
9878         Fix #74232 and cs0208-3.cs.
9879         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
9880         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
9881         unmanaged type.  Don't use FieldBuilders when 't' is a
9882         TypeBuilder.  Use ModFlags and MemberType fields.
9883         * class.cs (MemberBase.member_type): Rename from MemberType.
9884         (MemberBase.MemberType): New property.  Determines member_type on
9885         demand.
9886         (MemberBase.DoDefine): Don't initialize MemberType here.
9887         (FieldMember.Define): Likewise.
9888
9889 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
9890
9891         Fix #74241
9892         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
9893         Attributes are emitted there.
9894         
9895 2005-04-01  Raja R Harinath  <rharinath@novell.com>
9896
9897         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
9898         keyword in 'partial enum' too.
9899         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
9900         is not allowed).
9901         Report from Kamil Skalski <nazgul@omega.pl>.
9902
9903         Fix #74309.
9904         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
9905         have partial containers too.
9906
9907         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
9908         in block' checks to Block.CheckInvariantMeaningInBlock.
9909         * statement.cs (Block.GetKnownVariableInfo): Make private.
9910         (Block.IsVariableUsedInChildBlock): Remove.
9911         (Block.IsVariableUsedInBlock): Likewise.
9912         (Block.CheckInvariantMeaningInBlock): New.  Show location of
9913         conflicting declaration.
9914         (Block.AddVariable): Make error messages less long-winded and more
9915         specific.  Show location of conflicting declaration.
9916         * parameter.cs (Parameters.Location): New readonly property.
9917
9918 2005-03-31  Raja R Harinath  <rharinath@novell.com>
9919
9920         Clean up semantics of invoking ResolveMemberAccess.
9921         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
9922         can have an instance, ensure that we pass in a non-TypeExpression
9923         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
9924         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
9925         argument.  Update to changes and simplify.
9926         (FieldExpr.Emitinstance): Remove CS0120 check.
9927         (PropertyExpr.EmitInstance): Likewise.
9928         * expression.cs (Argument.Resolve): Likewise.
9929         (Invocation.DoResolve): Update to changes in semantics of
9930         InstanceExpression.
9931
9932 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
9933
9934         Fix #74241
9935         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
9936         customization.
9937         
9938         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
9939
9940 2005-03-31  Raja R Harinath  <rharinath@novell.com>
9941
9942         Fix difference in behaviour with commandline invocation.
9943         * driver.cs (Driver.Reset): New.
9944         (CompilerCallableEntryPoint): Call it.
9945
9946         * statement.cs (If.Resolve): Avoid spurious "uninitialized
9947         variable" warnings if the boolean expression failed to resolve.
9948
9949 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
9950
9951         * attribute.cs: Fix the union of several permissions when some of them
9952         are unrestricted (so the result isn't an unrestricted permission set).
9953         Fix #74036.
9954
9955 2005-03-30  Raja R Harinath  <rharinath@novell.com>
9956
9957         * ecore.cs (MemberExpr): New class.  Convert from interface
9958         IMemberExpr.
9959         (MemberExpr.ResolveMemberAccess): Refactor and move here from
9960         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
9961         error checks.
9962         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
9963         (MethodGroupExpr.IsExplicitImpl): Remove.
9964         (Expression.GetFieldFromEvent): Remove.
9965         (SimpleName.MemberStaticCheck): Remove.
9966         (SimpleName.DoSimpleNameResolve): Update to changes.
9967         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
9968         (MemberAccess.IdenticalNameAndTypeName): Remove.
9969         (MemberAccess.error176): Move to MemberExpr.
9970         (MemberAccess.DoResolve): Update to changes.
9971         (BaseAccess.DoResolve): Likewise.
9972
9973 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
9974
9975         C# 2.0 Conditional attribute class implementation
9976         
9977         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
9978         Analyzes class whether it has attribute which has ConditionalAttribute
9979         and its condition is not defined.
9980         
9981         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
9982         (Class.IsExcluded): New method. Search for at least one defined
9983         condition in ConditionalAttribute of attribute class.
9984
9985 2005-03-30  Raja R Harinath  <rharinath@novell.com>
9986
9987         * ecore.cs (PropertyExpr): Derive from Expression, not
9988         ExpressionStatement.
9989         (PropertyExpr.EmitStatement): Remove.
9990
9991 2005-03-29  Raja R Harinath  <rharinath@novell.com>
9992
9993         Fix #74060.
9994         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
9995         internal field "value__" of an enum be private.  The examples for
9996         "value__" that I found on MSDN all used FieldAttributes.Private.
9997
9998         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
9999         Don't mention IL method attribute names.
10000
10001         Fix #47991.  Remove a TODO.
10002         * statement.cs (Block.Toplevel): Make into a field.
10003         (Block.Parameters): Move into ToplevelBlock.
10004         (Block.known_variables): Rename from child_variable_names.
10005         (Block.Block): Remove variants that take Parameters.  Initialize
10006         'Toplevel' with the immediately surrounding toplevel block.
10007         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
10008         LocalInfo parameter.
10009         (Block.GetKnownVariableInfo): New.
10010         (Block.IsVariableNameUsedInChildBlock): Update.
10011         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
10012         the block, even though it may not be in scope.
10013         (Block.AddVariable): Remove Parameters parameter.  Use
10014         Toplevel.Parameters instead.
10015         (Block.AddConstant): Remove Parameters parameter.
10016         (Block.GetParameterReference): Update to use Toplevel.Parameters.
10017         (Block.IsParamaterReference): Likewise.
10018         (Block.IsLocalParameter): Likewise.  Simplify a lot.
10019         (ToplevelBlock.Parameters): New.  Moved from Block.
10020         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
10021         initialize Parameters to a non-null value.
10022         * cs-parser.jay: Update to changes.
10023         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
10024         simple names that mean different things in the same block.  Use
10025         Block.IsVariableNameUsedInBlock.
10026
10027 2005-03-28  Raja R Harinath  <rharinath@novell.com>
10028
10029         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
10030         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
10031         GetTypeHandle.  It is possible for a reflected type to derive from
10032         a TypeBuilder (e.g., int[] derives from the TypeBuilder
10033         System.Array during mscorlib compilation).
10034         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
10035         contain a method_hash, don't create one either.  Don't create a
10036         deep copy of the base cache's method_hash.
10037         (MemberCache.SetupCache): Rename back from DeepCopy.
10038         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
10039         already initialized.  If we see an override function, add its
10040         underlying base virtual function to the member_hash too.
10041
10042         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
10043
10044 2005-03-26  Raja R Harinath  <harinath@acm.org>
10045
10046         Fix #73038.
10047         * assign.cs (Assign.DoResolve): When the RHS of an assignment
10048         fails to resolve, ensure that the LHS is still resolved as an
10049         lvalue.
10050
10051 2005-03-25  Raja R Harinath  <harinath@acm.org>
10052
10053         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
10054         ec.ContainerType.
10055         (Enum.current_ec): Remove.
10056         (Enum.LookupEnumValue): Remove EmitContext argument.
10057         Just uses the one created during DefineType.
10058         (Enum.FindMembers): Update.
10059         * expression.cs (MemberAccess.DoResolve): Update.
10060
10061 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
10062
10063         * assign.cs (Assign.DoResolve): Check for CS1717 when
10064         source and target are same (uses Equals).
10065
10066         * expression.cs (LocalVariableReference, ParameterReference,
10067         This): Implemented Equals, GetHashCode.
10068
10069         * statement.cs (Block.GetParameterReference): Removed useless
10070         local variable.
10071
10072 2005-03-22  Raja R Harinath  <rharinath@novell.com>
10073
10074         Fix cs0128.cs
10075         * statement.cs (Block.AddVariable): Ensure that we skip implicit
10076         blocks before deciding whether the error is cs0136 or cs0128.
10077
10078         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
10079         (using_alias_directive, using_namespace_directive): Pass
10080         MemberName, not an expression to Namespace.UsingAlias and
10081         Namespace.Using.
10082         (MakeName): Use the MemberName of the namespace.
10083         * namespace.cs (Namespace.MemberName): New.
10084         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
10085         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
10086         Likewise.
10087         * decl.cs (MemberName.Name): Make readonly.
10088         (MemberName.FromDotted): New "constructor".
10089         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
10090         (MemberCore.Name): Compute from MemberName on demand.
10091         (MemberCore.SetMemberName): Provide a way to change the
10092         MemberName.
10093         (MemberCore.AddToContainer): Don't take a fullname parameter.
10094         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
10095         fully qualified name of the container to the member name.
10096         (TypeContainer.AddToTypeContainer): Use a fully qualified name
10097         only if the type is a member of the root container.
10098         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
10099         MemberName.Left rather than searching for an embedded ".".
10100         (PartialContainer.CreatePart): Update to changes in RootContext.
10101         (MemberBase.ShortName): Turn into a property.  Use
10102         MemberCore.SetMemberName.
10103         (MemberBase.ExplicitInterfaceName): Remove.
10104         (MemberBase.UpdateMemberName): Remove.
10105         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
10106         (PropertyBase.SetMemberName): New override.
10107         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
10108         (Tree.GetDecl): New.
10109         (Tree.AllDecls): Rename from Decls.
10110         * attribute.cs, enum.cs, report.cs: Update to changes.
10111         * driver.cs (MainDriver): Use MemberName.FromDotted on
10112         RootContext.MainClass.
10113
10114 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
10115
10116         * class.cs (FixedField.Define): Check for CS1664 and more sanity
10117         checks.
10118
10119         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
10120
10121 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
10122
10123         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
10124         property accessor modifiers.
10125
10126         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
10127         fixed buffer attribute (CS1716).
10128         (PropertyMethod.HasCustomAccessModifier): When property accessor
10129         has custom modifier.
10130
10131         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
10132         modifiers.
10133         (PropertyExpr.DoResolveLValue): Add CS0272.
10134
10135 2005-03-17  Miguel de Icaza  <miguel@novell.com>
10136
10137         * convert.cs: When converting to a pointer, use the proper Conv.U
10138         or Conv.I depending on the source data type.
10139
10140         * cs-tokenizer.cs: Make the size for large decimal constants,
10141         fixes #72957.
10142
10143 2005-03-17  Martin Baulig  <martin@ximian.com>
10144
10145         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
10146         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
10147
10148 2005-03-17  Martin Baulig  <martin@ximian.com>
10149
10150         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
10151         to bool so we can return an error condition.
10152         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
10153         returned an error.
10154
10155 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
10156
10157         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
10158         attributes.
10159
10160 2005-03-16  Raja R Harinath  <rharinath@novell.com>
10161
10162         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
10163         Refactor to avoid traversing the list of assemblies, and to avoid
10164         string concatenation.
10165         * typemanager.cs (guid_attr_type): Remove.
10166         (negative_hits, pointers, references): Remove hashes.
10167         (type_hash): New.
10168         (GetConstructedType): New.  Uses type_hash to handle constructed
10169         types (arrays, references, pointers).
10170         (GetReferenceType, GetPointerType): Use it.
10171         (GetNestedType): New.  Uses type_hash to handle nested types of
10172         reflected types.
10173         (LookupType, LookupTypeDirect): Remove.
10174         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
10175         'types' hash and LookupTypeReflection directly.
10176         (params_string, params_object): Use GetConstructedType.
10177         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
10178         top-level types.
10179         (Namespace.Lookup): Use cached_types.
10180         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
10181         provided by old TypeManager.LookupType.
10182         * rootcontext.cs (MakeFQN): Remove.
10183         * decl.cs (DeclSpace.MakeFQN): Likewise.
10184         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
10185         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
10186         TypeManager.GetConstructedType.
10187         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
10188
10189 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
10190
10191         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
10192         indexers.
10193
10194         * cs-parser.jay: Reports CS1527 for any namespace element.
10195
10196         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
10197         Added CS0407.
10198
10199         * expression.cs (ParameterReference.IsAssigned): Changed error to
10200         CS0269.
10201         (Error_WrongNumArguments): Moved CS0245 detection here.
10202
10203         * statement.cs (Return.Resolve): Add CS1622 report.
10204
10205 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
10206
10207         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
10208
10209 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
10210
10211         * attribute.cs expression.cs: Get rid of some allocations.
10212
10213 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
10214
10215         * doc.cs : just eliminate the latest change.
10216
10217 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
10218
10219         * doc.cs : commented out the latest change. It breaks xml-030.cs
10220
10221 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
10222
10223         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
10224           fail. So invoke CreateType() in FindDocumentedType().
10225
10226 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
10227
10228         * cs-tokenizer.cs : added IsKeyword().
10229         * doc.cs : Detect keyword incorrectly used as identifier.
10230           Allow identifiers prefixed by @.
10231
10232 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
10233
10234         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
10235         It caused exception in namespace resolving (again!).
10236         
10237         * class.cs (Class.ctor): Removed exit.
10238         (PropertyMethod.ctor): ditto.
10239         
10240         * codegen.cs (Codegen.Reset): Reset static data.
10241         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
10242         
10243         * cs-tokenizer.cs (Cleanup): Removed.
10244         
10245         * driver.cs (GetSystemDir): Rewrote to one line command.
10246         It caused problem with unloaded dynamic modules.
10247         (UnixParseOption): Removed Exit.
10248         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
10249         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
10250         Now can be mcs used as library.
10251         
10252         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
10253         empty location.
10254         
10255         * location.cs (Reset): Reset static data.
10256         
10257         * namespace.cs (Reset): Reset static data.
10258         
10259         * report.cs (Report.Reset): Reset static data.
10260         
10261         * rootcontext.cs (RootContext.Reset): Reset static data.
10262         
10263         * tree.cs (RootTypes.ctor): Use Location.Null
10264         
10265         * typemanager.cs (TypeManager.Reset): Reset static data.
10266         (CoreLookupType): Removed Exit.
10267         (TypeHandle.Reset): Reset static data.
10268         
10269 2005-03-10  Raja R Harinath  <rharinath@novell.com>
10270
10271         Fix #73516.
10272         * typemanager.cs (ComputeNamespaces): Import namespaces from
10273         referenced modules too.
10274
10275 2005-03-09  Raja R Harinath  <rharinath@novell.com>
10276
10277         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
10278         than '.'.
10279
10280 2005-03-09  Raja R Harinath  <rharinath@novell.com>
10281
10282         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
10283         enclosing DeclSpace.  This ensures that a name-lookup populates
10284         more caches and there are fewer 'TypeExpression's.  Carve out
10285         nested type lookup into ...
10286         (LookupNestedTypeInHierarchy): ... this.
10287
10288 2005-03-09  Raja R Harinath  <rharinath@novell.com>
10289
10290         Clean up a few partial-class semantics.  
10291         Fixes test-357.cs and cs1618-2.cs.
10292         * cs-parser.jay (struct_declaration): Use 'current_class' as
10293         parent of newly-created struct.  Remove call to Register ().
10294         Use 'pop_current_class' to complete handing the current struct.
10295         (interface_declaration): Likewise.
10296         (class_declaration): Likewise.
10297         (enum_declaration): Use 'current_class' as parent of newly created
10298         enum.
10299         (delegate_declaration): Likewise.
10300         (pop_current_class): New function.  This is used to handle closing
10301         up the 'current_class' and 'current_container', and pointing them
10302         to the enclosing class/container.
10303         (CSharpParser): Initialize 'current_class' too.
10304         * decl.cs (MemberCore): Add check for invariant: a partial
10305         container is not a parsed entity, and thus does not enclose any
10306         parsed members.
10307         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
10308         (DeclSpace.BaseTypeExpr): Use it.
10309         (DeclSpace.LookupType): Add check for invariant.
10310         * class.cs (TypeContainer): Add check for invariant: a nested
10311         class should have the same NamespaceEntry as its enclosing class.
10312         (TypeContainer.EmitFieldInitializers): Make virtual.
10313         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
10314         MemberCore.
10315         (TypeContainer.Register): Remove.
10316         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
10317         null.  Use TypeResolveEmitContext for resolving base types and
10318         interfaces.  Move initialization of Parts.TypeBuilder here from
10319         ...
10320         (TypeContainer.DefineNestedTypes): ... here.
10321         (PartialContainer): Take a Namespace not a NamespaceEntry.
10322         (PartialContainer.Create): Don't use Register.  Call the
10323         appropriate Add... function directly.
10324         (ClassPart): Take both the PartialContainer and the enclosing
10325         class as constructor arguments.
10326         (ClassPart.EmitFieldInitializers): Override.
10327         (ClassPart.PartFindNestedTypes): Remove.
10328         (FieldBase.GetInitializerExpression): Resolve the initializer
10329         expression in the emit context of the enclosing class.
10330         * tree.cs (RootTypes): Remove Register ().
10331         
10332 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
10333
10334         * cs-parser.jay: Removed CS0134.
10335         
10336         * driver.cs: Removed CS1901.
10337         
10338         * expression.cs (SizeOf.DoResolve): Don't report CS0233
10339         for predefined types.
10340
10341 2005-03-07  Duncan Mak  <duncan@novell.com>
10342
10343         * codegen.cs (Save):  Catch UnauthorizedAccessException as
10344         well. Fixes bug #73454.
10345
10346 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
10347
10348         * cs-tokenizer.cs (xtoken): Add CS1035.
10349         
10350         * class.cs (MethodData.Define): Add CS0683.
10351         (FieldMember.ctor): Add CS0681.
10352
10353 2005-03-07  Raja R Harinath  <rharinath@novell.com>
10354
10355         * ecore.cs (SimpleName.DoResolve): Rename from
10356         SimpleName.DoResolveAllowStatic.
10357         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
10358         Pass 'intermediate' flag to MemberStaticCheck.
10359         (SimpleName.MemberStaticCheck): Skip "static check" only in case
10360         of "intermediate" lookups via MemberAccess.
10361         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
10362         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
10363
10364 2005-03-07  Raja R Harinath  <rharinath@novell.com>
10365
10366         Fix #73394.
10367         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
10368         slipped in because of variable names that are identical to a
10369         builtin type's BCL equivalent ('string String;', 'int Int32;').
10370         (PropertyExpr.EmitInstance): Likewise.
10371
10372 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
10373
10374         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
10375         
10376         * report.cs (warning_ignore_table): Made public.
10377
10378 2005-03-04  Raja R Harinath  <rharinath@novell.com>
10379
10380         Fix #73282.
10381         * class.cs (MethodData.Emit): Pass 'container' to
10382         container.GetObsoleteAttribute instead of 'container.Parent'.
10383
10384 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
10385
10386         * cs-parser.jay: Add 1534 error test.
10387
10388         * iterators.cs (Yield.CheckContext): Add error 1629.
10389         (Iterator.ctor): Save unsafe modifier.
10390         (MoveNextMethod.DoEmit): Restore unsafe context.
10391
10392         * namespace.cs (UsingAlias): Better error message.
10393
10394 2005-03-03  Dan Winship  <danw@novell.com>
10395
10396         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
10397         the warning message [#73219]
10398
10399 2005-03-03  Raja R Harinath  <rharinath@novell.com>
10400
10401         Fix compile with MCS 1.0.0.0.
10402         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
10403         w_restore to not depend on string constant folding.
10404
10405 2005-03-03  Raja R Harinath  <rharinath@novell.com>
10406
10407         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
10408         CS0246 check to users who passed 'silent = false'.
10409         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
10410         check.
10411         (SimpleName.SimpleNameResolve): Update.
10412         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
10413         (MemberAccess.IdenticalNameAndTypeName): Update.
10414         * doc.cs (FindDocumentedTypeNonArray): Update.
10415
10416 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
10417
10418         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
10419         * parameters.cs (ComputeAndDefineParameters): Remove.
10420         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
10421         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
10422         Use GetParameterInfo.
10423
10424 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
10425
10426         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
10427
10428 2005-03-02  Raja R Harinath  <rharinath@novell.com>
10429
10430         Unify DeclSpace.LookupType and DeclSpace.FindType.
10431         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
10432         is in charge of defining nested types on demand.
10433         (DeclSpace.LookupType): Use it when the current_type is a
10434         TypeBuilder.  Use LookupTypeDirect for reflected types.
10435         (DeclSpace.FindType): Remove.
10436         (DeclSpace.LookupInterfaceOrClass): Likewise.
10437         (DeclSpace.DefineTypeAndParents): Likewise.
10438         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
10439         DeclSpace.LookupType.
10440         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
10441         * typemanager.cs (LookupType): Simplify.
10442         (AddUserType): Remove type from negative_hits.
10443         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
10444         * class.cs (TypeContainer.FindMembers): Move handling of nested
10445         types ...
10446         (TypeContainer.FindMembers_NestedTypes): ... here.
10447         (TypeContainer.FindNestedType): Implement override.
10448         (ClassPart.FindNestedType): Delegate to PartialContainer.
10449         (ClassPart.PartFindNestedType): Looks up the nested types of the
10450         part alone.
10451
10452 2005-03-02  Martin Baulig  <martin@ximian.com>
10453
10454         * class.cs (TypeContainer.DoDefineMembers): We also need a default
10455         static constructor in static classes.
10456
10457 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
10458
10459         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
10460         sizeParamIndex is not specified.
10461
10462 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
10463
10464         Fix #73117
10465         * report.cs (WarningMessage.IsEnabled): Missing null check.
10466
10467 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
10468
10469         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
10470         in the fields and not in the properties.
10471
10472 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
10473
10474         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
10475         fields as well.
10476
10477 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
10478
10479         * attribute.cs: Small refactoring (improved robustness).
10480         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
10481         (ValidateGuid): Removed.
10482         (Resolve): Removed referenced to above mentioned.
10483         (GetAttributeUsage): Made private and changed to work without
10484         class assistance.
10485         (GetIndexerAttributeValue): Don't crash.
10486         (GetConditionalAttributeValue): Ditto.
10487         (GetClsCompliantAttributeValue): Ditto.
10488         (ExtractSecurityPermissionSet): All attributes exceptions are
10489         error 648.
10490         (GetPropertyValue): New helper.
10491         (GetMethodImplOptions): New method.
10492         (DefinePInvokeMethod): Reuse common code. Implemented handling of
10493         some missing properties.
10494         
10495         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
10496         (Method.ApplyAttributeBuilder): Updated.
10497         
10498         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
10499         exception.
10500
10501 2005-02-28  Raja R Harinath  <rharinath@novell.com>
10502
10503         Fix #73052.
10504         * report.cs (Report.SymbolRelatedToPreviousError): Handle
10505         non-simple types (array, pointer, reference).
10506
10507 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
10508
10509         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
10510
10511         * class.cs (MethodCore.IsDuplicateImplementation): Special error
10512         for operators.
10513         (Method.CheckBase): Catch wrong destructor here.
10514         (MethodData.Define): Add errors 550, 668.
10515
10516         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
10517
10518         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
10519
10520         * pending.cs (VerifyPendingMethods): Add error 551.
10521
10522         * typemanager.cs (CSharpName): Next error report helper.
10523
10524 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
10525
10526         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
10527         attributes. Removed useless attribute double check.
10528         It saves almost 2MBs for corlib.
10529
10530 2005-02-25  Raja R Harinath  <rharinath@novell.com>
10531
10532         Fix #72924.
10533         * statement.cs (ExpressionStatement.Resolve): Make robust to being
10534         called twice in case of error.
10535
10536 2005-02-23  Chris Toshok  <toshok@ximian.com>
10537
10538         Fix compiler portions of #72827.
10539         * statement.cs (Block.Emit): call Begin/EndScope on the
10540         EmitContext instead of the ILGenerator.
10541
10542         * codegen.cs (EmitContext.BeginScope): new method, call
10543         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
10544         we have one.)
10545         (EmitContext.BeginScope): same, but EndScope and CloseScope
10546
10547         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
10548         offset and call the superclass's OpenScope(int) with it.
10549         (SymbolWriter.CloseScope): get the current il
10550         offset and call superclass's CloseScope(int) with it.
10551
10552 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
10553
10554         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
10555         CS1677 for out and ref as well.
10556
10557         * class.cs (Method.Define): Add error CS1599 detection.
10558         
10559         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
10560         
10561         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
10562         
10563         * delegate.cs (Delegate.Define): Add error CS1599 detection.
10564         
10565         * support.cs.cs (ModifierDesc): New helper method.
10566
10567 2005-02-23  Raja R Harinath  <rharinath@novell.com>
10568             Abin Thomas  <projectmonokochi@rediffmail.com>
10569             Anoob V E  <projectmonokochi@rediffmail.com>
10570             Harilal P R  <projectmonokochi@rediffmail.com>
10571
10572         Fix #57851, #72718.
10573         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
10574         MemberLookup (used for error reporting) actually returns a result.
10575         Fix error report number (122, not 112).
10576
10577 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
10578             Anoob V E  <projectmonokochi@rediffmail.com>
10579             Harilal P R  <projectmonokochi@rediffmail.com>
10580
10581         Fix #71134.
10582         * pending.cs (PendingImplementation.GetAbstractMethods):
10583         Find NonPublic members too.
10584
10585 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
10586
10587         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
10588         Fixed error 217.
10589         
10590         * class.cs (MethodCore.CheckMethodAgainstBase):
10591         Add error 239 report.
10592
10593 2005-02-21  Raja R Harinath  <rharinath@novell.com>
10594
10595         Fix #68955.
10596         * expression.cs (Invocation.IsApplicable): Make public.
10597         (Invocation.IsParamsMethodApplicable): Likewise.
10598         * delegate.cs (Delegate.VerifyApplicability): Don't use
10599         Invocation.VerifyArgumentCompat for parameter applicability
10600         testing.  Use Invocation.IsApplicable and
10601         Invocation.IsParamsMethodApplicable.
10602
10603 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
10604
10605         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
10606         
10607         * class.cs (Operator.Define): Add error 217 report.
10608         
10609 2005-02-21  Raja R Harinath  <rharinath@novell.com>
10610
10611         * namespace.cs (UsingEntry.Resolve): Undo change below.
10612
10613 2005-02-21  Raja R Harinath  <rharinath@novell.com>
10614
10615         Fix #72756.
10616         * ecore.cs (Expression.MemberLookupFailed): Add argument to
10617         disable the error message when the extended MemberLookup also
10618         fails.
10619         (Expression.MemberLookupFinal): Update.
10620         (SimpleName.DoSimpleNameResolve): Update.
10621         * expression.cs (MemberAccess.ResolveNamespaceOrType):
10622         Don't use MemberLookupFinal.
10623         (New.DoResolve): Update.
10624         (BaseAccess.CommonResolve): Update.
10625
10626 2005-02-21  Raja R Harinath  <rharinath@novell.com>
10627
10628         Fix #72732.
10629         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
10630         occured previously, don't resolve again.
10631
10632 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
10633
10634         Fix #69949
10635         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
10636         argument. Call ResolveAttributeUsage for unresolved.
10637         when types doesn't match ctor arguments.
10638         
10639         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
10640         for nested attribute classes.
10641         (Class.attribute_usage): Removed.
10642         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
10643         for attribute class.
10644         
10645         * ecore.cs (IsAttribute): Removed.
10646         
10647         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
10648         
10649         * rootcontext.cs (RegisterAttribute): Removed, attributes are
10650         now normal types.
10651         (attribute_types): Removed.
10652         (EmitCode): Global attributes are emited as the latest.
10653
10654 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
10655
10656         * class.cs (EmitFieldInitializers): Don't emit field initializer
10657         for default values when optimilization is on.
10658         
10659         * constant.cs (Constant.IsDefaultValue): New property.
10660         
10661         * driver.cs: Add /optimize handling.
10662         
10663         * constant.cs,
10664         * ecore.cs,
10665         * literal.cs: Implement new IsDefaultValue property.
10666         
10667         * rootcontext.cs (Optimize): New field, holds /optimize option.
10668
10669 2005-02-18  Raja R Harinath  <rharinath@novell.com>
10670
10671         Fix crasher in re-opened #72347.
10672         * namespace.cs (Namespace.Lookup): Return null if
10673         DeclSpace.DefineType returns null.
10674
10675         Fix #72678.
10676         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
10677
10678 2005-02-18  Raja R Harinath  <rharinath@novell.com>
10679
10680         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
10681         now returns null if it cannot resolve to an lvalue.
10682         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
10683         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
10684         returned null.  Remove check for SimpleName.
10685         (EventExpr.DoResolveLValue): New.
10686         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
10687         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
10688         error from ...
10689         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
10690         avoid CS0131 error.
10691         (Unary.ResolveOperator): Move CS0211 check ...
10692         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
10693         CS0131 error.
10694         (Unary.DoResolveLValue): Simplify.
10695         (AddressOf.DoResolveLValue): New.
10696         (ArrayAccess.DoResolveLValue): New.
10697
10698 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
10699
10700         * attribute.cs (Attribute.Resolve): Add arguments casting for
10701         when types doesn't match ctor arguments.
10702
10703 2005-02-16  Raja R Harinath  <rharinath@novell.com>
10704
10705         Fix parts of #63202.
10706         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
10707         lookup of operator in base type.  Ensure that all checks happen
10708         when the operator resolves to an "op_..." method.
10709
10710 2005-02-15  Raja R Harinath  <rharinath@novell.com>
10711
10712         Fix #71992.
10713         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
10714         'ignore_cs0104' parameter.  Pass it to ...
10715         (NamespaceEntry.Lookup): ... this.
10716         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
10717         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
10718         (TypeLookupExpression.DoResolveAsTypeStep): Update.
10719         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
10720         Update.  Request that cs0104 errors be ignored.
10721         (ComposedCast.ResolveAsTypeStep): Update.
10722
10723 2005-02-14  Raja R Harinath  <rharinath@novell.com>
10724
10725         Fix #59209.
10726         * expression.cs (Invocation.BetterFunction): Remove support for
10727         comparing virtual functions and their overrides.
10728         (Invocation.IsOverride): New.
10729         (Invocation.OverloadResolve): Don't consider 'override' functions
10730         during candidate selection.  Store them in a lookaside list.
10731         If the selected method is a 'virtual' function, use the list to
10732         find any overrides that are closer to the LHS type.
10733
10734 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
10735
10736         * expression.cs (New.DoResolve): Add complex core type reduction.
10737         (New.Constantify): Converts complex core type syntax like 'new int ()'
10738         to simple constant.
10739         
10740 2005-02-14  Raja R Harinath  <rharinath@novell.com>
10741
10742         * decl.cs (EntryType.EntryType): New constructor to create an
10743         updated copy of a cache entry.
10744         (MemberCache.AddMethods): Use it.
10745         (MemberCache.ClearDeclaredOnly): Remove.
10746         (MemberCache.MemberCache): Update.
10747
10748 2005-02-11  Miguel de Icaza  <miguel@novell.com>
10749
10750         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
10751         variable.  This one is represents the actual low-level declaration
10752         of the method, as opposed to the semantic level `IsStatic'.   
10753
10754         An anonymous method which is hosted into a static method might be
10755         actually an instance method.  IsStatic would reflect the
10756         container, while MethodIsStatic represents the actual code
10757         generated.
10758
10759         * expression.cs (ParameterReference): Use the new MethodIsStatic
10760         instead of IsStatic.
10761
10762         * anonymous.cs (AnonymousMethod.Compatible): Pass the
10763         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
10764         set on the current EmitContext. 
10765
10766         * expression.cs (Cast): Overload DoResolveLValue so we can pass
10767         resolve our casted expression as an LValue.  This triggers the
10768         proper LValue processing that is later required by Assign.
10769
10770         This fixes 72347.
10771
10772         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
10773
10774 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
10775
10776         C# 2.0 Fixed buffer implementation
10777
10778         * anonymous.cs: Update after RegisterHelperClass renaming.
10779
10780         * attribute.cs (AttributeTester.fixed_buffer_cache):
10781         Cache of external fixed buffers.
10782         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
10783         implementation if field is fixed buffer else null.
10784
10785         * class.cs
10786         (TypeContainer.AddField): Accept FieldMember instead of Field.
10787         (FieldBase.IsFieldClsCompliant): Extracted code from
10788         VerifyClsCompliance descendant customization.
10789         (FixedField): New class handles fixed buffer fields.
10790         (FixedFieldExternal): Keeps information about imported fixed
10791         buffer.
10792         (IFixedField): Make access to internal or external fixed buffer
10793         same.
10794
10795         * cs-parser.jay: Add fixed buffer parsing.
10796
10797         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
10798         buffer.
10799
10800         * expression.cs (Indirection): Extended implementation to accept
10801         fixed buffer field.
10802         (PointerArithmetic.Emit): Get element from fixed buffer as well.
10803         (ElementAccess.MakePointerAccess): Get type as parameter.
10804         (DoResolve): Add fixed buffer field expression conversion.
10805         (DoResolveLValue): Ditto.
10806         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
10807         (ArrayPtr): Derives from FixedBufferPtr.
10808         (ArrayPtr.Emit): Add extra emit for array elements.
10809
10810         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
10811
10812         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
10813         for compiler generated types.
10814         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
10815
10816         * statement.cs (Fixed): Refactored to be easier add fixed buffer
10817         and consume less memory.
10818         (Fixed.Resolve): Add fixed buffer case.
10819
10820         * typemanager.cs (compiler_generated_attr_ctor,
10821         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
10822         (HasElementType): Add our own implementation to work on every
10823         runtime.
10824
10825 2005-02-11  Miguel de Icaza  <miguel@novell.com>
10826
10827         * anonymous.cs (CaptureContext): Track whether `this' has been
10828         referenced.   
10829
10830         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
10831         only captured `this' if it was implicitly done (instance
10832         methods/variables were used). 
10833
10834         * codegen.cs (EmitContext.CaptureThis): New method to flag that
10835         `this' must be captured.
10836
10837 2005-01-30  Miguel de Icaza  <miguel@novell.com>
10838  
10839         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
10840         is null it means that there has been no need to capture anything,
10841         so we just create a sibling.
10842
10843         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
10844
10845         Just a partial fix.  The other half is fairly elusive.
10846         
10847 2005-02-10  Raja R Harinath  <rharinath@novell.com>
10848
10849         Fix #52586, cs0121-4.cs.
10850         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
10851         and return a hashtable.
10852         (MemberCache.ClearDeclaredOnly): New.
10853         (MemberCache.MemberCache): Update to change.  Make a deep copy of
10854         the method_hash of a base type too.
10855         (MemberCache.AddMethods): Adapt to having a deep copy of the base
10856         type methods.  Overwrite entries with the same MethodHandle so
10857         that the ReflectedType is correct.  The process leaves in base
10858         virtual functions and their overrides as distinct entries.
10859         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
10860         matters since it was boxed in a ArrayList before.
10861         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
10862         modifier.
10863         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
10864         case of a virtual function and its override (choose the overload
10865         as better).
10866         (Invocation.OverloadResolve): Avoid 'override' members during
10867         'applicable_type' calculation.
10868
10869 2005-02-09  Raja R Harinath  <rharinath@novell.com>
10870
10871         Combine two near-redundant caches.
10872         * typemanager.cs (method_params): Rename from method_internal_params.
10873         (TypeManager.GetParameterData): New.  Replace
10874         Invocation.GetParameterData.
10875         (TypeManager.LookupParametersByBuilder): Remove.
10876         * expression.cs (Invocation.method_parameter_cache): Remove.
10877         (Invocation.GetParameterData): Remove.
10878         Update to changes.
10879         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
10880         Update to changes.
10881
10882 2005-02-08  Raja R Harinath  <rharinath@novell.com>
10883
10884         Fix #72015.
10885         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
10886         TypeManager.multicast_delegate_type is null, resolve it by looking
10887         up "System.MulticastDelegate".
10888         * rootcontext.cs (RootContext.ResolveCore): Simplify.
10889
10890 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
10891             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
10892             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
10893
10894         Fix cs0164.cs.
10895         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
10896         (LabeledStatement.AddReference): New.  Set 'referenced'.
10897         (Goto.Resolve): Use it.
10898
10899 2005-02-05  John Luke  <john.luke@gmail.com>
10900
10901         * driver.cs: remove duplicate -doc line in Usage ()
10902
10903 2005-02-04  Raja R Harinath  <rharinath@novell.com>
10904
10905         * location.cs (Location.AddFile): Fix CS2002 error report.
10906
10907 2005-02-02  Martin Baulig  <martin@ximian.com>
10908
10909         * delegate.cs (Delegate.DefineType): Report an internal error if
10910         TypeManager.multicast_delegate_type is null.  See bug #72015 for
10911         details.        
10912
10913 2005-02-02  Raja R Harinath  <rharinath@novell.com>
10914
10915         Fix a crasher in a variant of #31984.
10916         * const.cs (Constant.CheckBase): New override that defers the
10917         new-or-override check in case the base type hasn't been populated
10918         yet.
10919         (Constant.Define): Ensure the new-or-override check is performed.
10920
10921 2005-02-01  Duncan Mak  <duncan@ximian.com>
10922
10923         * const.cs (LookupConstantValue): Check that `ce' is not null
10924         before calling GetValue ().
10925
10926 2005-02-01  Raja R Harinath  <rharinath@novell.com>
10927
10928         Fix test-334.cs (#69519).
10929         * cs-parser.jay (using_alias_directive): Pass in an expression to
10930         NamespaceEntry.UsingAlias.
10931         (using_namespace_directive): Pass in an expression to
10932         NamespaceEntry.Using.
10933         (namespace_name): Don't flatten to a string.
10934         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
10935         (NamespaceEntry.AliasEntry.Resolve): Lookup using
10936         ResolveAsTypeStep.
10937         (NamespaceEntry.UsingEntry): Likewise.
10938         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
10939         changes.
10940         (NamespaceEntry.LookupForUsing): Remove.
10941         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
10942         names.
10943         (NamespaceEntry.Lookup): Remove support for dotted names.
10944
10945 2005-02-01  Raja R Harinath  <rharinath@novell.com>
10946
10947         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
10948         split into two.
10949         (NamespaceEntry.ImplicitParent): Compute on demand.
10950         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
10951         parallels the current.
10952         (NamespaceEntry.LookupForUsing): Use it.
10953         (NamespaceEntry.Lookup): If the current namespace-entry is
10954         implicit, don't search aliases and using tables.
10955
10956 2005-02-01  Raja R Harinath  <rharinath@novell.com>
10957
10958         Fix #31984.
10959         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
10960         BaseCache here.
10961         (TypeContainer.BaseCache): Compute on demand.
10962         (TypeContainer.FindMembers): Define constants and types if they're
10963         not already created.
10964         (FieldMember.Define): Move resetting of ec.InUnsafe before error
10965         check.
10966         * const.cs (Constant.Define): Make idempotent.
10967
10968 2005-01-29  Miguel de Icaza  <miguel@novell.com>
10969
10970         * pending.cs: Produce better code (no nops produced by using Ldarg
10971         + value).
10972         
10973         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
10974         i - 1' it should be arg + 1.
10975
10976         Fixes bug #71819.
10977
10978 2005-01-28  Raja R Harinath  <rharinath@novell.com>
10979
10980         * attribute.cs (Attribute.CheckAttributeType): Make private
10981         non-virtual.
10982         (Attribute.ResolveType): Make virtual.
10983         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
10984         handling of RootContext.Tree.Types.
10985
10986 2005-01-27  Raja R Harinath  <rharinath@novell.com>
10987
10988         Update attribute-handling to use the SimpleName/MemberAccess
10989         mechanisms.
10990         * cs-parser.jay (attribute): Pass in an expression to the
10991         constructors of Attribute and GlobalAttribute.
10992         * attribute.cs (Attribute): Take an expression for the name.
10993         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
10994         passed in attribute name expression.
10995         (Attribute.CheckAttributeType): Use it.
10996         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
10997         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
10998         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
10999         argument to prevent error messages if the lookup fails.
11000
11001 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
11002
11003         * expression.cs (Indirection): Implemented IVariable interface
11004         to support indirection in AddressOf operator.
11005         (PointerArithmetic.Emit): Add optimalization for case where
11006         result can be precomputed.
11007
11008 2005-01-26  Martin Baulig  <martin@ximian.com>
11009
11010         * class.cs (TypeContainer.AttributeTargets): Return the correct
11011         AttributeTargets depending on our `Kind' instead of throwing an
11012         exception; fixes #71632.
11013
11014 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
11015
11016         Fix #71257
11017         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
11018         constant members.
11019
11020 2005-01-25  Raja R Harinath  <rharinath@novell.com>
11021
11022         Fix #71602.
11023         * expression.cs (MemberAccess.DoResolve): Don't complain with
11024         cs0572 when the LHS of a member access has identical name and type
11025         name.
11026
11027 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
11028
11029         Fix #71651, #71675
11030         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
11031         CreatePermission.
11032         Create custom PermissionSet only for PermissionSetAttribute.
11033
11034 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
11035
11036         Fix #71649
11037         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
11038         delegates in static class.
11039
11040 2005-01-24  Martin Baulig  <martin@ximian.com>
11041
11042         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
11043         merging an implicit block, just use its reachability.
11044
11045         * statement.cs (Block.Resolve): Make the unreachable code check
11046         work wrt. implicit blocks; see test-337 from #63842.
11047
11048 2005-01-21  Alp Toker  <alp@atoker.com>
11049  
11050         * cs-parser.jay: destructor_declaration's container is PartialContainer
11051         not Class when partial types are used, so use Kind prop instead of
11052         'is'.
11053         
11054 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
11055
11056         * cs-parser.jay: Improve error reporting when an interface
11057         declares new types.
11058
11059 2005-01-20  Dick Porter  <dick@ximian.com>
11060
11061         * support.cs: SeekableStreamReader fix from Sandor Dobos
11062         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
11063         chars are read.  Fixes bug 70369.
11064
11065 2005-01-20  Raja R Harinath  <rharinath@novell.com>
11066
11067         * cs-parser.jay (catch_clause): Simplify current_block handling
11068         somewhat.
11069
11070 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
11071
11072         * convert.cs (ImplicitStandardConversionExists): Synchronize the
11073         code with ImplicitStandardConversion to handle the implicit
11074         conversion of method groups into valid delegate invocations. 
11075
11076         The problem is that in parameter handling we were using this code
11077         path.  Fixes bug #64698
11078
11079 2005-01-19  Raja R Harinath  <rharinath@novell.com>
11080
11081         * cs-parser.jay: Fix several infelicities.
11082         - Avoid assigning to the parser value stack.  Code like 
11083           '$3 = null' is unclean.  Synthesize a value for the code block
11084           instead. 
11085         - Avoid using oob_stack for storing location information.  Use ...
11086         (_mark_): ... this.  New (empty) rule.  Saves the current location
11087         in $$.
11088         (foreach_statement): Avoid using oob_stack for current_block
11089         handling.  Use technique used in for_statement and
11090         using_statement.  Synthesize a value for the code block to store
11091         additional intermediate information.
11092
11093 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
11094
11095         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
11096         of a different type is only allowed to private fields of a
11097         containing type, not on fields of a base class.
11098
11099         See test-174.cs and error cs0122-9.cs
11100
11101 2005-01-13  Raja R Harinath  <rharinath@novell.com>
11102
11103         Fix test-335.cs (bug #58126).
11104         * cs-parser.jay (argument): Split out non-expression parts of the
11105         rule into 'non_simple_argument'.
11106         (invocation_expression): Support parenthesized invocations with
11107         multiple arguments, and with single non-simple arguments.
11108
11109 2005-01-13  Raja R Harinath  <rharinath@novell.com>
11110
11111         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
11112         places.
11113
11114 2005-01-12  Raja R Harinath  <rharinath@novell.com>
11115
11116         Fix cs0038-1.cs, cs1640-6.cs.
11117         * ecore.cs (Expression.Resolve): Remove special-case for
11118         SimpleName in error-handling.
11119         (Expression.almostMatchedMembers): Relax access permission to
11120         protected.
11121         (Expression.MemberLookupFailed): Handle duplicates in
11122         almostMatchedMembers list.
11123         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
11124         * expression.cs (New.DoResolve): Report CS1540 for more cases.
11125         * typemanager.cs (GetFullNameSignature): Use the MethodBase
11126         overload if the passed in MemberInfo is a MethodBase.
11127
11128 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
11129
11130         Fix #70749
11131         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
11132         for non-CAS & merge permission sets properly.
11133
11134 2005-01-11  Raja R Harinath  <rharinath@novell.com>
11135
11136         Improve standard-compliance of simple name and member access 
11137         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
11138         * ecore.cs (FullNamedExpression): New abstract base class 
11139         for Namespaces and TypeExpressions.
11140         (ResolveFlags.SimpleName): Remove.
11141         (SimpleName): Remove support for dotted names.
11142         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
11143         DeclSpace.FindType and DeclSpace.LookupType.
11144         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
11145         (Expression.ExprClassName): Make member function.
11146         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
11147         a namespace.  Remove creation of dotted "SimpleName"s.
11148         (MemberAccess.DoResolve): Likewise.
11149         * decl.cs (DeclSpace.Cache): Make private.
11150         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
11151         (DeclSpace.FindType): Update.
11152         (DeclSpace.LookupType): Move here from RootContext.  Return a 
11153         FullNamedExpression.
11154         * namespace.cs (Namespace): Derive from FullNamedExpression
11155         so that it can be part of expression resolution.
11156         (Namespace.Lookup): Return an FullNamedExpression.
11157         (NamespaceEntry.LookupAlias): Lookup aliases only in current
11158         namespace.
11159         * rootcontext.cs (NamespaceLookup): Remove.
11160         (LookupType): Move to DeclSpace.
11161         * attribute.cs (CheckAttributeType): Update.
11162         * doc.cs (FindDocumentedType): Remove allowAlias argument.
11163         (FindDocumentedTypeNonArray): Likewise.
11164
11165 2005-01-11  Raja R Harinath  <rharinath@novell.com>
11166
11167         Fix cs0509.cs, cs1632.cs.
11168         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
11169         is the same as IsInterface.
11170         (TypeContainer.GetClassBases): Likewise.
11171         * statement.cs (LabeledStatement.ig): New field.
11172         (LabeledStatement.LabelTarget): Save ILGenerator which created the
11173         label.
11174         (LabeledStatement.DoEmit): Check that the label was created with
11175         the same ILGenerator.
11176
11177 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
11178
11179         Fix #71058
11180         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
11181         accessors to its properties.
11182
11183         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
11184         from accessors to property.
11185         
11186 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
11187
11188         Fix #70722
11189         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
11190         only for overrides.
11191         
11192 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
11193
11194         * attribute.cs: Check for null and empty strings.  
11195
11196         I have lost another battle to Paolo.
11197
11198 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
11199
11200         Fix #70942
11201         * class.cs (PropertyMethod): Set Parent field in ctors.
11202         (SetMethod.InternalParameters): Add unsafe switch hack.
11203         Override MarkForDuplicationCheck where it is appropriate.
11204
11205         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
11206         It says whether container allows members with the same name.
11207         Base default is no.
11208         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
11209         Removed is_method parameter.
11210
11211 2005-01-06  Duncan Mak  <duncan@ximian.com>
11212
11213         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
11214         because the previous change led to incorrect reporting of CS1032
11215         ("Cannot define/undefine preprocessor symbols after first token in
11216         file"). Instead of using `tokens_seen' as the only flag that
11217         triggers CS1040, introduce `comments_seen'. This new flag is used
11218         to signify having seen comments on the current line, so it is
11219         unset after a newline.
11220
11221 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
11222
11223         * doc.cs : When searching for a type, find nested type too.
11224           This fixes bug #71040.
11225
11226 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
11227
11228         * doc.cs :
11229           - Warn missing member comment on those classes which also does not
11230             have doc comments. Fixed bug #71041.
11231           - Don't warn missing doc comment on default constructor.
11232             Fixed bug #71042.
11233
11234 2005-01-06  Duncan Mak  <duncan@ximian.com>
11235
11236         * cs-tokenizer.cs (xtoken): After handling traditional C-style
11237         comments, set `tokens_seen' to true. This allows us to detect
11238         misplaced preprocessor directives (i.e. not at the beginning of
11239         the a line, nor after whitespaces). In that case, report error
11240         CS1040. This fixes bug #56460.
11241
11242         * cs-parser.jay (interface_member_declaration): Add checks for
11243         IsExplicitImpl, and report CS0541 error if an interface member is
11244         defined as an explicit interface declaration.
11245
11246 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
11247
11248         Fix #70817
11249         * class.cs (PropertyMethod): Set Parent field in ctors.
11250         (SetMethod.InternalParameters): Add unsafe switch hack.
11251         
11252         * decl.cs (MemberCore.Parent): Cannot be readonly.
11253
11254 2005-01-06  Raja R Harinath  <rharinath@novell.com>
11255
11256         * decl.cs (DeclSpace.ResolveType): Remove.
11257         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
11258         Merge in code from ...
11259         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
11260         * class.cs, enum.cs: Update to changes.
11261
11262 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
11263
11264         * anonymous.cs: Ensure that we init the scope of our parent if it
11265         has not been initialized yet.
11266
11267 2004-12-30  Duncan Mak  <duncan@ximian.com>
11268
11269         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
11270         if field.FieldBuilder is null. Fixes #70758.
11271
11272         * convert.cs: Fixed some typos and updated some of the comments.
11273         (ImplicitStandardConversionExists):
11274         (TryImplicitIntConversion): If `target_type' is an interface and
11275         the type of `ic' implements this interface, return true or a new
11276         BoxedCast instead of null. This fixes #70468.
11277
11278 2004-12-29  Duncan Mak  <duncan@ximian.com>
11279
11280         * expression.cs (Argument.Emit): Check that Expr is
11281         IMemoryLocation before casting to it, and report CS1510 otherwise.
11282
11283         This fixes #70402.
11284
11285 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
11286
11287         * statement.cs (Block.ThisVariable): remove the recursion here, to
11288         make the --profile more sane.
11289
11290 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
11291
11292         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
11293         assembly, by JB Evain.
11294
11295 2004-12-17  Raja R Harinath  <rharinath@novell.com>
11296
11297         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
11298           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
11299         "parent" refers to enclosing type/class.  "base" refers to superclass.
11300
11301 2004-12-17  Raja R Harinath  <rharinath@novell.com>
11302
11303         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
11304         Ensure that we only have GlobalAttributes.
11305         * attribute.cs (Attribute.Emit): Make non-virtual.
11306         (GlobalAttribute.Emit): Remove.
11307         (Attribute.Resolve): Make virtual.
11308         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
11309         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
11310         the argument. Don't create one.
11311         (Attribute.GetObsoleteAttribute): Likewise.
11312         (Attribute.GetClsCompliantAttributeValue): Likewise.
11313         * class.cs, decl.cs: Update to changes.
11314
11315 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
11316
11317         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
11318         
11319         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
11320         
11321         * statement.cs (Foreach.Resolve): Add error 186 report.
11322
11323 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
11324
11325         * expression.cs (Conditional.DoResolve): Add warning 429.
11326         
11327         * statement.cs (If.Resolve): Add warning 665.
11328
11329 2004-12-16  Raja R Harinath  <rharinath@novell.com>
11330
11331         New invariant: RootContext.Tree.Types.NamespaceEntry == null
11332         except when in the parser, and in GlobalAttribute.
11333         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
11334         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
11335         RootContext.Tree.Types.NamespaceEntry once work is done.
11336         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
11337         and resets RootContext.Tree.Types.NamespaceEntry.
11338
11339 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
11340
11341         * cs-parser.jay: Don't create a block for every variable.
11342
11343 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
11344
11345         * location.cs: Provide extra information.
11346
11347         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
11348         variables from the captured environment, it is the ldarg_0.
11349
11350 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
11351
11352         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
11353         find a conclusion.
11354         
11355         * class.cs: Changed warning level for 169 to avoid developer
11356         displeasure from warning flooding. It will be changed back when they
11357         fix most of current BCL warnings.
11358         
11359         * RootContext.cs: Pushed default WarningLevel to 3.
11360         
11361         * statement.cs: Removed unused variable.
11362
11363 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
11364
11365         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
11366         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
11367         Add error 502 report.
11368         (StaticClass.DefineType): Add error 441 report.
11369         (Class.AllowedModifiersProp): New virtual property as temporary
11370         extension to AllowedModifiers.
11371         (Class.DefineType): Add error 418 report. Moved ModFlags check here
11372         to share implementation with StaticClass and don't call virtual
11373         methods from ctor.
11374         
11375         * driver.cs (MainDriver): Add error 1558 test.
11376
11377         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
11378         report. Moved error 36 test here.
11379
11380         * statement.cs (Throw.Resolve): Add error 724 report.
11381
11382         * typemanager.cs: Add out_attribute_type core type.
11383         
11384 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
11385
11386         * class.cs (TypeContainer.VerifyClsCompliance): Add error
11387         3018 report.
11388         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
11389
11390         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
11391         3017 report.
11392         
11393         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
11394
11395         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
11396         Add error 3023 report.
11397         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
11398
11399         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
11400         implementation.
11401
11402 2004-12-12  John Luke  <john.luke@gmail.com>
11403
11404         * driver.cs (AddArgs): take -- into account when
11405         adding arguments, fixes bug 65710 
11406
11407 2004-12-12  Martin Baulig  <martin@ximian.com>
11408
11409         * expression.cs (Unary.TryReduceNegative): Added support for
11410         SByteConstant and ByteConstant.
11411         (Unary.Reduce): Check error values from TryReduceNegative().
11412
11413 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
11414
11415         * attributes.cs (Attribute.Resolve): Avoid multiple error report
11416         and report exception as error 182.
11417
11418 2004-12-10  Raja R Harinath  <rharinath@novell.com>
11419
11420         * driver.cs (Main): Fix message when there are warnings.
11421
11422 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
11423
11424         * delegate.cs: Fixed my fix from yesterday, sorry about that.
11425
11426 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
11427
11428         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
11429         Reduced number of warnings.
11430         
11431         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
11432
11433 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
11434
11435         * driver.cs: Removed message.
11436
11437         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
11438
11439 2004-12-08    <vargaz@freemail.hu>
11440
11441         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
11442
11443 2004-12-08  Martin Baulig  <martin@ximian.com>
11444
11445         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
11446         instead of a CS3002 for properties and indexer.
11447
11448 2004-12-08  Martin Baulig  <martin@ximian.com>
11449
11450         * decl.cs (MemberName.ToString): Make this work again.
11451
11452 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
11453
11454         * attribute.cs (Resolve): Add error 591 detection.
11455
11456         * class.cs (FieldMember.Define): Add error 1547 detection.
11457         (Indexer.Define): Add error 620 detection.
11458         (Operator.Define): Add error 590 detection.
11459
11460         * ecore.cs: Missing argument for error 79.
11461
11462         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
11463         detection.
11464
11465 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
11466
11467         Fix #70106
11468         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
11469         only.
11470
11471 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
11472
11473         * cs-parser.jay : handle doc comments on implicit/explicit operators.
11474           Some operator comments were suppressed.
11475         * doc.cs : Implicit/explicit operator name in doc comments are like
11476           "op_Explicit(type)~returnType", so added suffix handling.
11477
11478 2004-12-07  Martin Baulig  <martin@ximian.com>
11479
11480         * decl.cs
11481         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
11482         (MemberCore.GetClsCompliantAttributeValue): Likewise.
11483         (DeclSpace.ec): New protected field; store the EmitContext here.
11484         (DeclSpace.EmitContext): New public property; moved here from
11485         `TypeContainer'.
11486         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
11487         EmitContext.
11488
11489         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
11490         (Enum.Emit): Don't create a new EmitContext.
11491
11492         * delegate.cs (Delegate.DefineType): Always create the
11493         EmitContext.
11494
11495         * iterators.cs (Iterators.DefineIterator): Create a new
11496         EmitContext and store it in `ec'.
11497
11498 2004-08-24  Martin Baulig  <martin@ximian.com>
11499
11500         * typemanager.cs
11501         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
11502         this for accessibility checks.
11503         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
11504         IsNestedFamilyAccessible.
11505         (TypeManager.IsSubclassOf): New method, do what the name actually
11506         says.   
11507
11508 2004-12-06  Raja R Harinath  <rharinath@novell.com>
11509
11510         Fix crash on cs0657-17.cs.
11511         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
11512         Use RootContext.Tree.Types, not 'new RootTypes ()'.
11513         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
11514         the case where the NamespaceEntry gets overwritten.
11515
11516 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
11517
11518         Fixed #69195, #56821
11519         * ecore.cs (ResolveBoolean): Tiny refactoring.
11520
11521         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
11522         of right expression resolving when left is false constant and
11523         operator is LogicalAnd OR true constant and operator is LogicalOr.
11524
11525         * statement.cs (ResolveUnreachable): Always reports warning.
11526
11527 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
11528
11529         * class.cs: Distinguish between 1721 and 1722 (just a little help
11530         for the programmer).
11531
11532 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
11533
11534         * delegate.cs: Only allow this on new versions of the language. 
11535
11536 2004-12-02  Duncan Mak  <duncan@ximian.com>
11537
11538         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
11539         Expression class.
11540         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
11541         here as a static method. Take an additional bool out parameter
11542         `must_do_cs1540_check' for signaling to InstanceResolve.
11543         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
11544         member field from PropertyExpr class and made it an argument of
11545         the method instead.
11546         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
11547         check for MarshalByRefObject, and report CS0122 instead of CS1540.
11548         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
11549         and `remove_accessor' as well as InstanceResolve: report CS0122
11550         where applicable.
11551
11552         Fixes #70129.
11553
11554 2004-12-03  Raja R Harinath  <rharinath@novell.com>
11555
11556         Fix test-327.cs, test-328.cs, and put in early infrastructure
11557         for eventually fixing #52697.
11558         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
11559         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
11560         from other methods.
11561         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
11562         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
11563         (VerifyUsing, error246): Update.
11564         * rootcontext.cs (RootContext.NamespaceLookup): Just use
11565         'NamespaceEntry.LookupNamespaceOrType'.
11566
11567 2004-12-03  Martin Baulig  <martin@ximian.com>
11568
11569         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
11570         method as our child, call AnonymousMethod.Compatible() on it.
11571
11572 2004-12-03  Raja R Harinath  <rharinath@novell.com>
11573
11574         Disable XML documentation support in 'basic' profile.
11575         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
11576         Redirect XmlElement to System.Object.
11577         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
11578         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
11579         * mcs.exe.sources: Add doc-bootstrap.cs.
11580         * doc-bootstrap.cs: New file.  Contains empty stub implementation
11581         of doc.cs.
11582
11583 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
11584
11585         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
11586           comments are allowed.
11587
11588 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
11589
11590         * delegate.cs: Add checks for subtypes in paramaters and return values
11591         in VerifyMethod () to add support for Covariance/Contravariance
11592         in delegates.
11593         
11594 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
11595
11596         * report.cs: Remove extra closing parenthesis.
11597
11598         * convert.cs (Error_CannotImplicitConversion): If the name of the
11599         types are the same, provide some extra information.
11600
11601         * class.cs (FieldBase): Use an unused bit field from the field to
11602         encode the `has_offset' property from the FieldMember.  This saves
11603         a couple of Ks on bootstrap compilation.
11604
11605         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
11606         method as our child, return the AnonymousMethod resolved
11607         expression.
11608
11609         * expression.cs (New.DoResolve): Allow return values from
11610         NewDelegate to also include AnonymousMethods.
11611
11612         Fixes #70150.
11613
11614 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
11615
11616         Fix bug #70102
11617         * attribute.cs (Resolve): Improved implementation of params
11618         attribute arguments.
11619
11620         * support.cs (ParameterData): Add HasParams to be faster.
11621
11622 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
11623
11624         all things are for /doc support:
11625
11626         * doc.cs: new file that supports XML documentation generation.
11627         * mcs.exe.sources: added doc.cs.
11628         * driver.cs:
11629           Handle /doc command line option.
11630           Report error 2006 instead of 5 for missing file name for /doc.
11631           Generate XML documentation when required, after type resolution.
11632         * cs-tokenizer.cs:
11633           Added support for picking up documentation (/// and /** ... */),
11634           including a new XmlCommentState enumeration.
11635         * cs-parser.jay:
11636           Added lines to fill Documentation element for field, constant,
11637           property, indexer, method, constructor, destructor, operator, event
11638           and class, struct, interface, delegate, enum.
11639           Added lines to warn incorrect comment.
11640         * rootcontext.cs :
11641           Added Documentation field (passed only when /doc was specified).
11642         * decl.cs:
11643           Added DocComment, DocCommentHeader, GenerateDocComment() and
11644           OnGenerateDocComment() and some supporting private members for
11645           /doc feature to MemberCore.
11646         * class.cs:
11647           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
11648         * delegate.cs:
11649           Added overriden DocCommentHeader.
11650         * enum.cs:
11651           Added overriden DocCommentHeader and GenerateDocComment().
11652
11653 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
11654
11655         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
11656         unwrapping the enumeration values, chain to
11657         DoConstantNumericPromotions again, so we can promote things to the
11658         fundamental types (takes care of enums that are bytes, sbytes).
11659
11660         Fixes bug #62054.
11661
11662 2004-12-01  Raja R Harinath  <rharinath@novell.com>
11663
11664         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
11665         Fix long-standing bug in type-lookup.  Use FindType instead of
11666         LookupType when ec.ResolvingTypeTree.
11667         (Attribute.ResolveType, Attribute.Resolve)
11668         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
11669         Update to changes.
11670         (Attributes.Search): Remove internal version.  Update.
11671         (Attributes.SearchMulti): Update.
11672         (Attributes.GetClsCompliantAttribute): Remove.
11673         (Attributes.GetIndexerNameAttribute): Remove.
11674         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
11675         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
11676         * class.cs (Indexer.Define): Likewise.
11677
11678 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
11679
11680         Fix bug #68790
11681         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
11682         MarshallByReference members access.
11683
11684         * expression.cs: Use CheckMarshallByRefAccess;
11685         Better error CS0197 message.
11686
11687         * report.cs: Print whole related error message.
11688
11689 2004-11-30  Raja R Harinath  <rharinath@novell.com>
11690
11691         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
11692         the current directory to help debugging.
11693
11694 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
11695
11696         * class (GetClassBases): Better error 60 report.
11697         (EventProperty): Disabled warning 67 detection.
11698
11699 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
11700
11701         Fix bug #60324
11702         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
11703
11704         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
11705         precise values.
11706
11707 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
11708
11709         Fix bug #49488
11710         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
11711
11712         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
11713
11714 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
11715
11716         * attribute.cs (Attribute.Resolve): Refine error reporting and
11717         report a cs0117 if the identifier does not exist, to distinguish
11718         from 0617 which is a miss-use of the actual identifier.
11719
11720         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
11721         between cs0070 and cs0079.
11722
11723         * class.cs (MemberBase.DoDefine): When reporting a wrong
11724         accessibility level, we use MethodCore to compare instead of
11725         Method (this was a regression in some refactoring effort).
11726
11727         So now we correctly report cs0056 again.
11728
11729         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
11730         testing the target_type (which was known to be object_type) and
11731         not the source type (which is anonymous_method).
11732
11733         Fixed reporting of error cs1660.
11734
11735         * expression.cs (UserCast.Source): Expose the underlying cast.
11736
11737         * statement.cs (Switch.SwitchGoverningType): Sort the list of
11738         allowed types to find a match to int32 first (most common).
11739
11740         In addition, it ignores any ImplicitUserConversions that did an
11741         internal implicit conversion (as the switch statement allows only
11742         one integral conversion to exist).
11743
11744         * class.cs (PartialContainer.Create): rename `name' to
11745         `member_name' for clarity.  Then replace the string calls with a
11746         call to MemberName.GetPartialName, as now using
11747         MemberName.ToString is an error (this is due to the side effects
11748         it had, that were fixed in the past).
11749
11750         This will restore the error reporting on a number of partial class
11751         errors that were missusing this (and getting an exception as a
11752         results, which is now just a plain textual warning, because
11753         yyparse debug output would crash otherwise).
11754
11755 2004-11-26  Raja R Harinath  <rharinath@novell.com>
11756
11757         * Makefile (PROGRAM_INSTALL_DIR): Remove.
11758
11759 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
11760
11761         * rootcontext.cs (LookupType): Make sure to cache lookups that
11762         don't give us a negative result. This saves about 5% of corlib
11763         compilation time.
11764
11765 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
11766
11767         * report.cs (AbstractMessage.Print): messages are sent to stderr
11768
11769         * class.cs (TypeContainer.GetClassBases): It is an error to have a
11770         non-interface in the list of interfaces (at this point, either
11771         parent was properly set, or a base class is being listed in the
11772         interfaces section).
11773
11774         This flags error 1722, and resolves the crash from bug 69259.
11775
11776 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
11777
11778         * statement.cs (Using.EmitExpressionFinally): make this work right
11779         for valuetypes. Fixes 69926.
11780
11781 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
11782
11783         * const.cs (Const.ChangeType): Cope with the "0 literal can be
11784         converted to an enum" here, before we try to change the underlying
11785         type.  This code exists, but it is a different code path than the
11786         one used while encoding constants.
11787
11788         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
11789         old bug: when converting from the null literal to a pointer,
11790         return an EmptyCast, not the NullLiteral.
11791
11792         This fixes #69921, the recent null_type changes probably made this
11793         bug more prominent.
11794
11795         (ImplicitReferenceConversionExists): In addition, resynchronized
11796         the code here, so it matches the same code in
11797         ImplicitReferenceConversionExists for the `from any class-type S
11798         to any interface-type T'.
11799         
11800
11801 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
11802
11803         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
11804
11805 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
11806
11807         * cs-parser.jay: Use verbosity accordingly. 
11808
11809 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
11810
11811         * expression.cs (Unary.ResolveOperator): Do not report warning;
11812         AddressOf reads from variable.
11813         
11814         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
11815
11816 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
11817
11818         Fix bug #69462
11819
11820         * attribute.cs (Attributable): Removed CheckTargets.
11821         (Attributes.Emit): Explicit attribute targets are tested here.
11822
11823         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
11824         not enabled for interfaces.
11825
11826         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
11827         (GetAssemblyName): Ouch next bug there.
11828
11829 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
11830
11831         * expression.cs: Error 275 added.
11832         
11833 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
11834
11835         Fix bug #69177 (Implemented decimal constant support)
11836
11837         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
11838         (BinaryFold): Add DecimalConstant.
11839
11840         * const.cs (Define): Decimal constant 
11841         (is not constant.
11842         (ChangeType): Add decimal type handling.
11843         (LookupConstantValue): Don't set value for decimal type but
11844         emit DecimalConstantAttribute. Needed for constant optimization.
11845
11846         * constant.cs (ToDecimal): New method.
11847         (ConvertToDecimal): New method.
11848         (IntConstant): Implemented ConvertToDecimal.
11849         (DecimalConstant.Emit): Emit optimized version for decimals in
11850         int range.
11851
11852         * expression.cs (ResolveOperator): Changed order of constant
11853         reduction to work correctly with native types which have
11854         overloaded operators.
11855         (ResolveMemberAccess): Extract constant value from attribute
11856         for decimal type.
11857
11858         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
11859
11860         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
11861         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
11862         (ChangeType): Decimal is special.
11863         (TypeToCoreType): Add decimal type.
11864
11865 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
11866
11867         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
11868         decimal types.
11869
11870 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
11871
11872         * class.cs (EventField.ApplyAttributeBuilder): Fix error
11873         test cs1667-5.cs.
11874
11875 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
11876
11877         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
11878
11879         * pending.cs (PendingImplementation): Grab only interfaces.
11880
11881 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
11882
11883         * statement.cs (ForeachHelperMethods): Add location member and
11884         error 202 detection.
11885
11886 2004-11-19  Raja R Harinath  <rharinath@novell.com>
11887
11888         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
11889         automatically handled by executable.make.
11890         (PROGRAM): Make profile-specific.
11891
11892 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
11893
11894         * expression.cs (DoResolveBase): Fixed wrong warning for out
11895         variables.
11896
11897 2004-11-18  Martin Baulig  <martin@ximian.com>
11898
11899         Merged latest changes into gmcs.  Please keep this comment in
11900         here, it makes it easier for me to see what changed in MCS since
11901         the last time I merged.
11902
11903 2004-11-17  Raja R Harinath  <rharinath@novell.com>
11904
11905         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
11906         (TypeHandle.GetMemberCache): New.
11907         (TypeHandle.TypeHandle): Update.
11908         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
11909         (TypeManager.LookupParentInterfacesCache):
11910         Rename from LookupInterfaceCache.  Optimize slightly.
11911         (TypeManager.MemberLookup_FindMembers): Update.
11912         * decl.cs (MemberCache.MemberCache): Set Container to null in the
11913         multi-type variant.
11914         (AddCacheContents): Rename from AddHashtable.
11915         * class.cs (TypeContainer.parent_container): Remove.
11916         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
11917         (TypeContainer.DoDefineMembers): Don't initialize it.
11918         Update to name changes.
11919         
11920 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
11921
11922         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
11923         that factors the code to check access modifiers on override.  
11924
11925         (PropertyBase): Use the code here.
11926
11927         Patch from Lluis S'anchez, fixes bug #69361.
11928
11929 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
11930
11931         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
11932         routine that is used to report the use of a captured variable
11933         whose address has been taken.
11934
11935         There are two checks: one when variables are being captured and
11936         the other check is when the address of a variable is taken. 
11937         
11938         (because an anonymous methods might be resolved before *or* after
11939         the address has been taken) and 
11940
11941         * expression.cs (Conditional.DoResolve): Remove the special
11942         casing that Martin added to trueExpr and falseExpr being both
11943         NullLiteral.  We get the right behavior now just by introducing
11944         the null_type into the compiler. 
11945
11946         * convert.cs (ExplicitConversion): Change the code to use
11947         null_type instead of testing `expr is NullLiteral'.
11948         (ImplicitConversionStandard): use null_type too.
11949         (ImplicitReferenceConversionExists): use null_type too.
11950         (ImplicitReferenceConversion): use null_type too.
11951
11952         * literal.cs: The type of `NullLiteral' is now null_type instead
11953         of object_type. 
11954         (Resolve): Set the type here.
11955
11956         * typemanager.cs: Introduce null_type.
11957
11958 2004-11-17  Martin Baulig  <martin@ximian.com>
11959
11960         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
11961         direction, like FindMembers() does.  Fixes #69546, testcase is in
11962         test-315.cs.    
11963
11964 2004-11-16  Martin Baulig  <martin@ximian.com>
11965
11966         This is based on a patch from Marek Safar, see bug #69082.
11967         Fixes bugs #63705 and #67130.
11968
11969         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
11970         method; create a MemberCache for an interface type and cache the
11971         result.
11972
11973         * decl.cs (IMemberContainer.ParentContainer): Removed.
11974         (IMemberContainer.ParentCache): New property.
11975         (MemberCache.SetupCacheForInterface): Removed.
11976         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
11977         to create a cache for an interface's "parent".
11978
11979         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
11980         interfaces too.
11981
11982 2004-11-16  Martin Baulig  <martin@ximian.com>
11983
11984         Merged back from gmcs; these changes already went into gmcs a
11985         couple of weeks ago.
11986
11987         * typemanager.cs
11988         (TypeManager.AddUserType): Removed the `ifaces' argument.
11989         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
11990         `TypeExpr []'.
11991         (TypeManager.AddUserInterface): Removed.
11992         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
11993         `TypeExpr []'.
11994         (TypeManager.GetInterfaces): Likewise.
11995         (TypeManager.GetExplicitInterfaces): Likewise.
11996
11997         * ecore.cs (TypeExpr.GetInterfaces): Removed.
11998
11999         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
12000         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
12001
12002 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
12003
12004         * statement.cs: Avoid adding bools to a hashtable.
12005
12006 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
12007
12008         * expression.cs (Invocation.OverloadResolve): Flag error if we are
12009         calling an unsafe method from a safe location.
12010
12011 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
12012
12013         Fix #69167
12014         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
12015
12016 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
12017
12018         * namespace.cs (VerifyUsing): use GetPartialName instead of
12019         ToString. 
12020
12021 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
12022
12023         * statement.cs (Return.Resolve): Fix regression in typo: if
12024         `in_exc', we have to request a NeedReturnLabel, this was a typo
12025         introduced in the anonymous method check-in.  Fixes #69131.
12026
12027         * Indexers were using the ShortName when defining themselves,
12028         causing a regression in the compiler bootstrap when applying the
12029         patch from 2004-11-02 (first part), now they use their full name
12030         and the bug is gone.
12031
12032 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
12033
12034         * driver.cs: Strip the path from the names of embedded resources. Fixes
12035         #68519.
12036
12037 2004-11-04  Raja R Harinath  <rharinath@novell.com>
12038
12039         Fix error message regression: cs0104-2.cs.
12040         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
12041         (AliasEntry.Resolve): Update.
12042         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
12043         'silent' flag.
12044         (RootContext.LookupType): Update.
12045
12046 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
12047
12048         * cs-parser.jay: Add support for handling accessor modifiers
12049         * class: Add support port accessor modifiers and error checking,
12050         define PropertyMethod.Define as virtual (not abstract anymore)
12051         * ecore.cs: Add checking for proeprties access with access modifiers
12052         * iterators.cs: Modify Accessor constructor call based in the modified
12053         constructor
12054 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
12055
12056         * expression.cs (StringConcat): Handle being called twice,
12057         as when we have a concat in a field init with more than two
12058         ctors in the class
12059
12060 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
12061
12062         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
12063         special case explicit implementations, we should always produce
12064         the .property or .event declaration.
12065         
12066         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
12067         since it will not return correct data if people use this
12068         unresolved in the presence of using statements (see test-313).
12069
12070         * class.cs (MethodData.Define): If we are an explicit interface
12071         implementation, set the method name to the full name of the
12072         interface plus the name of the method.  
12073
12074         Notice that using the method.MethodName.GetFullName() does not
12075         work, as it will only contain the name as declared on the source
12076         file (it can be a shorthand in the presence of using statements)
12077         and not the fully qualifed type name, for example:
12078
12079         using System;
12080
12081         class D : ICloneable {
12082                 object ICloneable.Clone ()  {
12083                 }
12084         }
12085
12086         Would produce a method called `ICloneable.Clone' instead of
12087         `System.ICloneable.Clone'.
12088
12089         * namespace.cs (Alias.Resolve): Use GetPartialName.
12090         
12091 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
12092
12093         * cs-parser.jay: Add error 1055 report.
12094
12095 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
12096
12097         * assign.cs (Assign.DoResolve): Only do the transform of
12098         assignment into a New if the types are compatible, if not, fall
12099         through and let the implicit code deal with the errors and with
12100         the necessary conversions. 
12101
12102 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
12103
12104         * cs-parser.jay: Add error 1031 report.
12105
12106         * cs-tokenizer.cs: Add location for error 1038.
12107
12108 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
12109
12110         * cs-parser.jay: Add error 1016 report.
12111
12112 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
12113
12114         * cs-parser.jay: Add errors 1575,1611 report.
12115
12116 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
12117
12118         * cs-parser.jay: Add error 1001 report.
12119
12120 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
12121
12122         Fix #68850
12123         * attribute.cs (GetMarshal): Add method argument for
12124         caller identification.
12125
12126         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
12127         agument for GetMarshal and RuntimeMissingSupport.
12128
12129 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
12130
12131         * attribute.cs (ExtractSecurityPermissionSet): Removed
12132         TypeManager.code_access_permission_type.
12133
12134         * typemanager.cs: Removed TypeManager.code_access_permission_type.
12135
12136 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
12137
12138         * expression.cs (LocalVariableReference.DoResolveLValue): Check
12139         for obsolete use of a variable here.   Fixes regression on errors
12140         cs0619-25 and cs0619-26.
12141
12142 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
12143
12144         Fix #62358, implemented security attribute encoding.
12145
12146         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
12147         Tests permitted SecurityAction for assembly or other types.
12148         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
12149         data from SecurityPermissionAttribute to PermisionSet class.
12150
12151         * class.cs (ApplyAttributeBuilder): Added special handling
12152         for System.Security.Permissions.SecurityAttribute based types.
12153
12154         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
12155         special handling for System.Security.Permissions.SecurityAttribute
12156         based types.
12157
12158         * enum.cs (ApplyAttributeBuilder): Added special handling
12159         for System.Security.Permissions.SecurityAttribute based types.
12160
12161         * parameter.cs (ApplyAttributeBuilder): Added special handling
12162         for System.Security.Permissions.SecurityAttribute based types.
12163
12164         * rootcontext.cs: Next 2 core types.
12165
12166         * typemanager.cs (TypeManager.security_permission_attr_type):
12167         Built in type for the SecurityPermission Attribute.
12168         (code_access_permission_type): Build in type.
12169
12170 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
12171
12172         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
12173         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
12174         all of this information into
12175         EmitContext.EmitCapturedVariableInstance.
12176         
12177         * codegen.cs (EmitCapturedVariableInstance): move here the
12178         funcionality of emitting an ldarg.0 in the presence of a
12179         remapping.   This centralizes the instance emit code.
12180
12181         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
12182         then emit a load of this: it means that we have reached the
12183         topmost ScopeInfo: the one that contains the pointer to the
12184         instance of the class hosting the anonymous method.
12185
12186         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
12187         captures to the topmost CaptureContext.
12188
12189 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
12190
12191         * expression.cs (LocalVariableReference): Move the knowledge about
12192         the iterators into codegen's EmitCapturedVariableInstance.
12193
12194 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
12195
12196         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
12197         all code paths return a value from an anonymous method (it is the
12198         same as the 161 error, but for anonymous methods).
12199
12200 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
12201
12202         The introduction of anonymous methods in the compiler changed
12203         various ways of doing things in the compiler.  The most
12204         significant one is the hard split between the resolution phase
12205         and the emission phases of the compiler.
12206
12207         For instance, routines that referenced local variables no
12208         longer can safely create temporary variables during the
12209         resolution phase: they must do so from the emission phase,
12210         since the variable might have been "captured", hence access to
12211         it can not be done with the local-variable operations from the runtime.
12212         
12213         * statement.cs 
12214
12215         (Block.Flags): New flag `IsTopLevel' to indicate that this block
12216         is a toplevel block.
12217
12218         (ToplevelBlock): A new kind of Block, these are the blocks that
12219         are created by the parser for all toplevel method bodies.  These
12220         include methods, accessors and anonymous methods.
12221
12222         These contain some extra information not found in regular blocks:
12223         A pointer to an optional CaptureContext (for tracking captured
12224         local variables and parameters).  A pointer to the parent
12225         ToplevelBlock.
12226         
12227         (Return.Resolve): Catch missmatches when returning a value from an
12228         anonymous method (error 1662).
12229         Invoke NeedReturnLabel from the Resolve phase instead of the emit
12230         phase.
12231
12232         (Break.Resolve): ditto.
12233
12234         (SwitchLabel): instead of defining the labels during the
12235         resolution phase, we now turned the public ILLabel and ILLabelCode
12236         labels into methods called GetILLabelCode() and GetILLabel() that
12237         only define the label during the Emit phase.
12238
12239         (GotoCase): Track the SwitchLabel instead of the computed label
12240         (its contained therein).  Emit the code by using
12241         SwitchLabel.GetILLabelCode ().
12242
12243         (LocalInfo.Flags.Captured): A new flag has been introduce to track
12244         whether the Local has been captured or not.
12245
12246         (LocalInfo.IsCaptured): New property, used to tell whether the
12247         local has been captured.
12248         
12249         * anonymous.cs: Vastly updated to contain the anonymous method
12250         support.
12251
12252         The main classes here are: CaptureContext which tracks any
12253         captured information for a toplevel block and ScopeInfo used to
12254         track the activation frames for various local variables.   
12255
12256         Each toplevel block has an optional capture context associated
12257         with it.  When a method contains an anonymous method both the
12258         toplevel method and the anonymous method will create a capture
12259         context.   When variables or parameters are captured, they are
12260         recorded on the CaptureContext that owns them, for example:
12261
12262         void Demo () {
12263              int a;
12264              MyDelegate d = delegate {
12265                  a = 1;
12266              }
12267         }
12268
12269         Here `a' will be recorded as captured on the toplevel
12270         CapturedContext, the inner captured context will not have anything
12271         (it will only have data if local variables or parameters from it
12272         are captured in a nested anonymous method.
12273
12274         The ScopeInfo is used to track the activation frames for local
12275         variables, for example:
12276
12277         for (int i = 0; i < 10; i++)
12278                 for (int j = 0; j < 10; j++){
12279                    MyDelegate d = delegate {
12280                         call (i, j);
12281                    }
12282                 }
12283
12284         At runtime this captures a single captured variable `i', but it
12285         captures 10 different versions of the variable `j'.  The variable
12286         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
12287         recorded on a child.  
12288
12289         The toplevel ScopeInfo will also track information like the `this'
12290         pointer if instance variables were referenced (this is necessary
12291         as the anonymous method lives inside a nested class in the host
12292         type of the method). 
12293
12294         (AnonymousMethod): Expanded to track the Toplevel, implement
12295         `AnonymousMethod.Compatible' to tell whether an anonymous method
12296         can be converted to a target delegate type. 
12297
12298         The routine now also produces the anonymous method content
12299
12300         (AnonymousDelegate): A helper class that derives from
12301         DelegateCreation, this is used to generate the code necessary to
12302         produce the delegate for the anonymous method that was created. 
12303
12304         * assign.cs: API adjustments for new changes in
12305         Convert.ImplicitStandardConversionExists.
12306
12307         * class.cs: Adjustments to cope with the fact that now toplevel
12308         blocks are of type `ToplevelBlock'. 
12309
12310         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
12311         insteda of standard blocks.
12312
12313         Flag errors if params arguments are passed to anonymous methods.
12314
12315         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
12316         `CurrentAnonymousMethod' which points to the current Anonymous
12317         Method.  The variable points to the AnonymousMethod class that
12318         holds the code being compiled.  It is set in the new EmitContext
12319         created for the anonymous method.
12320
12321         (EmitContext.Phase): Introduce a variable and an enumeration to
12322         assist in enforcing some rules about when and where we are allowed
12323         to invoke certain methods (EmitContext.NeedsReturnLabel is the
12324         only one that enfonces this right now).
12325
12326         (EmitContext.HaveCaptureInfo): new helper method that returns
12327         whether we have a CapturedContext initialized.
12328
12329         (EmitContext.CaptureVariable): New method used to register that a
12330         LocalInfo must be flagged for capturing. 
12331
12332         (EmitContext.CapturedParameter): New method used to register that a
12333         parameters must be flagged for capturing. 
12334         
12335         (EmitContext.CapturedField): New method used to register that a
12336         field must be flagged for capturing. 
12337
12338         (EmitContext.HaveCapturedVariables,
12339         EmitContext.HaveCapturedFields): Return whether there are captured
12340         variables or fields. 
12341
12342         (EmitContext.EmitMethodHostInstance): This is used to emit the
12343         instance for the anonymous method.  The instance might be null
12344         (static methods), this (for anonymous methods that capture nothing
12345         and happen to live side-by-side with the current method body) or a
12346         more complicated expression if the method has a CaptureContext.
12347
12348         (EmitContext.EmitTopBlock): Routine that drives the emission of
12349         code: it will first resolve the top block, then emit any metadata
12350         and then emit the code.  The split is done so that we can extract
12351         any anonymous methods and flag any captured variables/parameters.
12352         
12353         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
12354         during this phase, the ILGenerator should not be used as labels
12355         and local variables declared here might not be accessible to any
12356         code that is part of an anonymous method.  
12357
12358         Exceptions to this include the temporary variables that are
12359         created by some statements internally for holding temporary
12360         variables. 
12361         
12362         (EmitContext.EmitMeta): New routine, in charge of emitting all the
12363         metadata for a cb
12364
12365         (EmitContext.TemporaryReturn): This method is typically called
12366         from the Emit phase, and its the only place where we allow the
12367         ReturnLabel to be defined other than the EmitMeta.  The reason is
12368         that otherwise we would have to duplicate a lot of logic in the
12369         Resolve phases of various methods that today is on the Emit
12370         phase. 
12371
12372         (EmitContext.NeedReturnLabel): This no longer creates the label,
12373         as the ILGenerator is not valid during the resolve phase.
12374
12375         (EmitContext.EmitThis): Extended the knowledge in this class to
12376         work in anonymous methods in addition to iterators. 
12377
12378         (EmitContext.EmitCapturedVariableInstance): This emits whatever
12379         code is necessary on the stack to access the instance to a local
12380         variable (the variable will be accessed as a field).
12381
12382         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
12383         EmitContext.EmitAddressOfParameter): Routines to support
12384         parameters (not completed at this point). 
12385         
12386         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
12387         will also remove the parameters.
12388
12389         * convert.cs (Convert): Define a `ConstantEC' which points to a
12390         null.  This is just to prefity some code that uses
12391         ImplicitStandardConversion code and do not have an EmitContext
12392         handy.
12393
12394         The idea is to flag explicitly that at that point in time, it is
12395         known that the conversion will not trigger the delegate checking
12396         code in implicit conversions (which requires a valid
12397         EmitContext). 
12398
12399         Everywhere: pass new EmitContext parameter since
12400         ImplicitStandardConversionExists now requires it to check for
12401         anonymous method conversions. 
12402
12403         (Convert.ImplicitStandardConversionExists): If the type of an
12404         expression is the anonymous_method_type, and the type is a
12405         delegate, we invoke the AnonymousMethod.Compatible method to check
12406         whether an implicit conversion is possible. 
12407
12408         (Convert.ImplicitConversionStandard): Only do implicit method
12409         group conversions if the language level is not ISO_1.
12410
12411         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
12412         MethodInfo for the Invoke method.  used by Delegate and
12413         AnonymousDelegate.
12414
12415         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
12416         method conversions if the target type is a delegate.
12417
12418         Removed extra debugging nops.
12419
12420         (LocalVariableReference): Turn the `local_info' into a public
12421         field. 
12422
12423         Add `prepared' field, the same hack used for FieldExprs to cope
12424         with composed assignments, as Local variables do not necessarily
12425         operate purely on the stack as they used to: they can be captured
12426         fields. 
12427
12428         Add `temp' for a temporary result, like fields.
12429
12430         Refactor DoResolve and DoResolveLValue into DoResolveBase.
12431
12432         It now copes with Local variables that are captured and emits the
12433         proper instance variable to load it from a field in the captured
12434         case. 
12435
12436         (ParameterReference.DoResolveBase): During the resolve phase,
12437         capture parameters if we are in an anonymous method.
12438
12439         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
12440         anonymous method, use the EmitContext helper routines to emit the
12441         parameter reference.
12442
12443         * iterators.cs: Set RemapToProxy to true/false during the
12444         EmitDispose class.
12445
12446         * parameters.cs (GetParameterByName): New helper method. 
12447
12448         * typemanager.cs (anonymous_method_type) a new type that
12449         represents an anonyous method.  This is always an internal type,
12450         used as a fencepost to test against the anonymous-methodness of an
12451         expression. 
12452         
12453 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
12454
12455         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
12456         561 report.
12457         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
12458
12459 2004-10-18  Martin Baulig  <martin@ximian.com>
12460
12461         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
12462         `Type' directly, but call ResolveType() on it.
12463         (Catch.Resolve): Likewise.
12464         (Foreach.Resolve): Likewise.
12465
12466 2004-10-18  Martin Baulig  <martin@ximian.com>
12467
12468         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
12469         `Type' directly, but call ResolveType() on it.
12470         (Probe.DoResolve): Likewise.
12471         (ArrayCreation.LookupType): Likewise.
12472         (TypeOf.DoResolve): Likewise.
12473         (SizeOf.DoResolve): Likewise.
12474
12475 2004-10-18  Martin Baulig  <martin@ximian.com>
12476
12477         * expression.cs (Invocation.BetterFunction): Put back
12478         TypeManager.TypeToCoreType().
12479
12480 2004-10-18  Raja R Harinath  <rharinath@novell.com>
12481
12482         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
12483         the ResolveType.
12484
12485 2004-10-18  Martin Baulig  <martin@ximian.com>
12486
12487         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
12488         `Type' directly, but call ResolveType() on it.
12489
12490 2004-10-18  Martin Baulig  <martin@ximian.com>
12491
12492         * class.cs (FieldMember.Define): Don't access the TypeExpr's
12493         `Type' directly, but call ResolveType() on it.
12494         (MemberBase.DoDefine): Likewise.
12495
12496         * expression.cs (New.DoResolve): Don't access the TypeExpr's
12497         `Type' directly, but call ResolveType() on it.
12498         (ComposedCast.DoResolveAsTypeStep): Likewise.
12499
12500         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
12501         `Type' directly, but call ResolveType() on it.
12502
12503 2004-10-17  John Luke  <john.luke@gmail.com>
12504
12505         * class.cs (Operator.GetSignatureForError): use CSharpName
12506
12507         * parameter.cs (Parameter.GetSignatureForError): Returns
12508         correct name even if was not defined.
12509
12510 2004-10-13  Raja R Harinath  <rharinath@novell.com>
12511
12512         Fix #65816.
12513         * class.cs (TypeContainer.EmitContext): New property.
12514         (DefineNestedTypes): Create an emitcontext for each part.
12515         (MethodCore.DoDefineParameters): Use container's emitcontext.
12516         Pass type array to InternalParameters.
12517         (MemberBase.DoDefine): Use container's emitcontext.
12518         (FieldMember.Define): Likewise.
12519         (Event.Define): Likewise.
12520         (SetMethod.GetParameterInfo): Change argument to EmitContext.
12521         Pass type array to InternalParameters.
12522         (SetIndexerMethod.GetParameterInfo): Likewise.
12523         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
12524         * delegate.cs (Define): Pass emitcontext to
12525         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
12526         array to InternalParameters.
12527         * expression.cs (ParameterReference.DoResolveBase): Pass
12528         emitcontext to GetParameterInfo.
12529         (ComposedCast.DoResolveAsTypeStep): Remove check on
12530         ec.ResolvingTypeTree.
12531         * parameter.cs (Parameter.Resolve): Change argument to
12532         EmitContext.  Use ResolveAsTypeTerminal.
12533         (Parameter.GetSignature): Change argument to EmitContext.
12534         (Parameters.ComputeSignature): Likewise.
12535         (Parameters.ComputeParameterTypes): Likewise.
12536         (Parameters.GetParameterInfo): Likewise.
12537         (Parameters.ComputeAndDefineParameterTypes): Likewise.
12538         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
12539         * support.cs (InternalParameters..ctor): Remove variant that takes
12540         a DeclSpace.
12541         * typemanager.cs (system_intptr_expr): New.
12542         (InitExpressionTypes): Initialize it.
12543
12544 2004-10-12  Chris Toshok  <toshok@ximian.com>
12545
12546         * cs-parser.jay: fix location for try_statement and catch_clause.
12547
12548 2004-10-11  Martin Baulig  <martin@ximian.com>
12549
12550         * report.cs: Don't make --fatal abort on warnings, we have
12551         -warnaserror for that.
12552
12553 2004-10-07  Raja R Harinath  <rharinath@novell.com>
12554
12555         More DeclSpace.ResolveType avoidance.
12556         * decl.cs (MemberCore.InUnsafe): New property.
12557         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
12558         with newly created EmitContext.
12559         (FieldMember.Define): Likewise.
12560         * delegate.cs (Delegate.Define): Likewise.
12561         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
12562         only if normal name-lookup fails.
12563         (TypeExpr.DoResolve): Enable error-checking.
12564         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
12565         (SizeOf.DoResolve): Likewise.
12566         (ComposedCast.DoResolveAsTypeStep): Likewise.
12567         (StackAlloc.DoResolve): Likewise.
12568         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
12569         (Block.Unsafe): New property.
12570         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
12571         (Unsafe): Set 'unsafe' flag of contained block.
12572         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
12573         (Fixed.Resolve): Likewise.
12574         (Catch.Resolve): Likewise.
12575         (Using.ResolveLocalVariableDecls): Likewise.
12576         (Foreach.Resolve): Likewise.
12577
12578 2004-10-05  John Luke <john.luke@gmail.com>
12579
12580         * cs-parser.jay: add location to error CS0175
12581
12582 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
12583
12584         * ecore.cs (Expression.Constantity): Add support for turning null
12585         into a constant.
12586
12587         * const.cs (Const.Define): Allow constants to be reference types
12588         as long as the value is Null.
12589
12590 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
12591
12592         * namespace.cs (NamespaceEntry.Using): No matter which warning
12593         level is set, check if this namespace name has already been added.
12594
12595 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
12596
12597         * expression.cs: reftype [!=]= null should always use br[true,false].
12598         # 67410
12599
12600 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
12601
12602         Fix #67108
12603         * attribute.cs: Enum conversion moved to 
12604         GetAttributeArgumentExpression to be applied to the all
12605         expressions.
12606
12607 2004-10-01  Raja R Harinath  <rharinath@novell.com>
12608
12609         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
12610         * class.c (TypeContainer.DefineType): Flag error if
12611         base types aren't accessible due to access permissions.
12612         * decl.cs (DeclSpace.ResolveType): Move logic to
12613         Expression.ResolveAsTypeTerminal.
12614         (DeclSpace.ResolveTypeExpr): Thin layer over
12615         Expression.ResolveAsTypeTerminal.
12616         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
12617         Refactor code into NestedAccess.  Use it.
12618         (DeclSpace.NestedAccess): New.
12619         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
12620         argument to silence errors.  Check access permissions.
12621         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
12622         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
12623         (Cast.DoResolve): Likewise.
12624         (New.DoResolve): Likewise.
12625         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
12626         (TypeOf.DoResolve): Likewise.
12627
12628         * expression.cs (Invocation.BetterConversion): Return the Type of
12629         the better conversion.  Implement section 14.4.2.3 more faithfully.
12630         (Invocation.BetterFunction): Make boolean.  Make correspondence to
12631         section 14.4.2.2 explicit.
12632         (Invocation.OverloadResolve): Update.
12633         (Invocation): Remove is_base field.
12634         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
12635         (Invocation.Emit): Likewise.
12636
12637 2004-09-27  Raja R Harinath  <rharinath@novell.com>
12638
12639         * README: Update to changes.
12640
12641 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
12642
12643         * cs-parser.jay: Reverted 642 warning fix.
12644
12645 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
12646
12647         Fix bug #66615
12648         * decl.cs (FindMemberWithSameName): Indexer can have more than
12649         1 argument.
12650
12651 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
12652
12653         * expression.cs (LocalVariableReference.DoResolveLValue):
12654         Do not report warning 219 for out values.
12655         (EmptyExpression.Null): New member to avoid extra allocations.
12656
12657 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
12658
12659         * cs-parser.jay: Fix wrong warning 642 report.
12660
12661         * cs-tokenizer.cs (CheckNextToken): New helper;
12662         Inspect next character if is same as expected.
12663
12664 2004-09-23  Martin Baulig  <martin@ximian.com>
12665
12666         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
12667         (Convert.ImplicitReferenceConversionExists): Likewise.
12668
12669 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
12670
12671         * class.cs (Operator.Define): Add error 448 and 559 report.
12672
12673 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
12674
12675         * class.cs (MemberBase.IsTypePermitted): New protected
12676         method for checking error CS0610.
12677
12678 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
12679
12680         * class.cs (TypeContainer.HasExplicitLayout): New property
12681         Returns whether container has StructLayout attribute set Explicit.
12682         (FieldMember): New abstract class for consts and fields.
12683         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
12684         (Field): Reuse FieldMember.
12685
12686         * const.cs (Const): Reuse FieldMember.
12687
12688         * rootcontext.cs: EmitConstants call moved to class.
12689
12690 2004-09-22  Martin Baulig  <martin@ximian.com>
12691
12692         Thanks to Peter Sestoft for this bug report.
12693
12694         * expression.cs (Conditional): If both the `trueExpr' and the
12695         `falseExpr' is a NullLiteral, return a NullLiteral.
12696
12697 2004-09-22  Martin Baulig  <martin@ximian.com>
12698
12699         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
12700         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
12701         for the "get_Current" call.
12702
12703 2004-09-22  Martin Baulig  <martin@ximian.com>
12704
12705         Marek and me just fixed one of our oldest bugs: #28562 :-)
12706
12707         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
12708
12709         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
12710         we're an EnumConstant, just return that.
12711         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
12712         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
12713         to get the value which'll actually be written into the attribute.
12714         However, we have to use GetValue() to access the attribute's value
12715         in the compiler.        
12716
12717 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
12718
12719         * constant.cs (Constant.IsNegative): New abstract property
12720         IsNegative.
12721
12722         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
12723         (StackAlloc.DoResolve): Reused IsNegative.
12724
12725 2004-09-21  Martin Baulig  <martin@ximian.com>
12726
12727         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
12728         if we're used in an iterator, we may be called from different
12729         methods.
12730
12731         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
12732         we actually have an exception block.
12733
12734 2004-09-20  John Luke <jluke@cfl.rr.com>
12735
12736         * class.cs, cs-parser.jay: Improve the error report for 1520:
12737         report the actual line where the error happens, not where the
12738         class was declared.
12739
12740         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
12741         Pass location information that was available elsewhere.
12742
12743 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
12744
12745         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
12746         runtime to delay sign assemblies.
12747
12748 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
12749
12750         * cs-parser.jay: Do not report the stack trace, this is barely
12751         used nowadays.
12752
12753 2004-08-22  John Luke  <john.luke@gmail.com>
12754  
12755         * driver.cs : check that a resource id is not already used
12756         before adding it, report CS1508 if it is, bug #63637
12757
12758 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
12759
12760         * ecore.cs: Removed dead code.
12761
12762 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
12763
12764         * class.cs: Do not report warning CS0067 on the interfaces.
12765
12766 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
12767
12768         * cs-parser.jay: Add error 504 report.
12769
12770 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
12771
12772         * rootcontext.cs: WarningLevel is 4 by default now.
12773
12774         * statement.cs (Fixed.Resolve): Do not null
12775         VariableInfo.
12776
12777 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
12778
12779         Fixed bug #55780
12780         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
12781         deep search when property is not virtual.
12782         (PropertyExpr.ResolveAccessors): Make one call for both
12783         accessors.
12784
12785 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
12786
12787         Fixed bug #65766
12788         * statement.cs: Error 152 report constains also location.
12789
12790 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
12791
12792         Fixed bug #65766
12793         * const.cs: Explicitly set constant as static.
12794
12795 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
12796
12797         Fixed bug #64226
12798         * cs-parser.jay: Add error 1017 report.
12799
12800 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
12801
12802         Fixed bug #59980, #64224
12803         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
12804
12805         * typemanager.cs (IsSpecialMethod): Simplified
12806
12807 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
12808
12809         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
12810         condition with better params.
12811
12812 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
12813
12814         Fixed bug #65238
12815         * attribute.cs (Resolve): Property has to have both
12816         accessors.
12817
12818 2004-09-14  Martin Baulig  <martin@ximian.com>
12819
12820         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
12821
12822 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
12823
12824         Fixed bug #61902
12825         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
12826         called and is obsolete then this member suppress message
12827         when call is inside next [Obsolete] method or type.
12828
12829         * expression.cs: Use TestObsoleteMethodUsage member.
12830
12831 2004-09-14  Martin Baulig  <martin@ximian.com>
12832
12833         * cs-parser.jay: Sync a bit with the GMCS version.
12834
12835 2004-09-14  Martin Baulig  <martin@ximian.com>
12836
12837         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
12838         (CSharpParser.yacc_verbose_flag): New public field.
12839
12840         * genericparser.cs: Removed.
12841
12842 2004-09-14  Raja R Harinath  <rharinath@novell.com>
12843
12844         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
12845
12846 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
12847
12848         * class.cs (MethodCore.CheckBase): Fix bug #65757.
12849
12850 2004-09-10  Martin Baulig  <martin@ximian.com>
12851
12852         Backported my MemberName changes from GMCS into MCS.
12853
12854         - we are now using a special `MemberName' class instead of using
12855         strings; in GMCS, the `MemberName' also contains the type
12856         arguments.
12857
12858         - changed the grammar rules a bit:
12859           * the old `member_name' is now a `namespace_or_type_name':
12860             The rule is that we use `namespace_or_type_name' everywhere
12861             where we expect either a "member name" (GetEnumerator) or a
12862             "member name" with an explicit interface name
12863             (IEnumerable.GetEnumerator).
12864             In GMCS, the explicit interface name may include type arguments
12865             (IEnumerable<T>.GetEnumerator).
12866           * we use `member_name' instead of just `IDENTIFIER' for
12867             "member names":
12868             The rule is that we use `member_name' wherever a member may
12869             have type parameters in GMCS.       
12870
12871         * decl.cs (MemberName): New public class.
12872         (MemberCore.MemberName): New public readonly field.
12873         (MemberCore.ctor): Take a `MemberName' argument, not a string.
12874         (DeclSpace): Likewise.
12875
12876         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
12877         * enum.cs (Enum.ctor): Likewise.
12878
12879         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
12880         MemberName.     
12881         (AliasEntry.ctor): Take a MemberName, not an Expression.
12882         (AliasEntry.UsingAlias): Likewise.
12883
12884         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
12885         (IMethodData.MemberName): Changed type from string to MemberName.
12886         (MemberBase.ExplicitInterfaceName): Likewise.
12887         (AbstractPropertyEventMethod.SetupName): Make this private.
12888         (AbstractPropertyEventMethod.ctor): Added `string prefix'
12889         argument; compute the member name here.
12890         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
12891         on the `member.MemberName' and the `prefix'.
12892
12893         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
12894         not `type_name'.
12895         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
12896         thus, we get a `MemberName' instead of a `string'.  These
12897         declarations may have type parameters in GMCS.
12898         (interface_method_declaration, delegate_declaration): Likewise.
12899         (class_declaration, interface_declaration): Likewise.
12900         (method_header): Use `namespace_or_type_name' instead of
12901         `member_name'.  We may be an explicit interface implementation.
12902         (property_declaration, event_declaration): Likewise.
12903         (member_name): This is now just an `IDENTIFIER', not a
12904         `namespace_or_type_name'.
12905         (type_name, interface_type): Removed.
12906         (namespace_or_type_name): Return a MemberName, not an Expression.
12907         (primary_expression): Use `member_name' instead of `IDENTIFIER';
12908         call GetTypeExpression() on the MemberName to get an expression.
12909         (IndexerDeclaration.interface_type): Changed type from string to
12910         MemberName.
12911         (MakeName): Operate on MemberName's instead of string's.
12912
12913 2004-09-13  Raja R Harinath  <rharinath@novell.com>
12914
12915         Fix bug #55770.
12916         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
12917         (NamespaceEntry.Lookup): Add new argument to flag if we want the
12918         lookup to avoid symbols introduced by 'using'.
12919         * rootcontext.cs (NamespaceLookup): Update.
12920
12921 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
12922
12923         * class.cs (TypeContainer.DoDefineMembers): Do not call
12924         DefineDefaultConstructor for static classes.
12925
12926 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
12927
12928         * attribute.cs (Attribute.Resolve): Add error 653 report.
12929
12930         * class.cs (Class.ApplyAttributeBuilder): Add error 641
12931         report.
12932         (Method.ApplyAttributeBuilder): Add error 685 report.
12933         (Operator.Define): Add error 564 report.
12934
12935         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
12936
12937         * expression.cs (Invocation.DoResolve): Add error
12938         245 and 250 report.
12939
12940         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
12941         error 674 report.
12942
12943 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
12944
12945         * class.cs (ConstructorInitializer.Resolve):
12946         Wrong error number (515->516).
12947
12948 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
12949
12950         * class.cs (Indexer.Define): Add error 631 report.
12951
12952 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
12953
12954         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
12955
12956 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
12957
12958         * expression.cs (Probe.DoResolve): Add error CS0241 report.
12959
12960 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
12961
12962         * cs-parser.jay: Added error CS0241 report.
12963
12964 2004-09-10  Raja R Harinath  <rharinath@novell.com>
12965
12966         * cs-parser.jay (fixed_statement): Introduce a scope for the
12967         declaration in the 'fixed' statement.
12968
12969 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
12970
12971         * cs-parser.jay: Added CS0230 error report.
12972
12973 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
12974
12975         * cs-parser.jay: Added errors CS0231 and CS0257 report.
12976
12977 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
12978
12979         * expression.cs (Argument.Resolve): Added error CS0192 and
12980         CS0199 report.
12981
12982 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
12983
12984         C# 2.0 #pragma warning feature
12985
12986         * cs-tokenizer.cs (PreProcessPragma): New method; 
12987         Handles #pragma directive.
12988
12989         * report.cs (WarningRegions): New class; Support
12990         class for #pragma warning directive. It tests whether
12991         warning is enabled for a given line.
12992
12993 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
12994
12995         * const.cs: Add more descriptive error report, tahnks to
12996         Sebastien. 
12997
12998 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
12999
13000         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
13001
13002 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
13003
13004         * expression.cs: Apply patch from Ben: Remove dead code from
13005         ArrayCreation, and remove the TurnintoConstant call in const.cs,
13006         as that code just threw an exception anwyays.
13007
13008         * const.cs: Remove the call to the turnintoconstant, for details
13009         see bug: #63144
13010         
13011         * literal.cs: The type of the null-literal is the null type;  So
13012         we use a placeholder type (literal.cs:System.Null, defined here)
13013         for it.
13014
13015         * expression.cs (Conditional.DoResolve): Remove some old code that
13016         is no longer needed, conversions have been fixed.
13017
13018         (ArrayCreationExpression.DoResolve): Return false if we fail to
13019         resolve the inner expression.
13020
13021 2004-09-07  Raja R Harinath  <rharinath@novell.com>
13022
13023         Fix test-290.cs.
13024         * cs-parser.jay (delegate_declaration): Record a delegate
13025         declaration as a type declaration.
13026         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
13027
13028 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
13029
13030         * parameter.cs: Do not crash if the type can not be resolved. 
13031
13032         * expression.cs: Report errors with unsafe pointers, fixes #64896
13033
13034 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
13035
13036         * expression.cs: Pointer arith always needs to do a conv.i
13037         if the operand is a long. fix 65320
13038
13039 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
13040
13041         Fixed cs0619-37.cs, cs0619-38.cs
13042
13043         * enum.cs (GetObsoleteAttribute): Removed.
13044
13045         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
13046         on Enum member is double staged. The first is tested member
13047         and then enum.
13048
13049 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
13050
13051         Fixed #56986, #63631, #65231
13052
13053         * class.cs: (TypeContainer.AddToMemberContainer): New method,
13054         adds member to name container.
13055         (TypeContainer.AddToTypeContainer): New method, adds type to
13056         name container.
13057         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
13058         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
13059         AddOperator): Simplified by reusing AddToMemberContainer.
13060         (TypeContainer.UserDefinedStaticConstructor): Changed to property
13061         instead of field.
13062         (Method.CheckForDuplications): Fixed implementation to test all
13063         possibilities.
13064         (MemberBase): Detection whether member is explicit interface
13065         implementation is now in constructor.
13066         (MemberBase.UpdateMemberName): Handles IndexerName.
13067         (Accessor): Changed to keep also location information.
13068         (AbstractPropertyEventMethod): Is derived from MemberCore.
13069         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
13070         will be emited or not.
13071         (PropertyBase.AreAccessorsDuplicateImplementation):
13072         Tests whether accessors are not in collision with some method.
13073         (Operator): Is derived from MethodCore to simplify common
13074         operations.
13075
13076         * decl.cs (Flags.TestMethodDuplication): Test for duplication
13077         must be performed.
13078         (DeclSpace.AddToContainer): Adds the member to defined_names
13079         table. It tests for duplications and enclosing name conflicts.
13080
13081         * enum.cs (EnumMember): Clean up to reuse the base structures
13082
13083 2004-09-03  Martin Baulig  <martin@ximian.com>
13084
13085         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
13086         into TypeContainer, to make partial classes work again.
13087
13088 2004-09-03  Martin Baulig  <martin@ximian.com>
13089
13090         * rootcontext.cs (RootContext.V2): Removed.
13091
13092 2004-03-23  Martin Baulig  <martin@ximian.com>
13093
13094         * expression.cs (Invocation.OverloadResolve): Added `bool
13095         may_fail' argument and use it instead of the Location.IsNull() hack.
13096
13097 2004-09-03  Martin Baulig  <martin@ximian.com>
13098
13099         Merged latest changes into gmcs.  Please keep this comment in
13100         here, it makes it easier for me to see what changed in MCS since
13101         the last time I merged.
13102
13103 2004-09-03  Raja R Harinath  <rharinath@novell.com>
13104
13105         Fix #61128.
13106         * expression.cs (BetterConversion): Don't allow either conversion 
13107         to be null.  Remove redundant implicit conversion test when 'q ==
13108         null' -- when this function is invoked, we already know that the
13109         implicit conversion exists.
13110         (BetterFunction): Assume that 'best' is non-null.  Remove
13111         redundant reimplementation of IsApplicable when 'best' is null.
13112         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
13113         number of arguments.
13114         (IsAncestralType): Extract from OverloadResolve.
13115         (OverloadResolve): Make robust to the MethodGroupExpr being
13116         unsorted.  Implement all the logic of Section 14.5.5.1, and
13117         support overloading of methods from multiple applicable types.
13118         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
13119
13120         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
13121         (RealError, Warning): Append type of report to related symbol.
13122
13123 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
13124
13125         * enum.cs: Fixed CLS-Compliance checks for enum members.
13126         Error tests cs3008-8.cs, cs3014-8.cs
13127
13128 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
13129
13130         Fixed bug #62342, #63102
13131         * class.cs: ImplementIndexer uses member.IsExplicitImpl
13132         like ImplementMethod.
13133
13134 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
13135
13136         * attribute.cs (Attribute.GetAttributeArgumentExpression):
13137         Fixed bug #65170.
13138
13139 2004-09-02  Martin Baulig  <martin@ximian.com>
13140
13141         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
13142         TypeManager.GetArgumentTypes() rather than calling GetParameters()
13143         on the MethodBase.
13144
13145 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
13146
13147         C# 2.0 Static classes implemented
13148
13149         * class.cs (TypeContainer): instance_constructors,
13150         initialized_fields, initialized_static_fields,
13151         default_constructor, base_inteface_types are protected to be
13152         accessible from StaticClass.
13153         (TypeContainer.DefineDefaultConstructor): New virtual method
13154         for custom default constructor generating
13155         (StaticClass): New class to handle "Static classes" feature.
13156
13157         * cs-parser.jay: Handle static keyword on class like instance
13158         of StaticClass.
13159
13160         * driver.cs: Added "/langversion" command line switch with two
13161         options (iso-1, default).
13162
13163 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
13164
13165         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
13166
13167 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
13168
13169         * delegate.cs: Style.
13170
13171 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13172
13173         * delegate.cs: Add seperate instance expr field for miguel.
13174
13175 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
13176
13177         * PointerArithmetic (Resolve): make sure we are not doing
13178         pointer arith on void*. Also, make sure we are resolved
13179         by not setting eclass until resolve.
13180
13181         All callers: Make sure that PointerArithmetic gets resolved.
13182
13183 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
13184
13185         * ArrayCreation (LookupType): If the type does not resolve 
13186         to an array, give an error.
13187
13188 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
13189
13190         * statement.cs (Try.Resolve): Fixed bug #64222
13191
13192 2004-08-27  Martin Baulig  <martin@ximian.com>
13193
13194         * class.cs
13195         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
13196         crash here.     
13197
13198 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
13199
13200         * ecore.cs (Constantify): Get underlying type via
13201         System.Enum.GetUnderlyingType to avoid StackOverflow on the
13202         Windows in special cases.
13203
13204 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
13205
13206         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
13207         for obtaining also private methods.
13208         (GetRemoveMethod): Used GetRemoveMethod (true)
13209         for obtaining also private methods.
13210
13211 2004-08-24  Martin Baulig  <martin@ximian.com>
13212
13213         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
13214         MethodAttributes.HideBySig for operators.
13215
13216 2004-08-23  Martin Baulig  <martin@ximian.com>
13217
13218         Back to the old error reporting system :-)
13219
13220         * report.cs (Message): Removed.
13221         (Report.MessageData, ErrorData, WarningData): Removed.
13222         (Report.Error, Warning): Back to the old system.
13223
13224 2004-08-23  Martin Baulig  <martin@ximian.com>
13225
13226         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
13227
13228         * class.cs (TypeContainer.ParentContainer): New public virtual
13229         method; replaces the explicit interface implementation.
13230         (ClassPart.ParentContainer): Override.
13231
13232 2004-08-23  Martin Baulig  <martin@ximian.com>
13233
13234         * statement.cs (Switch): Added support for constant switches; see
13235         #59428 or test-285.cs.
13236
13237 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
13238
13239         Fixed bug #62740.
13240         * statement.cs (GetEnumeratorFilter): Removed useless
13241         logic because C# specs is strict. GetEnumerator must be
13242         public.
13243
13244 2004-08-22  Martin Baulig  <martin@ximian.com>
13245
13246         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
13247         a switch and may break, reset the barrier.  Fixes #59867.
13248
13249 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
13250
13251         CLS-Compliance speed up (~5% for corlib)
13252
13253         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
13254         New method. Tests container for CLS-Compliant names
13255
13256         * class.cs (TypeContainer.VerifyClsName): New method.
13257         Checks whether container name is CLS Compliant.
13258         (Constructor): Implements IMethodData.
13259
13260         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
13261         low-case table for CLS Compliance test.
13262         (MemberCache.VerifyClsParameterConflict): New method.
13263         Checks method parameters for CS3006 error.
13264
13265         * enum.cs (EnumMember): Is derived from MemberCore.
13266         (Enum.VerifyClsName): Optimized for better performance.
13267
13268 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
13269
13270         * report.cs: Renamed Error_T to Error and changed all
13271         references.
13272
13273 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
13274
13275         * class.cs (TypeContainer.IndexerArrayList): New inner class
13276         container for indexers.
13277         (TypeContainer.DefaultIndexerName): New constant for default
13278         indexer name. Replaced all "Item" with this constant.
13279         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
13280
13281         * typemanager.cs (TypeManager.default_member_ctor): Cache here
13282         DefaultMemberAttribute constructor.
13283
13284 2004-08-05  Martin Baulig  <martin@ximian.com>
13285
13286         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
13287         Fix bug #59429.
13288
13289 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
13290
13291         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
13292         multi platforms problem.
13293
13294         * compiler.csproj: Included shared files.
13295
13296 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
13297
13298         Fix bug 60333, 55971 in the more general way
13299         * attribute.cs (Attribute.GetAttributeArgumentExpression):
13300         Added arg_type argument for constant conversion.
13301         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
13302
13303 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
13304
13305         Fix bug #59760
13306         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
13307         OperatorArrayList, MethodCoreArrayList for typecontainer
13308         containers. Changed class member types to these new types.
13309         (MethodArrayList.DefineMembers): Added test for CS0659.
13310
13311 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
13312
13313         * cfold.cs: Synchronize the folding with the code in expression.cs
13314         Binary.DoNumericPromotions for uint operands.
13315
13316         * attribute.cs: Revert patch from Raja, it introduced a regression
13317         while building Blam-1.2.1 (hard to isolate a test case).
13318
13319 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
13320
13321         Fix for #55382
13322         * class.cs:
13323         (TypeContainer.Define): Renamed to DefineContainerMembers because of
13324         name collision.
13325         (MethodCore.parent_method): New member. The method we're overriding
13326         if this is an override method.
13327         (MethodCore.CheckBase): Moved from Method class and made common.
13328         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
13329         private.
13330         (MethodCore.CheckForDuplications): New abstract method. For custom
13331         member duplication search in a container
13332         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
13333         method and its return type.
13334         (Event.conflict_symbol): New member. Symbol with same name in the
13335         parent class.
13336
13337         * decl.cs:
13338         (MemberCache.FindMemberWithSameName): New method. The method
13339         is looking for conflict with inherited symbols.
13340
13341 2004-08-04  Martin Baulig  <martin@ximian.com>
13342
13343         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
13344
13345         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
13346
13347 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
13348
13349         * report.cs (Message): New enum for better error, warning reference in
13350         the code.
13351         (MessageData): New inner abstract class. It generally handles printing of
13352         error and warning messages.
13353         Removed unused Error, Warning, Message methods.
13354
13355 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
13356
13357         Fix for cs0592-8.cs test
13358         * attribute.cs
13359         (Attributable.ValidAttributeTargets): Made public.
13360         (Attribute.ExplicitTarget): New member for explicit target value.
13361         (Attribute.CheckTargets): Now we translate explicit attribute
13362         target to Target here.
13363
13364 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
13365
13366         * ecore.cs (MethodGroupExpr): new IsBase property.
13367
13368         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
13369
13370         * delegate.cs (DelegateCreation): store a MethodGroupExpr
13371         rather than an instance expr.
13372
13373         (DelegateCreation.Emit): Use the method group rather than
13374         the instance expression. Also, if you have base.Foo as the
13375         method for a delegate, make sure to emit ldftn, not ldftnvirt.
13376
13377         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
13378
13379         (NewDelegate.DoResolve): Only check for the existance of Invoke
13380         if the method is going to be needed. Use MethodGroupExpr.
13381
13382         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
13383
13384         * expression.cs: For pointer arith., make sure to use
13385         the size of the type, not the size of the pointer to
13386         the type.
13387
13388 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
13389
13390         Fix for #60722
13391         * class.cs (Class): Added error CS0502 test.
13392
13393 2004-08-03  John Luke  <jluke@cfl.rr.com>
13394             Raja R Harinath  <rharinath@novell.com>
13395
13396         Fix for #60997.
13397         * attribute.cs (Attribute.complained_before): New flag.
13398         (Attribute.ResolveType, Attribute.Resolve),
13399         (Attribute.DefinePInvokeMethod): Set it.
13400         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
13401         
13402 2004-08-03  Martin Baulig  <martin@ximian.com>
13403
13404         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
13405         use a user-defined operator; we still need to do numeric
13406         promotions in case one argument is a builtin type and the other
13407         one has an implicit conversion to that type.  Fixes #62322.
13408
13409 2004-08-02  Martin Baulig  <martin@ximian.com>
13410
13411         * statement.cs (LocalInfo.Flags): Added `IsThis'.
13412         (LocalInfo.IsThis): New public property.
13413         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
13414
13415 2004-08-01  Martin Baulig  <martin@ximian.com>
13416
13417         * class.cs (TypeContainer.GetClassBases): Don't set the default
13418         here since we may get called from GetPartialBases().
13419         (TypeContainer.DefineType): If GetClassBases() didn't return a
13420         parent, use the default one.
13421
13422 2004-07-30  Duncan Mak  <duncan@ximian.com>
13423
13424         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
13425
13426 2004-07-30  Martin Baulig  <martin@ximian.com>
13427
13428         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
13429
13430         * class.cs (SourceMethod): New public class, derive from the
13431         symbol writer's ISourceMethod.
13432         (Method): Use the new symbol writer API.
13433
13434         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
13435         as argument and use the new symbol writer.
13436
13437         * location.cs
13438         (SourceFile): Implement the symbol writer's ISourceFile.
13439         (Location.SymbolDocument): Removed.
13440         (Location.SourceFile): New public property.
13441
13442         * symbolwriter.cs: Use the new symbol writer API.
13443
13444 2004-07-30  Raja R Harinath  <rharinath@novell.com>
13445
13446         * Makefile (install-local): Remove.  Functionality moved to
13447         executable.make.
13448
13449 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
13450
13451         * Makefile: Install mcs.exe.config file together with mcs.exe.
13452         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
13453         correct runtime version.
13454         
13455 2004-07-25  Martin Baulig  <martin@ximian.com>
13456
13457         * class.cs
13458         (TypeContainer.RegisterOrder): Removed, this was unused.
13459         (TypeContainer, interface_order): Removed.
13460         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
13461         TypeContainer as argument since we can also be called with a
13462         `PartialContainer' for a partial class/struct/interface.
13463         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
13464         of checking whether we're an `Interface' - we could be a
13465         `PartialContainer'.
13466         (PartialContainer.Register): Override; call
13467         AddClass()/AddStruct()/AddInterface() on our parent.
13468
13469         * cs-parser.jay (interface_member_declaration): Add things to the
13470         `current_container', not the `current_class'.
13471
13472         * rootcontext.cs (RegisterOrder): The overloaded version which
13473         takes an `Interface' was unused, removed.
13474
13475         * typemanager.cs (TypeManager.LookupInterface): Return a
13476         `TypeContainer', not an `Interface'.
13477         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
13478         contain a `PartialContainer' for an interface, so check it's
13479         `Kind' to figure out what it is.
13480
13481 2004-07-25  Martin Baulig  <martin@ximian.com>
13482
13483         * class.cs (Class.DefaultTypeAttributes): New public constant.
13484         (Struct.DefaultTypeAttributes): Likewise.
13485         (Interface.DefaultTypeAttributes): Likewise.
13486         (PartialContainer.TypeAttr): Override this and add the
13487         DefaultTypeAttributes.
13488
13489 2004-07-25  Martin Baulig  <martin@ximian.com>
13490
13491         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
13492         we can just use the `Parent' field instead.
13493
13494 2004-07-25  Martin Baulig  <martin@ximian.com>
13495
13496         * class.cs (TypeContainer.Emit): Renamed to EmitType().
13497
13498 2004-07-25  Martin Baulig  <martin@ximian.com>
13499
13500         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
13501         our parts before defining any methods.
13502         (TypeContainer.VerifyImplements): Make this virtual.
13503         (ClassPart.VerifyImplements): Override and call VerifyImplements()
13504         on our PartialContainer.
13505
13506 2004-07-25  Martin Baulig  <martin@ximian.com>
13507
13508         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
13509
13510         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
13511         argument, we can just use the `Parent' field instead.
13512
13513         * class.cs
13514         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
13515         (MemberBase.DoDefine): Likewise.
13516
13517 2004-07-24  Martin Baulig  <martin@ximian.com>
13518
13519         * decl.cs (MemberCore.Parent): New public field.
13520         (DeclSpace.Parent): Moved to MemberCore.
13521
13522         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
13523         (MemberBase.ctor): Added TypeContainer argument, pass it to our
13524         parent's .ctor.
13525         (FieldBase, Field, Operator): Likewise.
13526         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
13527         (EventField, Event): Likewise.
13528
13529 2004-07-23  Martin Baulig  <martin@ximian.com>
13530
13531         * class.cs (PartialContainer): New public class.
13532         (ClassPart): New public class.
13533         (TypeContainer): Added support for partial classes.
13534         (TypeContainer.GetClassBases): Splitted some of the functionality
13535         out into GetNormalBases() and GetPartialBases().
13536
13537         * cs-tokenizer.cs (Token.PARTIAL): New token.
13538         (Tokenizer.consume_identifier): Added some hacks to recognize
13539         `partial', but only if it's immediately followed by `class',
13540         `struct' or `interface'.
13541
13542         * cs-parser.jay: Added support for partial clases.
13543
13544 2004-07-23  Martin Baulig  <martin@ximian.com>
13545
13546         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
13547         a `DeclSpace' and also made it readonly.
13548         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
13549         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
13550         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
13551
13552         * cs-parser.jay: Pass the `current_class', not the
13553         `current_container' (at the moment, this is still the same thing)
13554         to a new Method, Property, Event, Indexer or Constructor.
13555
13556 2004-07-23  Martin Baulig  <martin@ximian.com>
13557
13558         * cs-parser.jay (CSharpParser): Added a new `current_class' field
13559         and removed the `current_interface' one.
13560         (struct_declaration, class_declaration, interface_declaration):
13561         Set `current_class' to the newly created class/struct/interface;
13562         set their `Bases' and call Register() before parsing their body.
13563
13564 2004-07-23  Martin Baulig  <martin@ximian.com>
13565
13566         * class.cs (Kind): New public enum.
13567         (TypeContainer): Made this class abstract.
13568         (TypeContainer.Kind): New public readonly field.
13569         (TypeContainer.CheckDef): New public method; moved here from
13570         cs-parser.jay.
13571         (TypeContainer.Register): New public abstract method.
13572         (TypeContainer.GetPendingImplementations): New public abstract
13573         method.
13574         (TypeContainer.GetClassBases): Removed the `is_class' and
13575         `is_iface' parameters.
13576         (TypeContainer.DefineNestedTypes): Formerly known as
13577         DoDefineType().
13578         (ClassOrStruct): Made this class abstract.
13579
13580         * tree.cs (RootTypes): New public type. 
13581
13582 2004-07-20  Martin Baulig  <martin@ximian.com>
13583
13584         * tree.cs (Tree.RecordNamespace): Removed.
13585         (Tree.Namespaces): Removed.
13586
13587         * rootcontext.cs (RootContext.IsNamespace): Removed.
13588
13589         * cs-parser.jay (namespace_declaration): Just create a new
13590         NamespaceEntry here.
13591
13592 2004-07-20  Martin Baulig  <martin@ximian.com>
13593
13594         * statement.cs (ExceptionStatement): New abstract class.  This is
13595         now used as a base class for everyone who's using `finally'.
13596         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
13597         our local variables before using them.
13598
13599         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
13600         virtual method.  This is used by Yield.Resolve() to "steal" an
13601         outer block's `finally' clauses.
13602         (FlowBranchingException): The .ctor now takes an ExceptionStatement
13603         argument.
13604
13605         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
13606         version which takes an ExceptionStatement.  This version must be
13607         used to create exception branchings.
13608
13609         * iterator.cs
13610         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
13611         (Iterator.EmitMoveNext): Added exception support; protect the
13612         block with a `fault' clause, properly handle 'finally' clauses.
13613         (Iterator.EmitDispose): Run all the `finally' clauses here.
13614
13615 2004-07-20  Martin Baulig  <martin@ximian.com>
13616
13617         * iterator.cs: This is the first of a set of changes in the
13618         iterator code.  Match the spec more closely: if we're an
13619         IEnumerable, then GetEnumerator() must be called.  The first time
13620         GetEnumerator() is called, it returns the current instance; all
13621         subsequent invocations (if any) must create a copy.
13622
13623 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
13624
13625         * expression.cs: Resolve the constant expression before returning
13626         it. 
13627
13628 2004-07-19  Martin Baulig  <martin@ximian.com>
13629
13630         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
13631         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
13632         the return type of the new EmitContext.
13633
13634 2004-07-18  Martin Baulig  <martin@ximian.com>
13635
13636         * class.cs (Property.Define): Fix iterators.
13637
13638         * iterators.cs (Iterator.Define): Moved the
13639         `container.AddInterator (this)' call here from the .ctor; only do
13640         it if we resolved successfully.
13641
13642 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
13643
13644         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
13645         `true' for preprocessing directives that we parse.  The return
13646         value indicates whether we should return to regular tokenizing or
13647         not, not whether it was parsed successfully.
13648
13649         In the past if we were in: #if false ... #line #endif, we would
13650         resume parsing after `#line'.  See bug 61604.
13651
13652         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
13653         building: IsEnumType should return true only for enums, not for
13654         enums or System.Enum itself.  This fixes #61593.
13655
13656         Likely what happened is that corlib was wrong: mcs depended on
13657         this bug in some places.  The bug got fixed, we had to add the
13658         hack, which caused bug 61593.
13659
13660         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
13661         that was a workaround for the older conditions.
13662
13663 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
13664
13665         * assign.cs: IAssignMethod has a new interface, as documented
13666         inline. All assignment code now uses this new api.
13667
13668         * ecore.cs, expression.cs: All classes which implement
13669         IAssignMethod now use the new interface.
13670
13671         * expression.cs (Invocation): add a hack to EmitCall so that
13672         IndexerAccess can be the target of a compound assignment without
13673         evaluating its arguments twice.
13674
13675         * statement.cs: Handle changes in Invocation api.
13676
13677 2004-07-16  Martin Baulig  <martin@ximian.com>
13678
13679         * iterators.cs: Rewrote this.  We're now using one single Proxy
13680         class for both the IEnumerable and the IEnumerator interface and
13681         `Iterator' derives from Class so we can use the high-level API.
13682
13683         * class.cs (TypeContainer.AddIterator): New method.
13684         (TypeContainer.DoDefineType): New protected virtual method, which
13685         is called from DefineType().
13686         (TypeContainer.DoDefineMembers): Call DefineType() and
13687         DefineMembers() on all our iterators.
13688         (TypeContainer.Emit): Call Emit() on all our iterators.
13689         (TypeContainer.CloseType): Call CloseType() on all our iterators.
13690
13691         * codegen.cs (EmitContext.CurrentIterator): New public field.
13692
13693 2004-07-15  Martin Baulig  <martin@ximian.com>
13694
13695         * typemanager.cs
13696         (TypeManager.not_supported_exception_type): New type.   
13697
13698 2004-07-14  Martin Baulig  <martin@ximian.com>
13699
13700         * iterators.cs: Use real error numbers.
13701
13702 2004-07-14  Martin Baulig  <martin@ximian.com>
13703
13704         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
13705         requires this to be a System.Collection.IEnumerable and not a
13706         class implementing that interface.
13707         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
13708
13709 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
13710
13711         * class.cs: Fixed previous fix, it broke some error tests.
13712
13713 2004-07-12  Martin Baulig  <martin@ximian.com>
13714
13715         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
13716         Fixes #61293.
13717
13718 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
13719
13720         * assign.cs (LocalTemporary): Add new argument: is_address,If
13721         `is_address' is true, then the value that we store is the address
13722         to the real value, and not the value itself.
13723         
13724         * ecore.cs (PropertyExpr): use the new local temporary
13725         stuff to allow us to handle X.Y += z (where X is a struct)
13726
13727 2004-07-08  Martin Baulig  <martin@ximian.com>
13728
13729         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
13730         not always return, just like we're doing in Using.Resolve().
13731
13732 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
13733
13734         * cs-parser.jay (fixed_statement): flag this as Pinned.
13735
13736 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
13737
13738         * typemanager.cs (TypeManager): Removed MakePinned method, this
13739         mechanism is replaced with the .NET 2.x compatible mechanism of
13740         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
13741
13742         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
13743         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
13744         `IsFixed' property which has a different meaning.
13745
13746 2004-07-02  Raja R Harinath  <rharinath@novell.com>
13747
13748         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
13749         visible from inside a nested class, not just the names of the
13750         immediately enclosing class.
13751         Fix for bug #60730.
13752
13753 2004-06-24  Raja R Harinath  <rharinath@novell.com>
13754
13755         * expression.cs (BetterConversion): Remove buggy special-case
13756         handling of "implicit constant expression conversions".  At this
13757         point, we already know that the conversion is possible -- we're
13758         only checking to see which is better.
13759
13760 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
13761
13762         * cs-parser.jay: Added error CS0210 test.
13763
13764 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
13765
13766         * cs-parser.jay: Added error CS0134 test.
13767
13768 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
13769
13770         Fix bug #52507
13771         * cs-parser.jay: Added error CS0145 test.
13772
13773 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
13774
13775         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
13776
13777 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
13778         
13779         * expression.cs (StackAlloc.Resolve): The argument may not
13780         be a constant; deal with this case.
13781         
13782 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
13783
13784         * attribute.cs (IndexerName_GetIndexerName): Renamed to
13785         GetIndexerAttributeValue.
13786         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
13787
13788         * class.cs (Indexer.Define): Added error tests for CS0415,
13789         CS0609.
13790
13791 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
13792
13793         * attribute.cs (Attribute.Resolve): Keep field code in sync with
13794         property code.
13795
13796 2004-06-23  Martin Baulig  <martin@ximian.com>
13797
13798         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
13799         neither return nor throw, reset the barrier as well.  Fixes #60457.
13800
13801 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
13802
13803         * class.cs : EventAttributes is now set to None by default.
13804           This fixes bug #60459.
13805
13806 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
13807
13808         Fix bug #60219
13809         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
13810         Don't throw exception but return null (it's sufficient now).
13811
13812 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
13813
13814         * typemanager.cs (GetArgumentTypes): Faster implementation.
13815
13816 2004-06-18  Martin Baulig  <martin@ximian.com>
13817
13818         * attribute.cs (Attribute.Resolve): Check whether we're an
13819         EmptyCast which a Constant child.  Fixes #60333.
13820
13821 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
13822
13823         * statement.cs (EmitCollectionForeach): Account for the fact that
13824         not all valuetypes are in areas which we can take the address of.
13825         For these variables, we store to a temporary variable. Also, make
13826         sure that we dont emit a `callvirt' on a valuetype method.
13827
13828 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
13829
13830         * expression.cs (StackAlloc.DoReSolve): Added test for
13831         negative parameter (CS0247).
13832
13833 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
13834
13835         Fix bug #59792
13836         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
13837
13838 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
13839
13840         Fix bug #59781
13841         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
13842         ulong.
13843
13844 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
13845
13846         Fix bug #58254 & cs1555.cs, cs1556.cs
13847         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
13848
13849 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
13850
13851         * cs-parser.jay: Added error CS1669 test for indexers.
13852
13853 2004-06-11  Martin Baulig  <martin@ximian.com>
13854
13855         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
13856         call this twice: for params and varargs methods.
13857
13858 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
13859
13860         * class.cs:
13861         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
13862
13863 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
13864
13865         * attribute.cs (Attribute.GetValidTargets): Made public.
13866
13867         * class.cs: 
13868         (AbstractPropertyEventMethod): New class for better code sharing.
13869         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
13870         CS1667 report.
13871         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
13872
13873 2004-06-11  Raja R Harinath  <rharinath@novell.com>
13874
13875         Fix bug #59477.
13876         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
13877         that the call to Resolve is part of a MemberAccess.
13878         (Expression.Resolve): Use it for SimpleName resolution.
13879         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
13880         Add 'intermediate' boolean argument.
13881         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
13882         error message when the SimpleName can be resolved ambiguously
13883         between an expression and a type.
13884         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
13885         public.
13886         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
13887         call on the left-side.
13888
13889 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
13890
13891         * class.cs:
13892         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
13893
13894 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
13895
13896         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
13897
13898 2004-06-11  Martin Baulig  <martin@ximian.com>
13899
13900         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
13901         varargs methods if applicable.
13902
13903 2004-06-11  Martin Baulig  <martin@ximian.com>
13904
13905         * expression.cs (Invocation.EmitCall): Don't use
13906         `method.CallingConvention == CallingConventions.VarArgs' since the
13907         method could also have `CallingConventions.HasThis'.
13908
13909 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
13910
13911         * class.cs (Event.GetSignatureForError): Implemented.
13912         Fixed crash in error test cs3010.cs
13913
13914 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
13915
13916         * cs-tokenizer.cs: Change the way we track __arglist to be
13917         consistent with the other keywords.
13918
13919 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
13920
13921         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
13922         tomorrow.
13923
13924 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
13925
13926         * codegen.cs: Check that all referenced assemblies have a strongname
13927         before strongnaming the compiled assembly. If not report error CS1577.
13928         Fix bug #56563. Patch by Jackson Harper.
13929         * typemanager.cs: Added a method to return all referenced assemblies.
13930         Fix bug #56563. Patch by Jackson Harper.
13931
13932 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
13933
13934         * class.cs:
13935         (Method.ApplyAttributeBuilder): Moved and added conditional
13936         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
13937
13938         * delegate.cs:
13939         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
13940
13941 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
13942
13943         Fixed #59640
13944         * class.cs: (EventField.attribute_targets): Changed default target.
13945
13946 2004-06-08  Martin Baulig  <martin@ximian.com>
13947
13948         * expression.cs (Invocation.EmitCall): Enable varargs methods.
13949
13950 2004-06-08  Martin Baulig  <martin@ximian.com>
13951
13952         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
13953
13954 2004-06-07  Martin Baulig  <martin@ximian.com>
13955
13956         Added support for varargs methods.
13957
13958         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
13959         keyword.
13960
13961         * cs-parser.jay: Added support for `__arglist'.
13962
13963         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
13964
13965         * expression.cs (Argument.AType): Added `ArgList'.
13966         (Invocation): Added support for varargs methods.
13967         (ArglistAccess): New public class.
13968         (Arglist): New public class.
13969
13970         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
13971
13972         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
13973         a method's top-level block if the method has varargs.
13974
13975         * support.cs (ReflectionParameters, InternalParameters): Added
13976         support for varargs methods.    
13977
13978 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
13979
13980         * class.cs: Provide location in indexer error report.
13981
13982         * driver.cs: Use standard names.
13983
13984         * namespace.cs: Catch the use of using after a namespace has been
13985         declared also on using aliases.
13986
13987 2004-06-03  Raja R Harinath  <rharinath@novell.com>
13988
13989         Bug #50820.
13990         * typemanager.cs (closure_private_ok, closure_invocation_type)
13991         (closure_qualifier_type, closure_invocation_assembly)
13992         (FilterWithClosure): Move to ...
13993         (Closure): New internal nested class.
13994         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
13995         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
13996         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
13997         (MemberLookup, MemberLookupFailed): Use it.
13998         * expression.cs (New.DoResolve): Treat the lookup for the
13999         constructor as being qualified by the 'new'ed type.
14000         (Indexers.GetIndexersForTypeOrInterface): Update.
14001
14002 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
14003
14004         * attribute.cs
14005         (GetConditionalAttributeValue): New method. Returns
14006         condition of ConditionalAttribute.
14007         (SearchMulti): New method.  Returns all attributes of type 't'.
14008         Use it when attribute is AllowMultiple = true.
14009         (IsConditionalMethodExcluded): New method.
14010
14011         * class.cs
14012         (Method.IsExcluded): Implemented. Returns true if method has conditional
14013         attribute and the conditions is not defined (method is excluded).
14014         (IMethodData): Extended interface for ConditionalAttribute support.
14015         (PropertyMethod.IsExcluded): Implemented.
14016
14017         * decl.cs
14018         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
14019
14020         * expression.cs
14021         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
14022         on the method.
14023
14024 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
14025
14026         * expression.cs (ArrayCreationExpression): Make this just an
14027         `expression'. It can't be a statement, so the code here was
14028         dead.
14029
14030 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
14031
14032         Fixed #59072
14033         * typemanager.cs (GetFullNameSignature): New method for
14034         MethodBase types.
14035
14036 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
14037
14038         Fixed #56452
14039         * class.cs (MemberBase.GetSignatureForError): New virtual method.
14040         Use this method when MethodBuilder is null.
14041         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
14042         Added test for error CS0626 (MONO reports error for this situation).
14043         (IMethodData.GetSignatureForError): Extended interface.
14044
14045 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
14046
14047         * attribute.cs
14048         (AttributeTester.GetObsoleteAttribute): Returns instance of
14049         ObsoleteAttribute when type is obsolete.
14050
14051         * class.cs
14052         (TypeContainer.VerifyObsoleteAttribute): Override.
14053         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
14054         (MethodCode.VerifyObsoleteAttribute): Override.
14055         (MemberBase.VerifyObsoleteAttribute): Override.
14056
14057         * decl.cs
14058         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
14059         and report proper error.
14060
14061         *delegate.cs
14062         Delegate.VerifyObsoleteAttribute): Override.
14063
14064         * ecore.cs
14065         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
14066         and report proper error.
14067         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
14068
14069         * enum.cs
14070         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
14071         and enum member.
14072
14073         * expression.cs
14074         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
14075         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
14076         Added test for ObsoleteAttribute.
14077
14078         * statement.cs
14079         (Catch): Derived from Statement.
14080
14081 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
14082  
14083         Fixed bug #59071 & cs0160.cs
14084  
14085         * statement.cs (Try.Resolve): Check here whether order of catch
14086         clauses matches their dependencies.
14087
14088 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
14089
14090         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
14091         caused a regression: #59343.  Referencing nested classes from an
14092         assembly stopped working.
14093
14094 2004-05-31  Martin Baulig  <martin@ximian.com>
14095
14096         MCS is now frozen for beta 2.
14097
14098 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
14099
14100         * convert.cs: add a trivial cache for overload operator resolution.
14101
14102 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
14103
14104         * decl.cs: If possible, use lookuptypedirect here. We can only do
14105         this if there is no `.' after the namespace. Avoids using
14106         LookupType, which does lots of slow processing.
14107         (FindNestedType) New method, does what it says :-).
14108         * namespace.cs: use LookupTypeDirect.
14109         * rootcontext.cs: use membercache, if possible.
14110         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
14111
14112 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
14113
14114         * expression.cs:
14115         According to the spec, 
14116
14117         In a member access of the form E.I, if E is a single identifier,
14118         and if the meaning of E as a simple-name (§7.5.2) is a constant,
14119         field, property, localvariable, or parameter with the same type as
14120         the meaning of E as a type-name (§3.8), then both possible
14121         meanings of E are permitted.
14122
14123         We did not check that E as a simple-name had the same type as E as
14124         a type name.
14125
14126         This trivial check gives us 5-7% on bootstrap time.
14127
14128 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
14129
14130         * expression.cs (Invocation.OverloadResolve): Avoid the
14131         use of hashtables and boxing here by allocating on demand.
14132
14133 2004-05-30  Martin Baulig  <martin@ximian.com>
14134
14135         * rootcontext.cs (RootContext.LookupType): Don't cache things if
14136         we're doing a silent lookup.  Don't try to lookup nested types in
14137         TypeManager.object_type (thanks to Ben Maurer).
14138
14139 2004-05-30  Martin Baulig  <martin@ximian.com>
14140
14141         Committing a patch from Ben Maurer.
14142
14143         * rootcontext.cs (RootContext.LookupType): Cache negative results.
14144
14145 2004-05-29  Martin Baulig  <martin@ximian.com>
14146
14147         * class.cs (IMethodData.ShouldIgnore): New method.
14148
14149         * typemanager.cs (TypeManager.MethodFlags): Don't take a
14150         `Location' argument, we don't need it anywhere.  Use
14151         `IMethodData.ShouldIgnore ()' instead of
14152         `MethodData.GetMethodFlags ()'.
14153         (TypeManager.AddMethod): Removed.
14154         (TypeManager.AddMethod2): Renamed to AddMethod.
14155
14156 2004-05-29  Martin Baulig  <martin@ximian.com>
14157
14158         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
14159
14160         * convert.cs (Convert.ImplicitReferenceConversion): If we're
14161         converting from a class type S to an interface type and we already
14162         have an object on the stack, don't box it again.  Fixes #52578.
14163
14164 2004-05-29  Martin Baulig  <martin@ximian.com>
14165
14166         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
14167         Added support for `params' parameters.  Fixes #59267.
14168
14169 2004-05-29  Martin Baulig  <martin@ximian.com>
14170
14171         * literal.cs (NullPointer): Provide a private .ctor which sets
14172         `type' to TypeManager.object_type.  Fixes #59048.
14173
14174 2004-05-29  Martin Baulig  <martin@ximian.com>
14175
14176         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
14177         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
14178
14179         * ecore.cs (EventExpr.instance_expr): Make the field private.
14180
14181 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
14182
14183         Fixed bug #50080 & cs0214-2.cs
14184         * expression.cs (Cast.DoResolve): Check unsafe context here.
14185         
14186         * statement.cs (Resolve.DoResolve): Likewise.
14187
14188 2004-05-26  Martin Baulig  <martin@ximian.com>
14189
14190         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
14191
14192         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
14193         (RootContext.LookupType): Pass down the `silent' flag.
14194
14195 2004-05-25  Martin Baulig  <martin@ximian.com>
14196
14197         * expression.cs
14198         (MethodGroupExpr.IdenticalTypeName): New public property.
14199         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
14200         expression actually refers to a type.
14201
14202 2004-05-25  Martin Baulig  <martin@ximian.com>
14203
14204         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
14205         for #56176 and made it actually work.
14206
14207 2004-05-25  Martin Baulig  <martin@ximian.com>
14208
14209         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
14210         (FieldExpr, PropertyExpr): Override and implement
14211         CacheTemporaries.  Fixes #52279.
14212
14213 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
14214
14215         * location.cs: In the new compiler listing a file twice is a
14216         warning, not an error.
14217
14218 2004-05-24  Martin Baulig  <martin@ximian.com>
14219
14220         * enum.cs (Enum.DefineType): For the `BaseType' to be a
14221         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
14222
14223 2004-05-24  Martin Baulig  <martin@ximian.com>
14224
14225         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
14226         walking the `using' list.  Fixes #53921.
14227
14228 2004-05-24  Martin Baulig  <martin@ximian.com>
14229
14230         * const.cs (Const.LookupConstantValue): Added support for
14231         EmptyCast's; fixes #55251.
14232
14233 2004-05-24  Martin Baulig  <martin@ximian.com>
14234
14235         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
14236         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
14237         which does the CS0135 check.  The reason is that we first need to
14238         check whether the variable actually exists.
14239
14240 2004-05-24  Martin Baulig  <martin@ximian.com>
14241
14242         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
14243         than RootContext.LookupType() to find the explicit interface
14244         type.  Fixes #58584.
14245
14246 2004-05-24  Raja R Harinath  <rharinath@novell.com>
14247
14248         * Makefile: Simplify.  Use executable.make.
14249         * mcs.exe.sources: New file.  List of sources of mcs.exe.
14250
14251 2004-05-24  Anders Carlsson  <andersca@gnome.org>
14252
14253         * decl.cs:
14254         * enum.cs:
14255         Use the invariant culture when doing String.Compare for CLS case
14256         sensitivity.
14257         
14258 2004-05-23  Martin Baulig  <martin@ximian.com>
14259
14260         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
14261         don't have any dots.  Fixes #52622, added cs0246-8.cs.
14262
14263         * namespace.cs (NamespaceEntry.Lookup): Likewise.
14264         
14265 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
14266
14267         * class.cs (MemberBase.Define): Reuse MemberType member for 
14268         resolved type. Other methods can use it too.
14269
14270 2004-05-23  Martin Baulig  <martin@ximian.com>
14271
14272         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
14273         the variable also exists in the current block (otherwise, we need
14274         to report a CS0103).  Fixes #58670.
14275
14276 2004-05-23  Martin Baulig  <martin@ximian.com>
14277
14278         * flowanalysis.cs (Reachability.Reachable): Compute this
14279         on-the-fly rather than storing it as a field.
14280
14281 2004-05-23  Martin Baulig  <martin@ximian.com>
14282
14283         * flowanalysis.cs (Reachability.And): Manually compute the
14284         resulting `barrier' from the reachability.      
14285        
14286 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
14287
14288         Fix bug #57835
14289         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
14290         instance of ObsoleteAttribute when symbol is obsolete.
14291
14292         * class.cs
14293         (IMethodData): Extended interface for ObsoleteAttribute support.
14294
14295 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
14296
14297         * attribute.cs: Fix bug #55970
14298
14299 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
14300
14301         Fix bug #52705
14302         * attribute.cs
14303         (GetObsoleteAttribute): New method. Creates the instance of
14304         ObsoleteAttribute.
14305         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
14306         ObsoleteAttribute when member is obsolete.
14307         (AttributeTester.Report_ObsoleteMessage): Common method for
14308         Obsolete error/warning reporting.
14309
14310         * class.cs
14311         (TypeContainer.base_classs_type): New member for storing parent type.
14312
14313         * decl.cs
14314         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
14315         for this MemberCore.
14316
14317 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
14318
14319         * attribute.cs, const.cs: Fix bug #58590
14320
14321 2004-05-21  Martin Baulig  <martin@ximian.com>
14322
14323         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
14324         out parameters if the end of the method is unreachable.  Fixes
14325         #58098. 
14326
14327 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
14328
14329         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
14330         Hari was right, why extra method.
14331
14332 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
14333
14334         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
14335
14336 2004-05-20  Martin Baulig  <martin@ximian.com>
14337
14338         Merged this back from gmcs to keep the differences to a minumum.
14339
14340         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
14341         instead of a Declspace.
14342         (Attribute.ResolveType): Likewise.
14343         (Attributes.Search): Likewise.
14344         (Attributes.Contains): Likewise.
14345         (Attributes.GetClsCompliantAttribute): Likewise.
14346
14347         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
14348         argument.
14349         (MethodData.ApplyAttributes): Take an EmitContext instead of a
14350         DeclSpace.
14351
14352 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
14353
14354         Fix bug #58688 (MCS does not report error when the same attribute
14355         is assigned twice)
14356
14357         * attribute.cs (Attribute.Emit): Distinction between null and default.
14358
14359 2004-05-19  Raja R Harinath  <rharinath@novell.com>
14360
14361         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
14362         of a top-level attribute without an attribute target.
14363         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
14364         Make non-static.
14365         (Attribute.Conditional_GetConditionName), 
14366         (Attribute.Obsolete_GetObsoleteMessage): Update.
14367         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
14368         part of ScanForIndexerName.
14369         (Attribute.CanIgnoreInvalidAttribute): New function.
14370         (Attribute.ScanForIndexerName): Move to ...
14371         (Attributes.ScanForIndexerName): ... here.
14372         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
14373         (Attributes.Search): New internal variant that can choose not to
14374         complain if types aren't resolved.  The original signature now
14375         complains.
14376         (Attributes.GetClsCompliantAttribute): Use internal variant, with
14377         complaints suppressed.
14378         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
14379         only if it not useful.
14380         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
14381         top-level for attributes that are shared between the assembly
14382         and a top-level class.
14383         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
14384         * class.cs: Update to reflect changes.
14385         (DefineIndexers): Fuse loops.
14386         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
14387         a couple more variants of attribute names.
14388
14389 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
14390
14391         Fix bug #52585 (Implemented explicit attribute declaration)
14392
14393         * attribute.cs:
14394         (Attributable.ValidAttributeTargets): New abstract method. It gets
14395         list of valid attribute targets for explicit target declaration.
14396         (Attribute.Target): It holds target itself.
14397         (AttributeSection): Removed.
14398         (Attribute.CheckTargets): New method. It checks whether attribute
14399         target is valid for the current element.
14400
14401         * class.cs:
14402         (EventProperty): New class. For events that are declared like
14403         property (with add and remove accessors).
14404         (EventField): New class. For events that are declared like field.
14405         class.cs
14406
14407         * cs-parser.jay: Implemented explicit attribute target declaration.
14408
14409         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
14410         Override ValidAttributeTargets.
14411
14412         * parameter.cs:
14413         (ReturnParameter): Class for applying custom attributes on 
14414         the return type.
14415         (ParameterAtribute): New class. Class for applying custom
14416         attributes on the parameter type.
14417
14418 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
14419
14420         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
14421         definitions. 
14422
14423         (Method): Allow UNSAFE here.
14424
14425         * modifiers.cs: Support unsafe reporting.
14426
14427 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
14428
14429         * decl.cs: Fix bug #58478.
14430
14431 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14432
14433         * statement.cs: When checking for unreachable code on an EmptyStatement,
14434         set the location. Fixes bug #58488.
14435
14436 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
14437
14438         * driver.cs: Add -pkg handling.
14439
14440         From Gonzalo: UseShelLExecute=false
14441
14442 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
14443
14444         * attribute.cs:
14445         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
14446         for attribute.
14447         (Attribute.IsClsCompliaceRequired): Moved to base for better
14448         accesibility.
14449         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
14450         when attribute is AttributeUsageAttribute.
14451         (Attribute.GetValidTargets): Simplified.
14452         (Attribute.GetAttributeUsage): New method returns AttributeUsage
14453         attribute for this type.
14454         (Attribute.ApplyAttributes): Method renamed to Emit and make
14455         non-static.
14456         (GlobalAttributeSection): New class for special handling of global
14457         attributes (assembly, module).
14458         (AttributeSection.Emit): New method.
14459
14460         * class.cs: Implemented Attributable abstract methods.
14461         (MethodCore.LabelParameters): Moved to Parameter class.
14462         (Accessor): Is back simple class.
14463         (PropertyMethod): Implemented Attributable abstract class.
14464         (DelegateMethod): Implemented Attributable abstract class.
14465         (Event): New constructor for disctintion between normal Event
14466         and Event with accessors.
14467
14468         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
14469
14470         * codegen.cs, const.cs, decl.cs, delegate.cs:
14471         (CommonAssemblyModulClass): Implemented Attributable abstract class
14472         and simplified.
14473
14474         * enum.cs: Implement IAttributeSupport interface.
14475         (EnumMember): New class for emum members. Implemented Attributable
14476         abstract class
14477
14478         * parameter.cs:
14479         (ParameterBase): Is abstract.
14480         (ReturnParameter): New class for easier [return:] attribute handling.
14481
14482         * typemanager.cs: Removed builder_to_attr.
14483
14484 2004-05-11  Raja R Harinath  <rharinath@novell.com>
14485
14486         Fix bug #57151.
14487         * attribute.cs (Attribute.GetPositionalValue): New function.
14488         * class.cs (TypeContainer.VerifyMembers): New function.
14489         (TypeContainer.Emit): Use it.
14490         (ClassOrStruct): New base class for Class and Struct.
14491         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
14492         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
14493         class.
14494         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
14495         then each non-static field should have a FieldOffset attribute.
14496         Otherwise, none of the fields should have a FieldOffset attribute.
14497         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
14498         and FieldOffset attributes.
14499         * typemanager.cs (TypeManager.struct_layout_attribute_type)
14500         (TypeManager.field_offset_attribute_type): New core types.
14501         (TypeManager.InitCoreTypes): Initialize them.
14502
14503 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
14504
14505         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
14506         Return correct type.
14507         From bug #58270.
14508
14509 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
14510
14511         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
14512         be implicitly converted to ulong.
14513         
14514         * expression.cs: The logic for allowing operator &, | and ^ worked
14515         was wrong, it worked before because we did not report an error in
14516         an else branch.  Fixes 57895.
14517
14518         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
14519         allow volatile fields to be reference types.
14520
14521 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
14522
14523         * driver.cs: Add support for /debug-
14524
14525 2004-05-07  Raja R Harinath  <rharinath@novell.com>
14526
14527         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
14528         Add a 'complain' parameter to silence errors.
14529         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
14530         silently overlooked type-resolutions.
14531         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
14532         to reflect changes.
14533         (Attributes.Search): New function.
14534         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
14535         (Attributes.GetAttributeFullName): Remove hack.
14536         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
14537         Update to reflect changes.
14538         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
14539         Use Attributes.Search instead of nested loops.
14540
14541 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
14542
14543         * decl.cs:
14544         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
14545         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
14546         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
14547
14548         * report.cs: (Report.Warning): Renamed to Warning_T because of
14549         parameter collision.
14550
14551 2004-05-05  Raja R Harinath  <rharinath@novell.com>
14552
14553         * expression.cs (MemberAccess.ResolveMemberAccess):
14554         Exit with non-zero status after Report.Error.
14555         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
14556         Likewise.
14557         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
14558
14559 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
14560
14561         * support.cs: Don't hang when the file is empty.
14562
14563 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
14564
14565         * support.cs: In SeekableStreamReader, compute the preamble size of the
14566           underlying stream. Position changes should take into account that initial
14567           count of bytes.
14568
14569 2004-05-03  Todd Berman  <tberman@sevenl.net>
14570
14571         * driver.cs: remove unused GetSysVersion function.
14572
14573 2004-05-03  Todd Berman  <tberman@sevenl.net>
14574
14575         * driver.cs: Remove the hack from saturday, as well as the hack
14576         from jackson (LoadAssemblyFromGac), also adds the CWD to the
14577         link_paths to get that bit proper.
14578
14579 2004-05-01  Todd Berman  <tberman@sevenl.net>
14580
14581         * driver.cs: Try a LoadFrom before a Load, this checks the current
14582         path. This is currently a bug in mono that is be fixed, however, this
14583         provides a workaround for now. This will be removed when the bug
14584         is fixed.
14585
14586 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
14587
14588         * CryptoConvert.cs: Updated to latest version. Fix issue with 
14589         incomplete key pairs (#57941).
14590
14591 2004-05-01  Todd Berman  <tberman@sevenl.net>
14592
14593         * driver.cs: Remove '.' from path_chars, now System.* loads properly
14594         from the GAC
14595
14596 2004-04-30  Jackson Harper  <jackson@ximian.com>
14597
14598         * codegen.cs: Open keys readonly.
14599         
14600 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14601
14602         * typemanager.cs: don't report cyclic struct layout when a struct
14603         contains 2 or more fields of the same type. Failed for Pango.AttrShape
14604         which has 2 Pango.Rectangle fields.
14605
14606 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
14607
14608         * expression.cs: Handle IntPtr comparisons with IL code
14609         rather than a method call.
14610
14611 2004-04-29  Martin Baulig  <martin@ximian.com>
14612
14613         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
14614         the list of PropertyInfo's in class hierarchy and find the
14615         accessor.  Fixes #56013.
14616
14617 2004-04-29  Martin Baulig  <martin@ximian.com>
14618
14619         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
14620
14621 2004-04-29  Martin Baulig  <martin@ximian.com>
14622
14623         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
14624
14625         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
14626
14627 2004-04-29  Martin Baulig  <martin@ximian.com>
14628
14629         * class.cs (ConstructorInitializer.Resolve): Check whether the
14630         parent .ctor is accessible.  Fixes #52146.
14631
14632 2004-04-29  Martin Baulig  <martin@ximian.com>
14633
14634         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
14635
14636         * statement.cs (Using.EmitLocalVariableDecls): Use
14637         TypeManager.idisposable_type, not typeof (IDisposable).
14638         (Foreach.EmitCollectionForeach): Added support for valuetypes.
14639
14640 2004-04-29  Martin Baulig  <martin@ximian.com>
14641
14642         * class.cs (Event.Define): Don't emit the field and don't set
14643         RTSpecialName and SpecialName for events on interfaces.  Fixes
14644         #57703. 
14645
14646 2004-04-29  Raja R Harinath  <rharinath@novell.com>
14647
14648         Refactor Attribute.ApplyAttributes.
14649         * attribute.cs (Attributable): New base class for objects that can
14650         have Attributes applied on them.
14651         (Attribute): Make AttributeUsage fields public.
14652         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
14653         (Attribute.IsInternalCall): New property.
14654         (Attribute.UsageAttr): Convert to a public read-only property.
14655         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
14656         (Attribute.ResolveType, Attribute.Resolve)
14657         (Attribute.ScanForIndexerName): Update to reflect changes.
14658         (Attribute.CheckAttributeTarget): Re-format.
14659         (Attribute.ApplyAttributes): Refactor, to various
14660         Attributable.ApplyAttributeBuilder methods.
14661         * decl.cs (MemberCore): Make Attributable.
14662         * class.cs (Accessor): Make Attributable.
14663         (MethodData.ApplyAttributes): Use proper attribute types, not
14664         attribute names.
14665         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
14666         (TypeContainer.ApplyAttributeBuilder)
14667         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
14668         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
14669         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
14670         (Operator.ApplyAttributeBuilder): New factored-out methods.
14671         * const.cs (Const.ApplyAttributeBuilder): Likewise.
14672         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
14673         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
14674         * parameter.cs (ParameterBase): New Attributable base class
14675         that can also represent Return types.
14676         (Parameter): Update to the changes.
14677
14678 2004-04-29  Jackson Harper  <jackson@ximian.com>
14679
14680         * driver.cs: Prefer the corlib system version when looking for
14681         assemblies in the GAC. This is still a hack, but its a better hack
14682         now.
14683         
14684 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
14685
14686         * decl.cs, enum.cs: Improved error 3005 reporting.
14687   
14688         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
14689         (related_symbols): New private member for list of symbols
14690         related to reported error/warning.
14691         
14692         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
14693
14694 2004-04-29  Martin Baulig  <martin@ximian.com>
14695
14696         * ecore.cs (Expression.Constantify): If we're an enum and
14697         TypeManager.TypeToCoreType() doesn't give us another type, use
14698         t.UnderlyingSystemType.  Fixes #56178.  
14699
14700 2004-04-29  Martin Baulig  <martin@ximian.com>
14701
14702         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
14703         interfaces and for each interface, only add members directly
14704         declared in that interface.  Fixes #53255.
14705
14706 2004-04-28  Martin Baulig  <martin@ximian.com>
14707
14708         * expression.cs (ConditionalLogicalOperator): Use a temporary
14709         variable for `left' to avoid that we evaluate it more than once;
14710         bug #52588.
14711
14712 2004-04-28  Martin Baulig  <martin@ximian.com>
14713
14714         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
14715         `void[]' (CS1547).
14716
14717 2004-04-28  Martin Baulig  <martin@ximian.com>
14718
14719         * statement.cs (LocalInfo.Resolve): Check whether the type is not
14720         void (CS1547).
14721
14722         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
14723         whether the type is not void (CS1547).
14724
14725 2004-04-28  Martin Baulig  <martin@ximian.com>
14726
14727         * expression.cs (Unary.DoResolveLValue): Override this and report
14728         CS0131 for anything but Operator.Indirection.
14729
14730 2004-04-28  Martin Baulig  <martin@ximian.com>
14731
14732         Committing a patch from Ben Maurer; see bug #50820.
14733
14734         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
14735         check for classes.
14736
14737         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
14738         classes.        
14739
14740 2004-04-28  Martin Baulig  <martin@ximian.com>
14741
14742         Committing a patch from Ben Maurer; see bug #50820.
14743
14744         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
14745         check for classes.
14746
14747         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
14748         classes.        
14749
14750 2004-04-28  Martin Baulig  <martin@ximian.com>
14751
14752         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
14753         (Block.AddLabel): Call DoLookupLabel() to only search in the
14754         current block.
14755
14756 2004-04-28  Martin Baulig  <martin@ximian.com>
14757
14758         * cfold.cs (ConstantFold.BinaryFold): Added special support for
14759         comparing StringConstants and NullLiterals in Equality and Inequality.
14760
14761 2004-04-28  Jackson Harper  <jackson@ximian.com>
14762
14763         * driver.cs: Attempt to load referenced assemblies from the
14764         GAC. This is the quick and dirty version of this method that
14765         doesnt take into account versions and just takes the first
14766         canidate found. Will be good enough for now as we will not have more
14767         then one version installed into the GAC until I update this method.
14768
14769 2004-04-28  Martin Baulig  <martin@ximian.com>
14770
14771         * typemanager.cs (TypeManager.CheckStructCycles): New public
14772         static method to check for cycles in the struct layout.
14773
14774         * rootcontext.cs (RootContext.PopulateTypes): Call
14775         TypeManager.CheckStructCycles() for each TypeContainer.
14776         [Note: We only need to visit each type once.]
14777
14778 2004-04-28  Martin Baulig  <martin@ximian.com>
14779
14780         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
14781
14782         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
14783         success and added `out object value'.  Use a `bool resolved' field
14784         to check whether we've already been called rather than
14785         `ConstantValue != null' since this breaks for NullLiterals.
14786
14787 2004-04-28  Raja R Harinath  <rharinath@novell.com>
14788
14789         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
14790         setting of this flag, since the 'set' method may be non-public.
14791
14792 2004-04-28  Raja R Harinath  <rharinath@novell.com>
14793
14794         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
14795         check on current_vector.Block.
14796
14797 2004-04-27  Martin Baulig  <martin@ximian.com>
14798
14799         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
14800         a field initializer.  Fixes #56459.
14801
14802 2004-04-27  Martin Baulig  <martin@ximian.com>
14803
14804         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
14805         we're not attempting to use an indexer.  Fixes #52154.
14806
14807 2004-04-27  Martin Baulig  <martin@ximian.com>
14808
14809         * statement.cs (Return): Don't create a return label if we don't
14810         need it; reverts my change from January 20th.  Thanks to Ben
14811         Maurer for this.
14812
14813 2004-04-27  Martin Baulig  <martin@ximian.com>
14814
14815         According to the spec, `goto' can only leave a nested scope, but
14816         never enter it.
14817
14818         * statement.cs (Block.LookupLabel): Only lookup in the current
14819         block, don't recurse into parent or child blocks.
14820         (Block.AddLabel): Check in parent and child blocks, report
14821         CS0140/CS0158 if we find a duplicate.
14822         (Block): Removed this indexer for label lookups.
14823         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
14824         this already does the error reporting for us.
14825
14826         * flowanalysis.cs
14827         (FlowBranching.UsageVector.Block): New public variable; may be null.
14828         (FlowBranching.CreateSibling): Added `Block' argument.
14829         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
14830         label for the target of a `goto' and check whether we're not
14831         leaving a `finally'.
14832
14833 2004-04-27  Martin Baulig  <martin@ximian.com>
14834
14835         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
14836         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
14837         just for returns).
14838
14839 2004-04-27  Martin Baulig  <martin@ximian.com>
14840
14841         * statement.cs (Block.AddLabel): Also check for implicit blocks
14842         and added a CS0158 check.
14843
14844 2004-04-27  Martin Baulig  <martin@ximian.com>
14845
14846         * flowanalysis.cs (FlowBranchingLoop): New class.
14847         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
14848         UsageVector's instead of an ArrayList.
14849         (FlowBranching.Label): Likewise.
14850         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
14851         (FlowBranching.AddBreakVector): New method.
14852
14853 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
14854
14855         * attribute.cs: Small regression fix: only convert the type if we
14856         the type is different, fixes System.Drawing build.
14857
14858 2004-04-27  Martin Baulig  <martin@ximian.com>
14859
14860         * attribute.cs (Attribute.Resolve): If we have a constant value
14861         for a named field or property, implicity convert it to the correct
14862         type.
14863
14864 2004-04-27  Raja R Harinath  <rharinath@novell.com>
14865
14866         * statement.cs (Block.Block): Implicit blocks share
14867         'child_variable_names' fields with parent blocks.
14868         (Block.AddChildVariableNames): Remove.
14869         (Block.AddVariable): Mark variable as "used by a child block" in
14870         every surrounding block.
14871         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
14872         been used in a child block, complain about violation of "Invariant
14873         meaning in blocks" rule.
14874         * cs-parser.jay (declare_local_variables): Don't use
14875         AddChildVariableNames.
14876         (foreach_statement): Don't create an implicit block: 'foreach'
14877         introduces a scope.
14878
14879 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
14880
14881         * convert.cs (ImplicitNumericConversion): 0 is also positive when
14882         converting from 0L to ulong.  Fixes 57522.
14883
14884 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
14885
14886         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
14887         derived class hides via 'new' keyword field from base class (test-242.cs).
14888         TODO: Handle this in the more general way.
14889         
14890         * class.cs (CheckBase): Ditto.
14891
14892 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
14893
14894         * decl.cs (caching_flags): New member for storing cached values
14895         as bit flags.
14896         (MemberCore.Flags): New enum where bit flags for caching_flags
14897         are defined.
14898         (MemberCore.cls_compliance): Moved to caching_flags.
14899         (DeclSpace.Created): Moved to caching_flags.
14900
14901         * class.cs: Use caching_flags instead of DeclSpace.Created
14902         
14903 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
14904
14905         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
14906         if we are only a derived class, not a nested class.
14907
14908         * typemanager.cs: Same as above, but do this at the MemberLookup
14909         level (used by field and methods, properties are handled in
14910         PropertyExpr).   Allow for the qualified access if we are a nested
14911         method. 
14912
14913 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
14914
14915         * class.cs: Refactoring.
14916         (IMethodData): New inteface; Holds links to parent members
14917         to avoid member duplication (reduced memory allocation).
14918         (Method): Implemented IMethodData interface.
14919         (PropertyBase): New inner classes for get/set methods.
14920         (PropertyBase.PropertyMethod): Implemented IMethodData interface
14921         (Event): New inner classes for add/remove methods.
14922         (Event.DelegateMethod): Implemented IMethodData interface.
14923
14924         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
14925         EmitContext (related to class.cs refactoring).
14926
14927 2004-04-21  Raja R Harinath  <rharinath@novell.com>
14928
14929         * delegate.cs (Delegate.VerifyApplicability): If the number of
14930         arguments are the same as the number of parameters, first try to
14931         verify applicability ignoring  any 'params' modifier on the last
14932         parameter.
14933         Fixes #56442.
14934
14935 2004-04-16  Raja R Harinath  <rharinath@novell.com>
14936
14937         * class.cs (TypeContainer.AddIndexer): Use
14938         'ExplicitInterfaceName' to determine if interface name was
14939         explicitly specified.  'InterfaceType' is not initialized at this time.
14940         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
14941         Indexers array is already in the required order.  Initialize
14942         'IndexerName' only if there are normal indexers.
14943         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
14944         (TypeContainer.Emit): Emit DefaultMember attribute only if
14945         IndexerName is initialized.
14946         Fixes #56300.
14947
14948 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
14949
14950         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
14951         Fixes #57007
14952
14953 2004-04-15  Raja R Harinath  <rharinath@novell.com>
14954
14955         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
14956         attributes.
14957         Fix for #56456.
14958
14959         * attribute.cs (Attribute.Resolve): Check for duplicate named
14960         attributes.
14961         Fix for #56463.
14962
14963 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
14964
14965         * iterators.cs (MarkYield): track whether we are in an exception,
14966         and generate code accordingly.  Use a temporary value to store the
14967         result for our state.
14968
14969         I had ignored a bit the interaction of try/catch with iterators
14970         since their behavior was not entirely obvious, but now it is
14971         possible to verify that our behavior is the same as MS .NET 2.0
14972
14973         Fixes 54814
14974
14975 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
14976
14977         * iterators.cs: Avoid creating temporaries if there is no work to
14978         do. 
14979
14980         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
14981         Enumerations, use TypeManager.EnumToUnderlying and call
14982         recursively. 
14983
14984         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
14985         bug #57013
14986
14987         (This.Emit): Use EmitContext.EmitThis to emit our
14988         instance variable.
14989
14990         (This.EmitAssign): Ditto.
14991
14992         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
14993         codepaths, we will move all the functionality into
14994         Mono.CSharp.This 
14995
14996         (FieldExpr.EmitAssign): Ditto.
14997
14998         This fixes several hidden bugs that I uncovered while doing a code
14999         review of this today.
15000
15001         * codegen.cs (EmitThis): reworked so the semantics are more clear
15002         and also support value types "this" instances.
15003
15004         * iterators.cs: Changed so that for iterators in value types, we
15005         do not pass the value type as a parameter.  
15006
15007         Initialization of the enumerator helpers is now done in the caller
15008         instead of passing the parameters to the constructors and having
15009         the constructor set the fields.
15010
15011         The fields have now `assembly' visibility instead of private.
15012
15013 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
15014
15015         * expression.cs (Argument.Resolve): Check if fields passed as ref
15016         or out are contained in a MarshalByRefObject.
15017
15018         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
15019         another compiler type.
15020
15021 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
15022
15023         * class.cs (Indexer.Define): use the new name checking method.
15024         Also, return false on an error.
15025         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
15026         (is_identifier_[start/part]_character): make static.
15027
15028 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
15029
15030         * expression.cs (Binary.ResolveOperator): Do no append strings
15031         twice: since we can be invoked more than once (array evaluation)
15032         on the same concatenation, take care of this here.  Based on a fix
15033         from Ben (bug #56454)
15034
15035 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
15036
15037         * codegen.cs: Fix another case where CS1548 must be reported (when 
15038         delay-sign isn't specified and no private is available #56564). Fix
15039         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
15040         error when MCS is used on the MS runtime and we need to delay-sign 
15041         (which seems unsupported by AssemblyBuilder - see #56621).
15042
15043 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
15044
15045         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
15046         (TypeManager.ComputeNamespaces): Faster implementation for
15047         Microsoft runtime.
15048
15049         * compiler.csproj: Updated AssemblyName to mcs.
15050
15051 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
15052
15053         * rootcontext.cs: Add new types to the boot resolution.
15054
15055         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
15056         MulticastDelegate is not allowed.
15057
15058         * typemanager.cs: Add new types to lookup: System.TypedReference
15059         and ArgIterator.
15060
15061         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
15062         check for TypedReference or ArgIterator, they are not allowed. 
15063
15064         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
15065         makes us properly catch 1510 in some conditions (see bug 56016 for
15066         details). 
15067
15068 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
15069
15070         * CryptoConvert.cs: update from corlib version
15071         with endian fixes.
15072
15073 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
15074
15075         * class.cs (Indexer.Define): Check indexername declaration
15076
15077 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
15078
15079         * attribute.cs (IsClsCompliant): Fixed problem with handling
15080         all three states (compliant, not-compliant, undetected).
15081
15082 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
15083
15084         * attribute.cs (Attribute): Location is now public.
15085         (Resolve): Store resolved arguments (pos_values) in attribute class.
15086         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
15087         (GetClsCompliantAttributeValue): New method that gets
15088         CLSCompliantAttribute value.
15089         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
15090         if exists else null.
15091         (AttributeTester): New class for CLS-Compliant verification routines.
15092
15093         * class.cs (Emit): Add CLS-Compliant verification.
15094         (Method.GetSignatureForError): Implemented.
15095         (Constructor.GetSignatureForError): Implemented
15096         (Constructor.HasCompliantArgs): Returns if constructor has
15097         CLS-Compliant arguments.
15098         (Constructor.Emit): Override.
15099         (Construcor.IsIdentifierClsCompliant): New method; For constructors
15100         is needed to test only parameters.
15101         (FieldBase.GetSignatureForError): Implemented.
15102         (TypeContainer): New member for storing base interfaces.
15103         (TypeContainer.FindMembers): Search in base interfaces too.
15104
15105         * codegen.cs (GetClsComplianceAttribute): New method that gets
15106         assembly or module CLSCompliantAttribute value.
15107         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
15108         for assembly.
15109         (ModuleClass.Emit): Add error 3012 test.
15110
15111         * const.cs (Emit): Override and call base for CLS-Compliant tests.
15112
15113         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
15114         state for all decl types.
15115         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
15116         if CLS-Compliant tests are required.
15117         (IsClsCompliaceRequired): New method. Analyze whether code
15118         must be CLS-Compliant.
15119         (IsExposedFromAssembly): New method. Returns true when MemberCore
15120         is exposed from assembly.
15121         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
15122         value or gets cached value.
15123         (HasClsCompliantAttribute): New method. Returns true if MemberCore
15124         is explicitly marked with CLSCompliantAttribute.
15125         (IsIdentifierClsCompliant): New abstract method. This method is
15126         used to testing error 3005.
15127         (IsIdentifierAndParamClsCompliant): New method. Common helper method
15128         for identifier and parameters CLS-Compliant testing.
15129         (VerifyClsCompliance): New method. The main virtual method for
15130         CLS-Compliant verifications.
15131         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
15132         null. I don't know why is null (too many public members !).
15133         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
15134         and get value of first CLSCompliantAttribute that found.
15135
15136         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
15137         (VerifyClsCompliance): Override and add extra tests.
15138
15139         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
15140         clscheck- disable CLS-Compliant verification event if assembly is has
15141         CLSCompliantAttribute(true).
15142
15143         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
15144         ApllyAttribute is now called in emit section as in the other cases.
15145         Possible future Emit integration.
15146         (IsIdentifierClsCompliant): New override.
15147         (VerifyClsCompliance): New override.
15148         (GetEnumeratorName): Returns full enum name.
15149
15150         * parameter.cs (GetSignatureForError): Implemented.
15151
15152         * report.cs (WarningData): New struct for Warning message information.
15153         (LocationOfPreviousError): New method.
15154         (Warning): New method. Reports warning based on the warning table.
15155         (Error_T): New method. Reports error based on the error table.
15156
15157         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
15158         verifications are done here.
15159
15160         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
15161
15162         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
15163         CLSCompliantAttribute.
15164         (all_imported_types): New member holds all imported types from other
15165         assemblies.
15166         (LoadAllImportedTypes): New method fills static table with exported types
15167         from all referenced assemblies.
15168         (Modules): New property returns all assembly modules.
15169
15170 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
15171
15172         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
15173         throwing a parser error.
15174
15175         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
15176         which removes the hardcoded get_/set_ prefixes for properties, as
15177         IL allows for the properties to be named something else.  
15178
15179         Bug #56013
15180
15181         * expression.cs: Do not override operand before we know if it is
15182         non-null.  Fix 56207
15183
15184 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
15185
15186         * typemanager.cs: support for pinned variables.
15187
15188 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
15189
15190         * decl.cs, typemanager.cs: Avoid using an arraylist
15191         as a buffer if there is only one result set.
15192
15193 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
15194
15195         * expression.cs: Make sure you cant call a static method
15196         with an instance expression, bug #56174.
15197
15198 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
15199
15200         * class.cs (IsDuplicateImplementation): Improve error reporting to
15201         flag 663 (method only differs in parameter modifier).
15202
15203         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
15204         in preprocessor directives.
15205
15206         * location.cs (LookupFile): Allow for the empty path.
15207
15208         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
15209         better approach for some of that patch, but its failing with the
15210         CharSet enumeration.  For now try/catch will do.
15211
15212         * typemanager.cs: Do not crash if a struct does not have fields.
15213         Fixes 56150.
15214
15215 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
15216
15217         * expression.cs: cs0213, cant fix a fixed expression.
15218         fixes 50231.
15219
15220 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
15221
15222         * cs-parser.jay: detect invalid embeded statements gracefully.
15223         bug #51113.
15224
15225 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
15226
15227         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
15228         As a regex:
15229         s/
15230         the invocation type may not be a subclass of the tye of the item/
15231         The type of the item must be a subclass of the invocation item.
15232         /g
15233
15234         Fixes bug #50820.
15235
15236 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
15237
15238         * attribute.cs: Added methods to get a string and a bool from an
15239         attribute. Required to information from AssemblyKeyFileAttribute,
15240         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
15241         * codegen.cs: Modified AssemblyName creation to include support for
15242         strongnames. Catch additional exceptions to report them as CS1548.
15243         * compiler.csproj: Updated include CryptoConvert.cs.
15244         * compiler.csproj.user: Removed file - user specific configuration.
15245         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
15246         Mono.Security assembly. The original class is maintained and tested in
15247         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
15248         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
15249         like CSC 8.0 (C# v2) supports.
15250         * Makefile: Added CryptoConvert.cs to mcs sources.
15251         * rootcontext.cs: Added new options for strongnames.
15252
15253 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
15254
15255         * driver.cs: For --expect-error, report error code `2'
15256         if the program compiled with no errors, error code `1' if
15257         it compiled with an error other than the one expected.
15258
15259 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
15260
15261         * compiler.csproj: Updated for Visual Studio .NET 2003.
15262         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
15263         * compiler.sln: Updated for Visual Studio .NET 2003.
15264
15265 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
15266
15267         * expression.cs: Fix bug #47234. We basically need to apply the
15268         rule that we prefer the conversion of null to a reference type
15269         when faced with a conversion to 'object' (csc behaviour).
15270
15271 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
15272
15273         * statement.cs: Shorter form for foreach, eliminates
15274         a local variable. r=Martin.
15275
15276 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
15277
15278         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
15279         checks if we can use brtrue/brfalse to test for 0.
15280         * expression.cs: use the above in the test for using brtrue/brfalse.
15281         cleanup code a bit.
15282
15283 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
15284
15285         * expression.cs: Rewrite string concat stuff. Benefits:
15286
15287         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
15288         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
15289         rather than a concat chain.
15290
15291         * typemanager.cs: Add lookups for more concat overloads.
15292
15293 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
15294
15295         * expression.cs: Emit shorter il code for array init.
15296
15297         newarr
15298         dup
15299         // set 1
15300
15301         // set 2
15302
15303         newarr
15304         stloc.x
15305
15306         ldloc.x
15307         // set 1
15308
15309         ldloc.x
15310         // set 2
15311
15312 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
15313
15314         * statement.cs: Before, two switch blocks would be merged if the
15315         total size of the blocks (end_item - begin_item + 1) was less than
15316         two times the combined sizes of the blocks.
15317
15318         Now, it will only merge if after the merge at least half of the
15319         slots are filled.
15320
15321         fixes 55885.
15322
15323 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
15324
15325         * class.cs : csc build fix for GetMethods(). See bug #52503.
15326
15327 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
15328
15329         * expression.cs: Make sure fp comparisons work with NaN.
15330         This fixes bug #54303. Mig approved this patch a long
15331         time ago, but we were not able to test b/c the runtime
15332         had a related bug.
15333
15334 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
15335
15336         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
15337
15338 2004-03-19  Martin Baulig  <martin@ximian.com>
15339
15340         * class.cs (MemberCore.IsDuplicateImplementation): Report the
15341         error here and not in our caller.
15342
15343 2004-03-19  Martin Baulig  <martin@ximian.com>
15344
15345         * interface.cs: Completely killed this file.
15346         (Interface): We're now a TypeContainer and live in class.cs.
15347
15348         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
15349         argument; we're now also called for interfaces.
15350         (TypeContainer.DefineMembers): Allow this method being called
15351         multiple times.
15352         (TypeContainer.GetMethods): New public method; formerly known as
15353         Interface.GetMethod().  This is used by PendingImplementation.
15354         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
15355         it's now private and non-static.
15356         (Interface): Moved this here; it's now implemented similar to
15357         Class and Struct.
15358         (Method, Property, Event, Indexer): Added `bool is_interface'
15359         argument to their .ctor's.
15360         (MemberBase.IsInterface): New public field.
15361
15362         * cs-parser.jay: Create normal Method, Property, Event, Indexer
15363         instances instead of InterfaceMethod, InterfaceProperty, etc.
15364         (opt_interface_base): Removed; we now use `opt_class_base' instead.
15365         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
15366
15367 2004-03-19  Martin Baulig  <martin@ximian.com>
15368
15369         * class.cs (MethodCore.IsDuplicateImplementation): New private
15370         method which does the CS0111 checking.
15371         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
15372         Use IsDuplicateImplementation().
15373
15374 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
15375
15376         * decl.cs (FindMemberToOverride): New method to find the correct
15377         method or property to override in the base class.
15378         * class.cs
15379             - Make Method/Property use the above method to find the
15380               version in the base class.
15381             - Remove the InheritableMemberSignatureCompare as it is now
15382               dead code.
15383
15384         This patch makes large code bases much faster to compile, as it is
15385         O(n) rather than O(n^2) to do this validation.
15386
15387         Also, it fixes bug 52458 which is that nested classes are not
15388         taken into account when finding the base class member.
15389
15390         Reviewed/Approved by Martin.
15391
15392 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
15393
15394         * interface.cs: In all interface classes removed redundant
15395         member initialization.
15396
15397 2004-03-16  Martin Baulig  <martin@ximian.com>
15398
15399         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
15400
15401 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
15402
15403         * decl.cs (DefineTypeAndParents): New helper method to define a
15404         type's containers before the type itself is defined;  This is a
15405         bug exposed by the recent changes to Windows.Forms when an
15406         implemented interface was defined inside a class that had not been
15407         built yet.   
15408
15409         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
15410
15411         (Check): Loop correctly to report errors modifiers
15412         (UNSAFE was not in the loop, since it was the same as TOP).
15413
15414         * interface.cs: Every interface member now takes a ModFlags,
15415         instead of a "is_new" bool, which we set on the base MemberCore. 
15416
15417         Every place where we called "UnsafeOk" in the interface, now we
15418         call the proper member (InterfaceMethod.UnsafeOK) instead to get
15419         the unsafe settings from the member declaration instead of the
15420         container interface. 
15421
15422         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
15423
15424         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
15425         `set_indexer_name' to the pending bits (one per type).
15426
15427         We fixed a bug today that was picking the wrong method to
15428         override, since for properties the existing InterfaceMethod code
15429         basically ignored the method name.  Now we make sure that the
15430         method name is one of the valid indexer names.
15431
15432 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
15433  
15434         * support.cs (SeekableStreamReader): Keep track of stream byte
15435         positions and don't mix them with character offsets to the buffer.
15436
15437         Patch from Gustavo Giráldez
15438
15439 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
15440
15441         * interface.cs (InterfaceSetGetBase): Removed double member
15442         initialization, base class does it as well.
15443
15444 2004-03-13  Martin Baulig  <martin@ximian.com>
15445
15446         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
15447         when compiling corlib.
15448
15449 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
15450
15451         * convert.cs (ExplicitConversion): We were reporting an error on
15452         certain conversions (object_type source to a value type, when the
15453         expression was `null') before we had a chance to pass it through
15454         the user defined conversions.
15455
15456         * driver.cs: Replace / and \ in resource specifications to dots.
15457         Fixes 50752
15458
15459         * class.cs: Add check for duplicate operators.  Fixes 52477
15460
15461 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
15462
15463         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
15464         that are in the middle of the statements, not only at the end.
15465         Fixes #54987
15466
15467         * class.cs (TypeContainer.AddField): No longer set the
15468         `HaveStaticConstructor' flag, now we call it
15469         `UserDefineStaticConstructor' to diferentiate the slightly
15470         semantic difference.
15471
15472         The situation is that we were not adding BeforeFieldInit (from
15473         Modifiers.TypeAttr) to classes that could have it.
15474         BeforeFieldInit should be set to classes that have no static
15475         constructor. 
15476
15477         See:
15478
15479         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
15480
15481         And most importantly Zoltan's comment:
15482
15483         http://bugzilla.ximian.com/show_bug.cgi?id=44229
15484
15485         "I think beforefieldinit means 'it's ok to initialize the type sometime 
15486          before its static fields are used', i.e. initialization does not need
15487          to be triggered by the first access to the type. Setting this flag
15488          helps the JIT to compile better code, since it can run the static
15489          constructor at JIT time, and does not need to generate code to call it
15490          (possibly lots of times) at runtime. Unfortunately, mcs does not set
15491          this flag for lots of classes like String. 
15492          
15493          csc sets this flag if the type does not have an explicit static 
15494          constructor. The reasoning seems to be that if there are only static
15495          initalizers for a type, and no static constructor, then the programmer
15496          does not care when this initialization happens, so beforefieldinit
15497          can be used.
15498          
15499          This bug prevents the AOT compiler from being usable, since it 
15500          generates so many calls to mono_runtime_class_init that the AOT code
15501          is much slower than the JITted code. The JITted code is faster, 
15502          because it does not generate these calls if the vtable is type is
15503          already initialized, which is true in the majority of cases. But the
15504          AOT compiler can't do this."
15505
15506 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
15507
15508         * class.cs (MethodData.Emit): Refactor the code so symbolic
15509         information is generated for destructors;  For some reasons we
15510         were taking a code path that did not generate symbolic information
15511         before. 
15512
15513 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
15514
15515         * class.cs: Create a Constructor.CheckBase method that
15516         takes care of all validation type code. The method
15517         contains some code that was moved from Define.
15518
15519         It also includes new code that checks for duplicate ctors.
15520         This fixes bug #55148.
15521
15522 2004-03-09  Joshua Tauberer <tauberer@for.net>
15523
15524         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
15525         a { ... }-style array creation invokes EmitStaticInitializers
15526         which is not good for reference-type arrays.  String, decimal
15527         and now null constants (NullCast) are not counted toward
15528         static initializers.
15529
15530 2004-03-05  Martin Baulig  <martin@ximian.com>
15531
15532         * location.cs (SourceFile.HasLineDirective): New public field;
15533         specifies whether the file contains or is referenced by a "#line"
15534         directive.
15535         (Location.DefineSymbolDocuments): Ignore source files which
15536         either contain or are referenced by a "#line" directive.        
15537
15538 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
15539
15540         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
15541         direct access to our parent, so check the method inline there.
15542
15543 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
15544
15545         * expression.cs (Invocation.EmitCall): Miguel's last commit
15546         caused a regression. If you had:
15547
15548             T t = null;
15549             t.Foo ();
15550
15551         In Foo the implict this would be null.
15552
15553 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
15554
15555         * expression.cs (Invocation.EmitCall): If the method is not
15556         virtual, do not emit a CallVirt to it, use Call.
15557
15558         * typemanager.cs (GetFullNameSignature): Improve the method to
15559         cope with ".ctor" and replace it with the type name.
15560
15561         * class.cs (ConstructorInitializer.Resolve): Now the method takes
15562         as an argument the ConstructorBuilder where it is being defined,
15563         to catch the recursive constructor invocations.
15564
15565 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
15566
15567         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
15568         routines to check if a type is an enumerable/enumerator allow
15569         classes that implement the IEnumerable or IEnumerator interfaces.
15570
15571         * class.cs (Property, Operator): Implement IIteratorContainer, and
15572         implement SetYields.
15573
15574         (Property.Define): Do the block swapping for get_methods in the
15575         context of iterators.   We need to check if Properties also
15576         include indexers or not.
15577
15578         (Operator): Assign the Block before invoking the
15579         OperatorMethod.Define, so we can trigger the Iterator code
15580         replacement. 
15581
15582         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
15583         Property and Operator classes are not created when we parse the
15584         declarator but until we have the block completed, so we use a
15585         singleton SimpleIteratorContainer.Simple to flag whether the
15586         SetYields has been invoked.
15587
15588         We propagate this setting then to the Property or the Operator to
15589         allow the `yield' to function.
15590
15591 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
15592
15593         * codegen.cs: Implemented attribute support for modules.
15594         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
15595         Assembly/Module functionality.
15596
15597         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
15598         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
15599         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
15600
15601 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
15602
15603         * interface.cs (FindMembers): The operation is performed on all base
15604         interfaces and not only on the first. It is required for future CLS Compliance patch.
15605
15606 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
15607
15608         * statement.cs, codegen.cs:
15609         This patch deals with patterns such as:
15610
15611         public class List : IEnumerable {
15612
15613                 public MyEnumerator GetEnumerator () {
15614                         return new MyEnumerator(this);
15615                 }
15616
15617                 IEnumerator IEnumerable.GetEnumerator () {
15618                         ...
15619                 }
15620                 
15621                 public struct MyEnumerator : IEnumerator {
15622                         ...
15623                 }
15624         }
15625
15626         Before, there were a few things we did wrong:
15627         1) we would emit callvirt on a struct, which is illegal
15628         2) we emited ldarg when we needed to emit ldarga
15629         3) we would mistakenly call the interface methods on an enumerator
15630         type that derived from IEnumerator and was in another assembly. For example:
15631
15632         public class MyEnumerator : IEnumerator
15633
15634         Would have the interface methods called, even if there were public impls of the
15635         method. In a struct, this lead to invalid IL code.
15636
15637 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
15638
15639         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
15640           renamed to Emit.
15641
15642         * delegate.cs (Define): Fixed crash when delegate type is undefined.
15643
15644 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
15645
15646         * cs-parser.jay: Fix small regression: we were not testing V2
15647         compiler features correctly.
15648
15649         * interface.cs: If the emit context is null, then create one
15650
15651 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
15652
15653         * decl.cs (GetSignatureForError): New virtual method to get full name
15654           for error messages.
15655
15656         * attribute.cs (IAttributeSupport): New interface for attribute setting.
15657           Now it is possible to rewrite ApplyAttributes method to be less if/else.
15658
15659         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
15660           Duplicated members and code in these classes has been removed.
15661           Better encapsulation in these classes.
15662
15663 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
15664
15665         * assign.cs (Assign.DoResolve): When dealing with compound
15666         assignments, there is a new rule in ECMA C# 2.4 (might have been
15667         there before, but it is documented here) that states that in:
15668
15669         a op= b;
15670
15671         If b is of type int, and the `op' is a shift-operator, then the
15672         above is evaluated as:
15673
15674         a = (int) a op b 
15675
15676         * expression.cs (Binary.ResolveOperator): Instead of testing for
15677         int/uint/long/ulong, try to implicitly convert to any of those
15678         types and use that in pointer arithmetic.
15679
15680         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
15681         method to print information for from the type, not from the
15682         null-method we were given.
15683
15684 2004-02-01  Duncan Mak  <duncan@ximian.com>
15685
15686         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
15687         parsing for cmd, fixes bug #53694.
15688
15689 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
15690
15691         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
15692         in the member name duplication tests. Property and operator name duplication
15693         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
15694
15695 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
15696
15697         * interface.cs (PopulateMethod): Fixed crash when interface method
15698         returns not existing type (error test cs0246-3.cs).
15699
15700 2004-02-02  Ravi Pratap M <ravi@ximian.com>
15701
15702         * cs-parser.jay (interface_accessors): Re-write actions to also
15703         store attributes attached to get and set methods. Fix spelling
15704         while at it.
15705
15706         (inteface_property_declaration): Modify accordingly.
15707
15708         (InterfaceAccessorInfo): New helper class to store information to pass
15709         around between rules that use interface_accessors.
15710
15711         * interface.cs (Emit): Apply attributes on the get and set
15712         accessors of properties and indexers too.
15713
15714         * attribute.cs (ApplyAttributes): Modify accordingly to use the
15715         right MethodBuilder when applying attributes to the get and set accessors.
15716
15717 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
15718
15719         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
15720
15721 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
15722
15723         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
15724
15725 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
15726
15727         * cs-parser.jay: Remove YIELD token, instead use the new grammar
15728         changes that treat `yield' specially when present before `break'
15729         or `return' tokens.
15730
15731         * cs-tokenizer.cs: yield is no longer a keyword.
15732
15733 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
15734
15735         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
15736         setting for default constructors.
15737         For default constructors are almost every time set wrong Modifier. The
15738         generated IL code has been alright. But inside mcs this values was
15739         wrong and this was reason why several of my CLS Compliance tests
15740         failed.
15741
15742 2004-01-22  Martin Baulig  <martin@ximian.com>
15743
15744         * cs-parser.jay (namespace_or_type_name): Return an Expression,
15745         not a QualifiedIdentifier.  This is what `type_name_expression'
15746         was previously doing.
15747         (type_name_expression): Removed; the code is now in
15748         `namespace_or_type_name'.
15749         (qualified_identifier): Removed, use `namespace_or_type_name'
15750         instead.
15751         (QualifiedIdentifier): Removed this class.      
15752
15753 2004-01-22  Martin Baulig  <martin@ximian.com>
15754
15755         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
15756         not a string as alias name.
15757
15758 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
15759
15760         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
15761         #52730 bug, and instead compute correctly the need to use a
15762         temporary variable when requesting an address based on the
15763         static/instace modified of the field and the constructor.
15764  
15765 2004-01-21  Martin Baulig  <martin@ximian.com>
15766
15767         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
15768         class and namespace before looking up aliases.  Fixes #52517.
15769
15770 2004-01-21  Martin Baulig  <martin@ximian.com>
15771
15772         * flowanalysis.cs (UsageVector.Merge): Allow variables being
15773         assinged in a 'try'; fixes exception4.cs.
15774
15775 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
15776         * class.cs : Implemented parameter-less constructor for TypeContainer
15777
15778         * decl.cs: Attributes are now stored here. New property OptAttributes
15779
15780         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
15781
15782         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
15783
15784 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
15785
15786         * typemanager.cs (CSharpSignature): Now reports also inner class name.
15787           (CSharpSignature): New method for indexer and property signature.
15788
15789 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
15790
15791         * pending.cs (IsVirtualFilter): Faster implementation.
15792
15793 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
15794
15795         * typemanager.cs: Avoid inclusion of same assembly more than once.
15796
15797 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
15798
15799         * cs-parser.jay: Fixed problem where the last assembly attribute
15800           has been applied also to following declaration (class, struct, etc.)
15801           
15802 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
15803
15804         * class.cs: Added error CS0538, CS0539 reporting.
15805         Fixed crash on Microsoft runtime when field type is void.
15806
15807         * cs-parser.jay: Added error CS0537 reporting.
15808
15809         * pending.cs: Added error CS0535 reporting.
15810         Improved error report for errors CS0536, CS0534.
15811
15812 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
15813
15814         Merge a few bits from the Anonymous Method MCS tree.
15815
15816         * statement.cs (ToplevelBlock): New class for toplevel methods,
15817         will hold anonymous methods, lifted variables.
15818
15819         * cs-parser.jay: Create toplevel blocks for delegates and for
15820         regular blocks of code. 
15821
15822 2004-01-20  Martin Baulig  <martin@ximian.com>
15823
15824         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
15825         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
15826         and `NeedExplicitReturn'; added `IsLastStatement'.
15827         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
15828         have a `ReturnLabel' or we're not unreachable.
15829
15830         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
15831         child's reachability; don't just override ours with it.  Fixes
15832         #58058 (lluis's example).
15833         (FlowBranching): Added public InTryOrCatch(), InCatch(),
15834         InFinally(), InLoop(), InSwitch() and
15835         BreakCrossesTryCatchBoundary() methods.
15836
15837         * statement.cs (Return): Do all error checking in Resolve().
15838         Unless we are the last statement in a top-level block, always
15839         create a return label and jump to it.
15840         (Break, Continue): Do all error checking in Resolve(); also make
15841         sure we aren't leaving a `finally'.
15842         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
15843         statement in a top-level block.
15844         (Block.Flags): Added `IsDestructor'.
15845         (Block.IsDestructor): New public property.
15846
15847 2004-01-20  Martin Baulig  <martin@ximian.com>
15848
15849         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
15850
15851 2004-01-20  Martin Baulig  <martin@ximian.com>
15852
15853         * statement.cs (Statement.ResolveUnreachable): New public method.
15854         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
15855         (Block.Resolve): Resolve unreachable statements.
15856
15857 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
15858
15859         * expression.cs: We need to fix the case where we do
15860         not have a temp variable here.
15861
15862         * assign.cs: Only expression compound assignments need
15863         temporary variables.
15864
15865 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
15866
15867         * flowanalysis.cs: Reduce memory allocation in a few ways:
15868           - A block with no variables should not allocate a bit
15869             vector for itself.
15870           - A method with no out parameters does not need any tracking
15871             for assignment of the parameters, so we need not allocate
15872             any data for it.
15873           - The arrays:
15874                 public readonly Type[] VariableTypes;
15875                 public readonly string[] VariableNames;
15876             Are redundant. The data is already stored in the variable
15877             map, so we need not allocate another array for it.
15878           - We need to add alot of checks for if (params | locals) == null
15879             due to the first two changes.
15880
15881 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
15882
15883         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
15884         implement IMemoryLocation, we store a copy on a local variable and
15885         take the address of it.  Patch from Benjamin Jemlich
15886
15887         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
15888         to use a special "type_name_expression" rule which reduces the
15889         number of "QualifiedIdentifier" classes created, and instead
15890         directly creates MemberAccess expressions.
15891
15892 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
15893
15894         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
15895         that fixes #52853.  Null literal assignment to ValueType
15896
15897         * class.cs (MethodData.Emit): Instead of checking the name of the
15898         method to determine if its a destructor, create a new derived
15899         class from Method called Destructor, and test for that.  
15900
15901         * cs-parser.jay: Create a Destructor object instead of a Method.  
15902
15903         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
15904
15905         Fixes: 52933
15906
15907 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
15908
15909         * expression.cs (Binary.ResolveOperator): Perform an implicit
15910         conversion from MethodGroups to their delegate types on the
15911         Addition operation.
15912
15913         * delegate.cs: Introduce a new class DelegateCreation that is the
15914         base class for `NewDelegate' and `ImplicitDelegateCreation',
15915         factor some code in here.
15916
15917         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
15918         conversion from MethodGroups to compatible delegate types. 
15919
15920         * ecore.cs (Expression.Resolve): Do not flag error 654
15921         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
15922         we allow conversions from MethodGroups to delegate types now.
15923
15924         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
15925         assignments in v2 either.
15926
15927 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
15928
15929         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
15930         static read-only fields in ctors.
15931
15932         Applied patch from Benjamin Jemlich 
15933
15934         * expression.cs (UnaryMutator): Avoid leaking local variables. 
15935
15936 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
15937
15938         * cs-tokenizer.cs (IsCastToken): Allow the various native types
15939         here to return true, as they can be used like this:
15940
15941                 (XXX) int.MEMBER ()
15942
15943         Fixed 49836 and all the other dups
15944
15945 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
15946
15947         * driver.cs: Implement /win32res and /win32icon.
15948
15949 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
15950
15951         * cs-parser.jay: Add a rule to improve error handling for the
15952         common mistake of placing modifiers after the type.
15953
15954 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
15955
15956         * cs-parser.jay (interface_event_declaration): Catch
15957         initialization of events on interfaces, and report cs0068
15958
15959         * cs-parser.jay (interface_event_declaration): Catch
15960         initialization of events. 
15961
15962         * ecore.cs: Better report missing constructors.
15963
15964         * expression.cs (Binary.ResolveOperator): My previous bug fix had
15965         the error reporting done in the wrong place.  Fix.
15966
15967         * expression.cs (Binary.ResolveOperator): Catch the 
15968         operator + (E x, E y) error earlier, and later allow for implicit
15969         conversions in operator +/- (E e, U x) from U to the underlying
15970         type of E.
15971
15972         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
15973         52596, if the container class is abstract, the default constructor
15974         is protected otherwise its public (before, we were always public).
15975
15976         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
15977         fixed statement.
15978
15979         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
15980         Jemlich that fixes bug #52597, MCS was generating invalid code for
15981         idisposable structs.   Thanks to Ben for following up with this
15982         bug as well.
15983
15984 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
15985
15986         * driver.cs: Allow assemblies without code to be generated, fixes
15987         52230.
15988
15989 2004-01-07  Nick Drochak <ndrochak@gol.com>
15990
15991         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
15992
15993 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
15994
15995         * cs-parser.jay: Add rules to improve error reporting if fields or
15996         methods are declared at the namespace level (error 116)
15997
15998         * Add rules to catch event add/remove
15999
16000 2004-01-04  David Sheldon <dave-mono@earth.li>
16001
16002   * expression.cs: Added matching ")" to error message for 
16003   CS0077
16004
16005 2004-01-03 Todd Berman <tberman@gentoo.org>
16006
16007         * ecore.cs, attribute.cs:
16008         Applying fix from #52429.
16009
16010 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
16011
16012         * ecore.cs, expression.cs, statement.cs:
16013         Total rewrite of how we handle branching. We
16014         now handle complex boolean expressions with fewer
16015         jumps. As well if (x == 0) no longer emits a ceq.
16016
16017         if (x is Foo) is much faster now, because we generate
16018         better code.
16019
16020         Overall, we get a pretty big improvement on our benchmark
16021         tests. The code we generate is smaller and more readable.
16022
16023         I did a full two-stage bootstrap. The patch was reviewed
16024         by Martin and Miguel.
16025
16026 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
16027
16028         * cs-parser.jay: Make primary_expression not take a QI.
16029         we dont need this because the member_access rule covers
16030         us here. So we replace the rule with just IDENTIFIER.
16031
16032         This has two good effects. First, we remove a s/r conflict.
16033         Second, we allocate many fewer QualifiedIdentifier objects.
16034
16035 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
16036
16037         * attribute.cs: Handle MarshalAs attributes as pseudo, and
16038         set the correct information via SRE. This prevents
16039         hanging on the MS runtime. Fixes #29374.
16040
16041 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
16042
16043         * convert.cs: correctly handle conversions to value types
16044         from Enum and ValueType as unboxing conversions.
16045
16046         Fixes bug #52569. Patch by Benjamin Jemlich.
16047
16048 2004-01-02  Ravi Pratap  <ravi@ximian.com>
16049
16050         * expression.cs (BetterConversion): Prefer int -> uint
16051         over int -> ulong (csc's behaviour). This fixed bug #52046.
16052
16053 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
16054
16055         * decl.cs (MemberCache.FindMembers): now returns a
16056         MemberInfo [].
16057
16058         * typemanager.cs: In general, go with with ^^.
16059         (CopyNewMethods): take an IList.
16060         (RealMemberLookup): Only allocate an arraylist
16061         if we copy from two sets of methods.
16062
16063         This change basically does two things:
16064         1) Fewer array lists allocated due to CopyNewMethods.
16065         2) the explicit cast in MemberList costed ALOT.
16066
16067 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
16068
16069         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
16070         a hashtable to avoid needless string allocations when an identifier is
16071         used more than once (the common case).
16072
16073 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
16074
16075         * pending.cs: MS's TypeBuilder.GetInterfaces ()
16076         is broken, it will not return anything. So, we
16077         have to use the information we have in mcs to
16078         do the task.
16079
16080         * typemanager.cs: Add a cache for GetInterfaces,
16081         since this will now be used more often (due to ^^)
16082
16083         (GetExplicitInterfaces) New method that gets the
16084         declared, not effective, interfaces on a type
16085         builder (eg, if you have interface IFoo, interface
16086         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
16087         { IBar }.
16088
16089         This patch makes MCS able to bootstrap itself on
16090         Windows again.
16091
16092 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
16093
16094         * expression.cs: Remove the Nop's that Miguel put
16095         in by mistake.
16096
16097 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
16098
16099         * report.cs, codegen.cs: Give the real stack trace to
16100         the error when an exception is thrown.
16101
16102 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
16103
16104         * decl.cs: only allocate hashtables for ifaces if 
16105         it is an iface!
16106
16107 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
16108
16109         * expression.cs: fix the error from cs0121-2.cs
16110         (a parent interface has two child interfaces that
16111         have a function with the same name and 0 params
16112         and the function is called through the parent).
16113
16114 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
16115
16116         * class.cs, rootcontext.cs, typmanager.cs: do not
16117         leak pointers.
16118
16119 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
16120
16121         * codegen.cs: remove stack for the ec flow branching.
16122         It is already a linked list, so no need.
16123
16124 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
16125
16126         * Makefile: Allow custom profiler here.
16127
16128 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
16129
16130         * typemanager.cs (LookupType):
16131           - Use a static char [], because split takes
16132             a param array for args, so it was allocating
16133             every time.
16134           - Do not store true in a hashtable, it boxes.
16135
16136 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
16137
16138         * flowanalysis.cs: bytify common enums.
16139
16140 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
16141
16142         * modifiers.cs: Add a new set of flags for the
16143         flags allowed on explicit interface impls.
16144         * cs-parser.jay: catch the use of modifiers in
16145         interfaces correctly.
16146         * class.cs: catch private void IFoo.Blah ().
16147
16148         All related to bug #50572.
16149
16150 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
16151
16152         * decl.cs: Rewrite the consistant accessability checking.
16153         Accessability is not linear, it must be implemented in
16154         a tableish way. Fixes #49704.
16155
16156 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
16157
16158         * expression.cs: Handle negation in a checked context.
16159         We must use subtraction from zero. Fixes #38674.
16160
16161 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
16162
16163         * class.cs: Ignore static void main in DLLs.
16164         * rootcontext.cs: Handle the target type here,
16165         since we are have to access it from class.cs
16166         * driver.cs: account for the above.
16167
16168 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
16169
16170         * report.cs: Give line numbers and files if available.
16171
16172 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
16173
16174         * driver.cs: Implement /addmodule.
16175
16176         * typemanager.cs:  Change 'modules' field so it now contains Modules not
16177         ModuleBuilders.
16178
16179 2003-12-20  Martin Baulig  <martin@ximian.com>
16180
16181         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
16182         (FieldBase.IsAssigned): Removed this field.
16183         (FieldBase.SetAssigned): New public method.
16184         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
16185
16186 2003-12-20  Martin Baulig  <martin@ximian.com>
16187
16188         * expression.cs (LocalVariableReference.DoResolve): Don't set
16189         `vi.Used' if we're called from DoResolveLValue().
16190
16191         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
16192         returns the usage vector it just merged into the current one -
16193         pass this one to UsageWarning().
16194         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
16195         of the `EmitContext', don't call this recursively on our children.
16196
16197 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
16198
16199         * driver.cs: Implement /target:module.
16200
16201 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
16202
16203         * support.cs (CharArrayHashtable): New helper class.
16204
16205         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
16206         char arrays, not strings, so we can avoid creating a string in
16207         consume_identifier if the identifier is a keyword.
16208
16209 2003-12-16  Martin Baulig  <martin@ximian.com>
16210
16211         * statement.cs (LocalInfo.Assigned): Removed this property.
16212         (LocalInfo.Flags): Removed `Assigned'.
16213         (LocalInfo.IsAssigned): New public method; takes the EmitContext
16214         and uses flow analysis.
16215         (Block.UsageWarning): Made this method private.
16216         (Block.Resolve): Call UsageWarning() if appropriate.
16217
16218         * expression.cs (LocalVariableReference.DoResolve): Always set
16219         LocalInfo.Used here.
16220
16221 2003-12-13  Martin Baulig  <martin@ximian.com>
16222
16223         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
16224         any value here; we're now using flow analysis to figure out
16225         whether a statement/block returns a value.
16226
16227 2003-12-13  Martin Baulig  <martin@ximian.com>
16228
16229         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
16230         working again.
16231         (FlowBranching.MergeFinally): Don't call
16232         `branching.CheckOutParameters()' here, this is called in
16233         MergeTopBlock().
16234         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
16235         when adding the `finally' vector.       
16236
16237 2003-12-13  Martin Baulig  <martin@ximian.com>
16238
16239         * flowanalysis.cs
16240         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
16241         actually work and also fix #48962.
16242
16243 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
16244
16245         * decl.cs: Do not check System.Object for nested types,
16246         since we know it does not have any. Big bang for buck:
16247
16248         BEFORE:
16249            Run 1:   8.35 seconds
16250            Run 2:   8.32 seconds
16251            corlib:  17.99 seconds
16252         AFTER:
16253            Run 1:   8.17 seconds
16254            Run 2:   8.17 seconds
16255            corlib:  17.39 seconds
16256
16257 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
16258
16259         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
16260         time we are returning 0 members, so we save alot here.
16261
16262 2003-12-11  Martin Baulig  <martin@ximian.com>
16263
16264         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
16265         `MergeChild()', also just take the `FlowBranching' as argument;
16266         call Merge() on it and return the result.
16267         (FlowBranching.Merge): We don't need to do anything if we just
16268         have one sibling.
16269
16270 2003-12-11  Martin Baulig  <martin@ximian.com>
16271
16272         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
16273         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
16274         Maurer for this idea.
16275
16276 2003-12-11  Martin Baulig  <martin@ximian.com>
16277
16278         * flowanalysis.cs (MergeResult): This class is now gone; we now
16279         use the `UsageVector' for this.  The reason for this is that if a
16280         branching just has one sibling, we don't need to "merge" them at
16281         all - that's the next step to do.
16282         (FlowBranching.Merge): We now return a `UsageVector' instead of a
16283         `MergeResult'.
16284
16285 2003-12-11  Martin Baulig  <martin@ximian.com>
16286
16287         Reworked flow analyis and made it more precise and bug-free.  The
16288         most important change is that we're now using a special `Reachability'
16289         class instead of having "magic" meanings of `FlowReturns'.  I'll
16290         do some more cleanups and optimizations and also add some more
16291         documentation this week.
16292
16293         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
16294         largely reworked this class.
16295         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
16296         the new `Reachability' class instead of having "magic" values here.
16297         (FlowBranching): We're now using an instance of `Reachability'
16298         instead of having separate `Returns', `Breaks' etc. fields.
16299
16300         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
16301         based on flow analysis; ignore the return value of block.Emit ().
16302
16303 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
16304
16305         * driver.cs typemanager.cs: Find the mono extensions to corlib even
16306         if they are private.
16307
16308 2003-12-09  Martin Baulig  <martin@ximian.com>
16309
16310         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
16311         call them directly on the UsageVector.
16312
16313 2003-12-09  Martin Baulig  <martin@ximian.com>
16314
16315         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
16316         Changed return type from `FlowReturns' to `Reachability'.
16317
16318 2003-12-09  Martin Baulig  <martin@ximian.com>
16319
16320         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
16321         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
16322         `Reachable' fields with a single `Reachability' one.
16323
16324 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
16325
16326         * class.cs (FindMembers): Remove foreach's.
16327
16328         Bootstrap times:
16329
16330         BEFORE
16331                 Run 1:   8.74 seconds
16332                 Run 2:   8.71 seconds
16333
16334         AFTER
16335                 Run 1:   8.64 seconds
16336                 Run 2:   8.58 seconds
16337
16338
16339 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
16340
16341         * cs-parser.jay:
16342         * gen-treedump.cs:
16343         * statement.cs:
16344         This patch does a few things:
16345                 1. EmptyStatement is now a singleton, so it is never reallocated.
16346                 2. All blah is EmptyStatement constructs have been changed to
16347                    blah == EmptyStatement.Value, which is much faster and valid
16348                    now that EmptyStatement is a singleton.
16349                 3. When resolving a block, rather than allocating a new array for
16350                    the non-empty statements, empty statements are replaced with
16351                    EmptyStatement.Value
16352                 4. Some recursive functions have been made non-recursive.
16353         Mainly the performance impact is from (3), however (1) and (2) are needed for
16354         this to work. (4) does not make a big difference in normal situations, however
16355         it makes the profile look saner.
16356
16357         Bootstrap times:
16358
16359         BEFORE
16360         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
16361         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
16362         Total memory allocated: 56397 KB
16363
16364         AFTER
16365         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
16366         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
16367         Total memory allocated: 55666 KB
16368
16369 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
16370
16371         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
16372         than the hashtable in a hashtable version
16373
16374         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
16375         we always end up concating a string. This results in a huge perf
16376         loss, because many strings have to be tracked by the GC. In this
16377         patch, we first use a hashtable that works with two keys, so that
16378         the strings do not need to be concat'ed.
16379
16380         Bootstrap times:
16381         BEFORE
16382                 Run 1:   8.74 seconds
16383                 Run 2:   8.71 seconds
16384
16385         AFTER
16386                 Run 1:   8.65 seconds
16387                 Run 2:   8.56 seconds
16388
16389 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
16390
16391         * Makefile: Add a new target `do-time' that does a quick and simple
16392         profile, leaving easy to parse output.
16393
16394 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
16395
16396         * codegen.cs (Init): Create the dynamic assembly with 
16397         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
16398
16399 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
16400
16401         * support.cs: Make the PtrHashtable use only one
16402         instance of its comparer.
16403
16404 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
16405
16406         * typemanager.cs: Fix lookup of GetNamespaces.
16407
16408 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
16409
16410         * expression.cs: Removed redundant line.
16411
16412         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
16413         ArrayLists, use for loops with bounds.  
16414
16415         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
16416         arraylist.
16417
16418         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
16419         arraylists, use for loop with bounds.
16420
16421         The above three changes give us a 0.071 second performance
16422         improvement out of 3.294 seconds down to 3.223.  On my machine
16423         the above changes reduced the memory usage by 1,387 KB during
16424         compiler bootstrap.
16425
16426         * cs-parser.jay (QualifiedIdentifier): New class used to represent
16427         QualifiedIdentifiers.  Before we created a new string through
16428         concatenation, and mostly later on, the result would be
16429         manipulated by DecomposeQI through string manipulation.
16430
16431         This reduced the compiler memory usage for bootstrapping from
16432         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
16433         compile times in 0.05 seconds.
16434
16435 2003-11-28  Dick Porter  <dick@ximian.com>
16436
16437         * support.cs: Do string compares with the Invariant culture.
16438
16439         * rootcontext.cs: 
16440         * gen-treedump.cs: 
16441         * expression.cs: 
16442         * driver.cs: 
16443         * decl.cs: 
16444         * codegen.cs: 
16445         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
16446         the comparison is done with the Invariant culture.
16447
16448 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
16449
16450         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
16451         GetEnumerator method.
16452
16453         (ProbeCollectionType): Iterate starting at the most specific type
16454         upwards looking for a GetEnumerator
16455
16456         * expression.cs: Shift count can be up to 31 for int/uint and 63
16457         for long/ulong.
16458
16459 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
16460
16461         * statement.cs (Block.LookupLabel): Also look for the label on the
16462         children blocks.  Use a hash table to keep track of visited
16463         nodes. 
16464
16465         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
16466         we actually did transform the other operand, otherwise fall back
16467         to the common codepath that casts to long.
16468
16469         * cs-tokenizer.cs: Use the same code pattern as the int case.
16470         Maybe I should do the parsing myself, and avoid depending on the
16471         Parse routines to get this done.
16472
16473 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
16474
16475         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
16476         which fixes bug 51347.  This time test it.
16477
16478         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
16479         attributes for example can not tell the difference between these.
16480         The difference was only a syntax feature of the language. 
16481
16482         * attribute.cs: Apply attributes to delegates.
16483
16484         * delegate.cs: Call the apply attributes method.
16485
16486 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
16487
16488         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
16489         comparing 0 vs Byte.MinValue, not the value
16490
16491         (ImplicitConversionRequired): When reporting a conversion error,
16492         use error 31 to print out the constant error instead of the
16493         simpler 29.
16494
16495         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
16496         which fixes bug 51347.
16497
16498 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
16499
16500         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
16501         which fixes the -warnaserror command line option.
16502
16503 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
16504
16505         * cfold.cs (DoNumericPromotions): During constant folding of
16506         additions on UIntConstant, special case intconstants with
16507         IntConstants like we do on the expression binary operator. 
16508
16509 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
16510
16511         * convert.cs (ImplicitReferenceConversion): We were missing a case
16512         (System.Enum are not value types or class types, so we need to
16513         classify them separatedly).
16514
16515         * driver.cs: We do not support error 2007.
16516
16517 2003-11-12 Jackson Harper <jackson@ximian.com>
16518
16519         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
16520         system directory. Also use the full file name so users can
16521         libraries names mscorlib-o-tron.dll in a non system dir.
16522
16523 2003-11-10  Martin Baulig  <martin@ximian.com>
16524
16525         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
16526         (TypeManager.InitCoreTypes): Initialize them here, but instead of
16527         calling `ResolveType()' on them, directly assign their `Type'.
16528
16529 2003-11-08  Martin Baulig  <martin@ximian.com>
16530
16531         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
16532         return value and the `out parent' parameter.
16533         (TypeContainer.DefineType): Moved the CS0644 check into
16534         GetClassBases().  Don't pass the interface types to the
16535         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
16536         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
16537
16538         * ecore.cs (TypeExpr.IsAttribute): New property.
16539         (TypeExpr.GetInterfaces): New method.
16540
16541         * interface.cs (Interface.GetInterfaceTypeByName): Return a
16542         TypeExpr instead of a Type.
16543         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
16544         (Interface.DefineType): Don't pass the interface types to the
16545         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
16546         them later and then call `TypeBulider.AddInterfaceImplementation()'.
16547
16548         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
16549         instead of a `Type[]'.
16550         (TypeManager.RegisterBuilder): Likewise.
16551         (TypeManager.AddUserInterface): Likewise.
16552         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
16553         `Type[]' and also return a `TypeExpr[]'.
16554         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
16555
16556 2003-11-08  Martin Baulig  <martin@ximian.com>
16557
16558         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
16559         Expression.     
16560
16561 2003-11-08  Martin Baulig  <martin@ximian.com>
16562
16563         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
16564         TypeManager.ResolveExpressionTypes().
16565
16566         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
16567         instead of an Expression.
16568         (TypeExpr): This is now an abstract base class for `TypeExpression'.
16569         (TypeExpression): New public class; formerly known as `TypeExpr'.
16570
16571         * expression.cs (ComposedCast): Derive from TypeExpr.
16572
16573         * typemanager.cs (TypeManager.system_*_expr): These are now
16574         TypExpr's instead of Expression's.
16575         (TypeManager.ResolveExpressionTypes): New public static function;
16576         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
16577         of them.        
16578
16579 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
16580
16581         * expression.cs (New.DoResolve): Do not dereference value that
16582         might be a null return.
16583
16584         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
16585         sure that the constant value has the right type.  Fixes an
16586         unreported bug, similar to 50425.
16587
16588         * const.cs (Const.LookupConstantValue): Call
16589         ImplicitStandardConversionExists before doing a conversion to
16590         avoid havng the TypeManager.ChangeType do conversions.
16591
16592         Reduced the number of casts used
16593
16594         (Const.ChangeType): New routine to enable reuse of the constant
16595         type changing code from statement.
16596
16597         * typemanager.cs (ChangeType): Move common initialization to
16598         static global variables.
16599
16600         Fixes #50425.
16601
16602         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
16603         every value type to go through, even if it was void.  Fix that. 
16604
16605         * cs-tokenizer.cs: Use is_identifier_start_character on the start
16606         character of the define, and the is_identifier_part_character for
16607         the rest of the string.
16608
16609 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
16610
16611         * expression.cs (UnaryMutator.EmitCode): When I updated
16612         LocalVariableReference.DoResolve, I overdid it, and dropped an
16613         optimization done on local variable references.
16614
16615 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
16616
16617         * ecore.cs: Convert the return from Ldlen into an int.
16618
16619 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
16620
16621         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
16622         the accessibility, this is a special case for toplevel non-public
16623         classes (internal for instance).
16624
16625 2003-10-20  Nick Drochak <ndrochak@gol.com>
16626
16627         * ecore.cs: Fix typo and build.  Needed another right paren.
16628
16629 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
16630
16631         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
16632         `internal' case regular and protected, but not allowing protected
16633         to be evaluated later.  Bug 49840
16634
16635 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
16636
16637         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
16638         to kb.Nlast, and not the kb.nFirst to isolate the switch
16639         statement.
16640
16641         Extract the underlying type, so enumerations of long/ulong are
16642         treated like long/ulong.
16643
16644 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
16645
16646         * expression.cs (New): Overload the meaning of RequestedType to
16647         track the possible creation of the NewDelegate type, since
16648         DoResolve is invoked more than once for new constructors on field
16649         initialization.
16650
16651         See bugs: #48800 and #37014
16652
16653         * cs-parser.jay (declare_local_constants): Take an arraylist
16654         instead of a single constant.
16655
16656         (local_constant_declaration): It should take a
16657         constant_declarators, not a constant_declarator.  Fixes 49487
16658
16659         * convert.cs: Fix error report.
16660
16661 2003-10-13 Jackson Harper <jackson@ximian.com>
16662
16663         * typemanager.cs (TypeToCoreType): Add float and double this fixes
16664         bug #49611
16665
16666 2003-10-09  Martin Baulig  <martin@ximian.com>
16667
16668         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
16669         to the .ctor.
16670         (MethodCore.DoDefineParameters): Removed the TypeContainer
16671         argument; use the DeclSpace which was passed to the .ctor instead.
16672         (MethodCore.CheckParameter): Take a DeclSpace instead of a
16673         TypeContainer; we only need a DeclSpace here.
16674
16675 2003-10-09  Martin Baulig  <martin@ximian.com>
16676
16677         * class.cs (MethodData): Added additional `DeclSpace ds' argument
16678         to the .ctor.
16679         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
16680         EmitContext's .ctor.    
16681
16682 2003-10-09  Martin Baulig  <martin@ximian.com>
16683
16684         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
16685         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
16686         AsAccessible(), moved them as well.
16687
16688         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
16689
16690 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
16691
16692         * cs-parser.jay : Renamed yyName to yyNames related to jay.
16693
16694 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
16695
16696         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
16697         generation for >=, as spotted by Paolo, bug 48679.  
16698         Patch from David Waite.
16699
16700         * cs-tokenizer.cs: Add handling for #pragma.
16701
16702         * cs-parser.jay: Allow for both yield and yield return in the
16703         syntax.  The anti-cobolization of C# fight will go on!
16704
16705         * class.cs (TypeBuilder.DefineType): Catch error condition here
16706         (Parent.DefineType erroring out and returning null).
16707
16708         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
16709         coping with enumerations variables, we were mistakenly processing
16710         them as a regular value type instead of built-in types.  Fixes the
16711         bug #48063
16712
16713         * typemanager.cs (IsBuiltinOrEnum): New method.
16714
16715 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
16716
16717         * cs-parser.jay: Upgrade: yield now needs the return clause.
16718
16719 2003-09-19  Martin Baulig  <martin@ximian.com>
16720
16721         * decl.cs (MemberCache.SetupCacheForInterface): Take a
16722         `MemberCache parent' argument.  Normally, an interface doesn't
16723         have a parent type except System.Object, but we use this in gmcs
16724         for generic type parameters.
16725
16726 2003-09-18  Martin Baulig  <martin@ximian.com>
16727
16728         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
16729         on `type.IsInterface'; don't check whether the type has a parent
16730         to determine whether it's an interface.
16731
16732 2003-09-15  Martin Baulig  <martin@ximian.com>
16733
16734         * class.cs (TypeContainer.DefineType): Added an error flag to
16735         avoid reporting duplicate CS0146's ("class definition is
16736         circular.").
16737
16738         * driver.cs (Driver.MainDriver): Abort if
16739         RootContext.ResolveTree() reported any errors.
16740
16741 2003-09-07  Martin Baulig  <martin@ximian.com>
16742
16743         * report.cs (Error, Warning): Added overloaded versions which take
16744         a `params object[] args' and call String.Format().
16745
16746 2003-09-07  Martin Baulig  <martin@ximian.com>
16747
16748         * decl.cs (DeclSpace..ctor): Don't call
16749         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
16750         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
16751         (DeclSpace.RecordDecl): New method.
16752
16753         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
16754
16755 2003-09-02  Ravi Pratap  <ravi@ximian.com>
16756
16757         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
16758         value attributes to be applied to ParameterBuilders.
16759
16760         * class.cs (MethodCore.LabelParameters): Make static and more
16761         generic so that it can be used from other places - like interface
16762         methods, for instance.
16763
16764         * interface.cs (Interface.Emit): Call LabelParameters before
16765         emitting attributes on the InterfaceMethod.
16766
16767 2003-08-26  Martin Baulig  <martin@ximian.com>
16768
16769         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
16770         resolving aliases; fixes #47927.
16771
16772 2003-08-26  Martin Baulig  <martin@ximian.com>
16773
16774         * statement.cs (Using.DoResolve): This is internally emitting a
16775         try/finally clause, so we need to set ec.NeedExplicitReturn if we
16776         do not always return.  Fixes #47681.
16777
16778 2003-08-26  Martin Baulig  <martin@ximian.com>
16779
16780         * decl.cs (MemberCore): Moved WarningNotHiding(),
16781         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
16782         into MemberBase.
16783         (AdditionResult): Make this nested in DeclSpace.
16784         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
16785         argument; call NamespaceEntry.Define() unless we're nested in a
16786         class or struct.
16787
16788         * namespace.cs (Namespace.DefineName): New public function.  This
16789         is called from DeclSpace's .ctor to add 
16790         (Namespace.Lookup): Include DeclSpaces in the lookup.
16791
16792         * class.cs (Operator): Derive from MemberBase, not MemberCore.
16793
16794         * const.cs (Const): Derive from MemberBase, not MemberCore.     
16795
16796 2003-08-25  Martin Baulig  <martin@ximian.com>
16797
16798         * convert.cs (Convert.ExplicitReferenceConversion): When
16799         converting from an interface type to a class, unbox if the target
16800         type is a struct type.  Fixes #47822.
16801
16802 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16803
16804         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
16805         #47854.
16806
16807 2003-08-22  Martin Baulig  <martin@ximian.com>
16808
16809         * class.cs (TypeManager.DefineType): When defining a nested type,
16810         call DefineType() on our parent; fixes #47801.
16811
16812 2003-08-22  Martin Baulig  <martin@ximian.com>
16813
16814         * class.cs (MethodData.Define): While checking if a method is an
16815         interface implementation, improve the test a bit more to fix #47654.
16816
16817 2003-08-22  Martin Baulig  <martin@ximian.com>
16818
16819         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
16820         correctly; fixes #47722.
16821
16822 2003-08-22  Martin Baulig  <martin@ximian.com>
16823
16824         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
16825         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
16826
16827         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
16828
16829 2003-08-22  Martin Baulig  <martin@ximian.com>
16830
16831         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
16832         can only be assigned in static constructors.  Fixes #47161.
16833
16834 2003-08-22  Martin Baulig  <martin@ximian.com>
16835
16836         Rewrote and improved the flow analysis code.
16837
16838         * flowbranching.cs (FlowBranching): Make this class abstract.
16839         (FlowBranching.CreateBranching): New static function to create a
16840         new flow branching.
16841         (FlowBranchingBlock, FlowBranchingException): New classes.
16842         (FlowBranching.UsageVector.Type): New public readonly field.
16843         (FlowBranching.UsageVector.Breaks): Removed the setter.
16844         (FlowBranching.UsageVector.Returns): Removed the setter.
16845         (FlowBranching.UsageVector): Added Break(), Return(),
16846         NeverReachable() and Throw() methods to modify the reachability.
16847         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
16848         done by FlowBranching.Merge().
16849         (FlowBranching.UsageVector.MergeChild): New method; merges the
16850         merge result into the current vector.
16851         (FlowBranching.Merge): New abstract method to merge a branching.
16852
16853 2003-08-12  Martin Baulig  <martin@ximian.com>
16854
16855         * expression.cs (Indirection.CacheTemporaries): Create the
16856         LocalTemporary with the pointer type, not its element type.
16857
16858 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
16859
16860         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
16861         token was a keyword or not.
16862
16863         Add `error' options where an IDENTIFIER was expected;  Provide
16864         CheckToken and CheckIdentifierToken convenience error reporting
16865         functions. 
16866
16867         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
16868
16869         * decl.cs: Rename `NamespaceEntry Namespace' public field into
16870         NameSpaceEntry NameSpaceEntry.
16871
16872         (LookupInterfaceOrClass): Avoid creating a full qualified name
16873         from namespace and name: avoid doing lookups when we know the
16874         namespace is non-existant.   Use new Tree.LookupByNamespace which
16875         looks up DeclSpaces based on their namespace, name pair.
16876
16877         * driver.cs: Provide a new `parser verbose' to display the
16878         exception thrown during parsing.  This is turned off by default
16879         now, so the output of a failure from mcs is more graceful.
16880
16881         * namespace.cs: Track all the namespaces defined in a hashtable
16882         for quick lookup.
16883
16884         (IsNamespace): New method
16885
16886 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
16887
16888         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
16889         we know that we need to concatenate (full typename can never be
16890         null). 
16891
16892         * class.cs: ditto.
16893
16894         * statement.cs: Use a bitfield;  Do not initialize to null things
16895         which are done by the constructor by default.
16896
16897         * cs-parser.jay: bug fix, parameter was 4, not 3.
16898
16899         * expression.cs: Just use the property;
16900
16901         * statement.cs: No need for GetVariableInfo method.
16902
16903 2003-08-08  Martin Baulig  <martin@ximian.com>
16904
16905         * flowanalysis.cs (FlowReturns): This is now nested in the
16906         `FlowBranching' class.
16907         (MyBitVector): Moved this here from statement.cs.
16908         (FlowBranching.SiblingType): New enum type.
16909         (FlowBranching.CreateSibling): Added `SiblingType' argument.
16910
16911 2003-08-07  Martin Baulig  <martin@ximian.com>
16912
16913         * flowanalysis.cs (FlowBranchingType): This is now nested in the
16914         `FlowBranching' class and called `BranchingType'.
16915
16916 2003-08-07  Martin Baulig  <martin@ximian.com>
16917
16918         * flowanalysis.cs: Moved all the control flow analysis code into
16919         its own file.
16920
16921 2003-08-07  Martin Baulig  <martin@ximian.com>
16922
16923         * assign.cs (Assign.DoResolve): `target' must either be an
16924         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
16925         #37319.
16926
16927 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
16928
16929         * expression.cs (BinaryMethod): This kind of expression is created by the
16930         Binary class if it determines that the operator has to be handled
16931         by a method.
16932
16933         (BinaryDelegate): This kind of expression is created if we are
16934         dealing with a + or - operator on delegates.
16935
16936         (Binary): remove method, argumetns, and DelegateOperator: when
16937         dealing with methods, 
16938
16939         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
16940
16941         * statement.cs (Block): use bitfields for the three extra booleans
16942         we had in use.   Remove unused topblock parameter.
16943
16944         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
16945
16946         * assign.cs: Drop extra unneeded tests.
16947
16948 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
16949
16950         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
16951
16952         * statement.cs (Foreach): Use VariableStorage instead of
16953         LocalBuilders.   
16954
16955         * codegen.cs (VariableStorage): New class used by clients that
16956         require a variable stored: locals or fields for variables that
16957         need to live across yield.
16958
16959         Maybe provide a convenience api for EmitThis+EmitLoad?
16960
16961         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
16962         these bad boys.
16963
16964 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
16965
16966         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
16967         RemapParameterLValue): New methods that are used to turn a
16968         precomputed FieldInfo into an expression like this:
16969
16970                 instance.FieldInfo
16971
16972         The idea is to use this instead of making LocalVariableReference
16973         have more than one meaning.
16974
16975         * cs-parser.jay: Add error production to BASE.
16976
16977         * ecore.cs: Deal with TypeManager.GetField returning null, which
16978         is now a valid return value.
16979
16980         (FieldExprNoAddress): New expression for Fields whose address can
16981         not be taken.
16982
16983         * expression.cs (LocalVariableReference): During the resolve
16984         phases, create new expressions if we are in a remapping context.
16985         Remove code that dealt with remapping here.
16986
16987         (ParameterReference): same.
16988
16989         (ProxyInstance): New expression, like the `This' expression, but
16990         it is born fully resolved.  We know what we are doing, so remove
16991         the errors that are targeted to user-provided uses of `this'.
16992
16993         * statement.cs (Foreach): our variable is now stored as an
16994         Expression;  During resolution, follow the protocol, dont just
16995         assume it will return this.
16996
16997 2003-08-06  Martin Baulig  <martin@ximian.com>
16998
16999         * support.cs (SeekableStreamReader.cs): New public class.
17000
17001         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
17002         SeekableStreamReader instead of the normal StreamReader.
17003
17004 2003-08-04  Martin Baulig  <martin@ximian.com>
17005
17006         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
17007         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
17008         deambiguate casts and delegate invocations.
17009         (parenthesized_expression): Use the new tokens to ensure this is
17010         not a cast of method invocation.
17011
17012         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
17013         when reading a `)' and Deambiguate_CloseParens () was previously
17014         called.
17015
17016         * expression.cs (ParenthesizedExpression): New class.  This is
17017         just used for the CS0075 test.
17018         (Binary.DoResolve): Check for CS0075.   
17019
17020 2003-07-29  Ravi Pratap  <ravi@ximian.com>
17021
17022         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
17023         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
17024         reference comparison.
17025
17026         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
17027         examine the ReturnType for equality - this is necessary in the
17028         cases of implicit and explicit operators whose signature also
17029         includes the return type.
17030
17031 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
17032
17033         * namespace.cs: Cache the result of the namespace computation,
17034         instead of computing it every time.
17035
17036 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
17037
17038         * decl.cs: Use a global arraylist that we reuse over invocations
17039         to avoid excesive memory consumption.  Reduces memory usage on an
17040         mcs compile by one meg (45 average).
17041
17042         * typemanager.cs (LookupTypeReflection): In .NET pointers are
17043         private, work around that.
17044
17045 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
17046
17047         * literal.cs (IntLiteral): Define Zero and One static literals. 
17048
17049         * cs-parser.jay (integer_literal): use static literals to reduce
17050         memory usage for the most used literals (0, 1 and -1).  211kb
17051         reduced in memory usage.
17052
17053         Replace all calls to `new ArrayList' with `new
17054         ArrayList(4)' which is a good average number for most allocations,
17055         and also requires only 16 bytes of memory for its buffer by
17056         default. 
17057
17058         This reduced MCS memory usage in seven megabytes for the RSS after
17059         bootstrapping.
17060
17061 2003-07-28  Ravi Pratap  <ravi@ximian.com>
17062
17063         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
17064         handle params methods the correct way by forming only one
17065         applicable set with params and normal methods in them. Earlier we
17066         were looking at params methods only if we found no normal methods
17067         which was not the correct thing to do.
17068
17069         (Invocation.BetterFunction): Take separate arguments indicating
17070         when candidate and the best method are params methods in their
17071         expanded form.
17072
17073         This fixes bugs #43367 and #46199.
17074
17075         * attribute.cs: Documentation updates.
17076
17077         (CheckAttribute): Rename to CheckAttributeTarget.
17078         (GetValidPlaces): Rename to GetValidTargets.
17079
17080         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
17081         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
17082
17083         Fixes bug #44468.
17084
17085 2003-07-28  Martin Baulig  <martin@ximian.com>
17086
17087         * class.cs (TypeContainer.DefineMembers): Use the base type's full
17088         name when looking up the base class of a nested class.  Fixes #46977.
17089
17090 2003-07-26  Martin Baulig  <martin@ximian.com>
17091
17092         * expression.cs (Indexers.Indexer): New nested struct; contains
17093         getter, setter and the indexer's type.
17094         (Indexers.Properties): This is now an ArrayList of
17095         Indexers.Indexer's.
17096         (IndexerAccess.DoResolveLValue): Correctly set the type if the
17097         indexer doesn't have any getters.
17098
17099         * assign.cs (Assign.DoResolve): Also do the implicit conversions
17100         for embedded property and indexer assignments.
17101
17102 2003-07-26  Martin Baulig  <martin@ximian.com>
17103
17104         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
17105         preprocessor directive is not the first non-whitespace character
17106         on a line.
17107
17108 2003-07-26  Martin Baulig  <martin@ximian.com>
17109
17110         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
17111         namespace parsing, follow the spec more closely.
17112
17113         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
17114         NamespaceEntry.Lookup().
17115
17116 2003-07-25  Martin Baulig  <martin@ximian.com>
17117
17118         * MethodCore.cs (OverridesSomething): New public field; it's set
17119         from TypeContainer.DefineMembers if this method overrides
17120         something (which doesn't need to be a method).  Fix #39462.
17121
17122 2003-07-25  Ravi Pratap  <ravi@ximian.com>
17123
17124         * typemanager.cs (GetMembers): Ensure that the list of members is
17125         reversed. This keeps things in sync.
17126
17127         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
17128         find an AttributeUsage attribute.
17129
17130         * expression.cs (Invocation.OverloadResolve): Perform the check
17131         which disallows Invoke to be directly called on a Delegate.
17132
17133         (Error_InvokeOnDelegate): Report error cs1533.
17134
17135 2003-07-25  Martin Baulig  <martin@ximian.com>
17136
17137         * expression.cs (Indexers.GetIndexersForType): Only look in the
17138         interface hierarchy if the requested type is already an
17139         interface.  Fixes #46788 while keeping #46502 fixed.
17140
17141 2003-07-25  Martin Baulig  <martin@ximian.com>
17142
17143         * class.cs (TypeContainer.DefineMembers): Check whether all
17144         readonly fields have been assigned and report warning CS0649 if
17145         not.
17146
17147         * statement.cs (LocalInfo.IsFixed): Always return true if this is
17148         a valuetype.
17149
17150 2003-07-24  Ravi Pratap  <ravi@ximian.com>
17151
17152         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
17153         returned from GetMethods to make things consistent with the
17154         assumptions MCS makes about ordering of methods.
17155
17156         This should comprehensively fix bug #45127 and it does :-)
17157
17158         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
17159         ordering is actually reverse.
17160
17161         * Clean up some debug messages I left lying around.
17162
17163         * interface.cs (Populate*): Get rid of code which emits attributes
17164         since the stage in which we emit attributes is the 'Emit' stage,
17165         not the define stage.
17166
17167         (Emit): Move attribute emission for interface members here.
17168
17169 2003-07-22  Ravi Pratap  <ravi@ximian.com>
17170
17171         * expression.cs (Invocation.OverloadResolve): Follow the spec more
17172         closely: we eliminate methods in base types when we have an
17173         applicable method in a top-level type.
17174
17175         Please see section 14.5.5.1 for an exact description of what goes
17176         on. 
17177
17178         This fixes bug #45127 and a host of other related to corlib compilation.
17179
17180         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
17181         array is the method corresponding to the top-level type (this is
17182         because of the changes made to icall.c) so we change this
17183         accordingly.
17184
17185         (MethodGroupExpr.Name): This too.
17186
17187         * typemanager.cs (GetElementType): New method which does the right
17188         thing when compiling corlib. 
17189
17190         * everywhere: Make use of the above in the relevant places.
17191
17192 2003-07-22  Martin Baulig  <martin@ximian.com>
17193
17194         * cs-parser.jay (invocation_expression): Moved
17195         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
17196         `cast_expression', but create a InvocationOrCast which later
17197         resolves to either an Invocation or a Cast.
17198
17199         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
17200         method; call this before EmitStatement() to make sure that this
17201         expression can be used as a statement.
17202
17203         * expression.cs (InvocationOrCast): New class; resolves to either
17204         an Invocation or a Cast.
17205
17206         * statement.cs (StatementExpression): Call ResolveStatement() on
17207         the ExpressionStatement before emitting it.
17208
17209 2003-07-21  Martin Baulig  <martin@ximian.com>
17210
17211         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
17212         `ref' and `out' attributes match; fixes #46220.
17213         (MemberAccess.ResolveMemberAccess): You can't reference a type
17214         through an expression; fixes #33180.
17215         (Indexers.GetIndexersForType): Don't return the indexers from
17216         interfaces the class implements; fixes #46502.
17217
17218 2003-07-21  Martin Baulig  <martin@ximian.com>
17219
17220         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
17221         CS0661 checks; fixes bug #30442.
17222
17223 2003-07-21  Martin Baulig  <martin@ximian.com>
17224
17225         * decl.cs (AdditionResult): Added `Error'.
17226
17227         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
17228
17229         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
17230         makes cs0031.cs actually work.
17231
17232 2003-07-20  Martin Baulig  <martin@ximian.com>
17233
17234         * namespace.cs: Fixed that bug which caused a crash when compiling
17235         the debugger's GUI.
17236
17237 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
17238
17239         * typemanager.cs (LookupTypeReflection): Never expose types which
17240         are NotPublic, NestedPrivate, NestedAssembly, or
17241         NestedFamANDAssem.  We used to return these, and later do a check
17242         that would report a meaningful error, but the problem is that we
17243         would not get the real match, if there was a name override.
17244
17245 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
17246
17247         * namespace.cs (Namespace, Name): Do not compute the namespace
17248         name dynamically, compute it in the constructor.  This reduced
17249         memory usage by 1697 KB.
17250
17251         * driver.cs: Use --pause to pause at the end.
17252
17253 2003-07-17  Peter Williams  <peter@newton.cx>
17254
17255         * Makefile: Change the name of the test target so that it doesn't
17256         conflict with the recursive test target.
17257
17258 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
17259
17260         * expression.cs (LocalVariableReference.Emit, EmitAssign,
17261         AddressOf): Do not use EmitThis, that was wrong, use the actual
17262         this pointer.
17263
17264 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
17265
17266         * class.cs (MethodData.Define): While checking if a method is an
17267         interface implementation, improve the test: If we are not public
17268         (use new test here: use the computed MethodAttributes directly,
17269         instead of the parsed modifier flags) check if the `implementing'
17270         method comes from an interface or not.
17271
17272         * pending.cs (VerifyPendingMethods): Slightly better error
17273         message.
17274
17275         * makefile: add test target that does the mcs bootstrap.
17276
17277 2003-07-16  Ravi Pratap  <ravi@ximian.com>
17278
17279         * interface.cs (Define): Do nothing here since there are no
17280         members to populate etc. Move the attribute emission out of here
17281         since this was just totally the wrong place to put it. Attribute
17282         application happens during the 'Emit' phase, not in the 'Define'
17283         phase.
17284
17285         (Emit): Add this method and move the attribute emission here
17286
17287         * rootcontext.cs (EmitCode): Call the Emit method on interface
17288         types too.
17289
17290 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
17291
17292         * expression.cs (OverloadResolve): Report error only if Location
17293         is not 'Null' which means that there was a probe going on.
17294
17295 2003-07-14  Martin Baulig  <martin@ximian.com>
17296
17297         * expression.cs (ConditionalLogicalOperator): New public class to
17298         implement user defined conditional logical operators.
17299         This is section 14.11.2 in the spec and bug #40505.
17300
17301 2003-07-14  Martin Baulig  <martin@ximian.com>
17302
17303         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
17304
17305 2003-07-14  Martin Baulig  <martin@ximian.com>
17306
17307         * codegen.cs (EmitContext.InFixedInitializer): New public field.
17308
17309         * ecore.cs (IVariable.VerifyFixed): New interface method.
17310
17311         * expression.cs (Unary.ResolveOperator): When resolving the `&'
17312         operator, check whether the variable is actually fixed.  Fixes bug
17313         #36055.  Set a variable definitely assigned when taking its
17314         address as required by the spec.
17315
17316         * statement.cs (LocalInfo.IsFixed): New field.
17317         (LocalInfo.MakePinned): Set `IsFixed' to true.
17318
17319 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
17320
17321         * attribute.cs (Attribute.Resolve): While doing a Member lookup
17322         for .ctors, ensure that we only ask for members declared in the
17323         attribute type (BindingFlags.DeclaredOnly).
17324
17325         Fixes bug #43632.
17326
17327         * expression.cs (Error_WrongNumArguments): Report error 1501
17328         correctly the way CSC does.
17329
17330 2003-07-13  Martin Baulig  <martin@ximian.com>
17331
17332         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
17333         lookup on the fully qualified name, to make things like "X.X" work
17334         where "X.X" is a fully qualified type name, but we also have a
17335         namespace "X" in the using list.  Fixes #41975.
17336
17337 2003-07-13  Martin Baulig  <martin@ximian.com>
17338
17339         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
17340         function. If we're a CompoundAssign, we need to create an embedded
17341         CompoundAssign, not an embedded Assign.
17342         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
17343         Fixes #45854.
17344
17345 2003-07-13  Martin Baulig  <martin@ximian.com>
17346
17347         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
17348         work to fix bug #46088.
17349
17350 2003-07-13  Ravi Pratap <ravi@ximian.com>
17351
17352         * class.cs (Operator.Emit): Do not emit attributes here - it is
17353         taken care of by the Method class that we delegate too. This takes
17354         care of bug #45876.
17355
17356 2003-07-10  Martin Baulig  <martin@ximian.com>
17357
17358         * expression.cs (TypeOfVoid): New class.
17359         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
17360
17361 2003-07-10  Martin Baulig  <martin@ximian.com>
17362
17363         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
17364         bug #35957.
17365
17366 2003-07-10  Martin Baulig  <martin@ximian.com>
17367
17368         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
17369         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
17370
17371         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
17372
17373         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
17374
17375 2003-07-10  Martin Baulig  <martin@ximian.com>
17376
17377         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
17378         of decimal.  Fixes #42850.
17379
17380         NOTE: I also fixed the created byte blob, but this doesn't work on
17381         the MS runtime and csc never produces any byte blobs for decimal
17382         arrays.
17383
17384 2003-07-10  Martin Baulig  <martin@ximian.com>
17385
17386         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
17387         structs; fixes #32068.
17388         (Block.AddChildVariableNames): Fixed #44302.
17389
17390 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17391
17392         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
17393
17394 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
17395
17396         * attribute.cs: And this test is onger needed.
17397
17398 2003-07-08  Martin Baulig  <martin@ximian.com>
17399
17400         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
17401         inaccessible types.  Fixes #36313.
17402
17403         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
17404
17405         * namespace.cs (NamespaceEntry): Create implicit entries for all
17406         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
17407         implicit entries for N1.N2 and N1.
17408
17409 2003-07-08  Martin Baulig  <martin@ximian.com>
17410
17411         Rewrote the handling of namespaces to fix a lot of the issues
17412         wrt. `using' aliases etc.
17413
17414         * namespace.cs (Namespace): Splitted this class into a
17415         per-assembly `Namespace' and a per-file `NamespaceEntry'.
17416
17417         * typemanager.cs (TypeManager.IsNamespace): Removed.
17418         (TypeManager.ComputeNamespaces): Only compute namespaces from
17419         loaded assemblies here, not the namespaces from the assembly we're
17420         currently compiling.
17421
17422 2003-07-08  Martin Baulig  <martin@ximian.com>
17423
17424         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
17425
17426 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
17427
17428         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
17429         already fixed it.  
17430
17431         I thought about the memory savings here, but LookupTypeReflection
17432         is used under already very constrained scenarios.  Compiling
17433         corlib or mcs only exposes one hit, so it would not really reduce
17434         any memory consumption.
17435
17436 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17437
17438         * typemanager.cs: fixes bug #45889 by only adding public types from
17439         other assemblies to the list of known types.
17440
17441 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
17442
17443         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
17444         on the type we resolved.
17445
17446 2003-07-05  Martin Baulig  <martin@ximian.com>
17447
17448         * pending.cs (PendingImplementation.ParentImplements): Don't
17449         create the proxy if the parent is abstract.
17450
17451         * class.cs (TypeContainer.DefineIndexers): Process explicit
17452         interface implementations first.  Fixes #37714.
17453
17454 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
17455
17456         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
17457         defined recursively;  but since we modify the input parameters
17458         (left is set to `this' temporarily), we reset this value if the
17459         left_is_explicit is false, which gives the original semantics to
17460         the code.  
17461
17462         * literal.cs (NullPointer): new class used to represent a null
17463         literal in a pointer context.
17464
17465         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
17466         type is a pointer, use a NullPointer object instead of a
17467         NullLiteral.   Closes 43687
17468
17469         (ExplicitConversion): Convert pointer values using
17470         the conv opcode to the proper type.
17471
17472         * ecore.cs (New): change ValueTypeVariable property into a method,
17473         that returns whether the valuetype is suitable for being used.
17474
17475         * expression.cs (Binary.DoNumericPromotions): Only return if we
17476         the int constant was a valid uint, and we can return both left and
17477         right as uints.  If not, we continue processing, to trigger the
17478         type conversion.  This fixes 39018.
17479
17480         * statement.cs (Block.EmitMeta): During constant resolution, set
17481         the CurrentBlock property on the emitcontext, so that we resolve
17482         constants propertly.
17483
17484 2003-07-02  Martin Baulig  <martin@ximian.com>
17485
17486         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
17487         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
17488
17489         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
17490         than emitting it here.
17491
17492         * statement.cs: Fixed some more flow analysis bugs.
17493
17494 2003-07-02  Martin Baulig  <martin@ximian.com>
17495
17496         * class.cs (MethodData.Define): When implementing interface
17497         methods, set Final unless we're Virtual.
17498
17499         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
17500         check work for interface methods.
17501
17502 2003-07-01  Martin Baulig  <martin@ximian.com>
17503
17504         * ecore.cs (EmitContext.This): Replaced this property with a
17505         GetThis() method which takes a Location argument.  This ensures
17506         that we get the correct error location for a CS0188.
17507
17508 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
17509
17510         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
17511         ImplicitStandardConversion.
17512
17513         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
17514
17515 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
17516
17517         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
17518         optimization.
17519
17520 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
17521
17522         * class.cs (Constructor.Define): Turn off initlocals for unsafe
17523         constructors.
17524
17525         (MethodData.Define): Turn off initlocals for unsafe methods.
17526
17527 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
17528
17529         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
17530         complete;  Fixes #37521.
17531
17532         * delegate.cs: Use Modifiers.TypeAttr to compute the
17533         TypeAttributes, instead of rolling our own.  This makes the flags
17534         correct for the delegates.
17535
17536 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
17537
17538         * class.cs (Constructor.Define): Set the private flag for static
17539         constructors as well.
17540
17541         * cs-parser.jay (statement_expression): Set the return value to
17542         null, to avoid a crash when we catch an error.
17543
17544 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
17545
17546         * cs-parser.jay: Applied patch from Jackson that adds support for
17547         extern and unsafe modifiers to destructor declarations.
17548
17549         * expression.cs: Report error 21 if the user is trying to index a
17550         System.Array.
17551
17552         * driver.cs: Add an error message, suggested by the bug report.
17553
17554         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
17555         if we do not have a ": this ()" constructor initializer.  Fixes 45149
17556
17557 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
17558
17559         * namespace.cs: Add some information to reduce FAQs.
17560
17561 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
17562
17563         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
17564         underlying enumeration types.  Fixes #43915.
17565
17566         * expression.cs: Treat ushort/short as legal values to be used in
17567         bitwise operations.
17568
17569 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
17570
17571         * delegate.cs: transfer custom attributes for paramenters from
17572         the delegate declaration to Invoke and BeginInvoke.
17573
17574 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
17575
17576         * attribute.cs: handle custom marshalers and emit marshal info
17577         for fields, too.
17578
17579 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
17580
17581         * makefile.gnu: Added anonymous.cs to the compiler sources.
17582
17583 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
17584
17585         * iterators.cs: Change the name of the proxy class to include two
17586         underscores.
17587
17588         * cs-parser.jay: Update grammar to include anonymous methods.
17589
17590         * anonymous.cs: new file.
17591
17592 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
17593
17594         * class.cs (Field.Define): Add missing test for pointers and
17595         safety. 
17596
17597 2003-05-27  Ravi Pratap  <ravi@ximian.com>
17598
17599         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
17600         we use the stobj opcode.
17601
17602         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
17603         since it wasn't the correct fix. 
17604
17605         It still is puzzling that we are required to use stobj for IntPtr
17606         which seems to be a ValueType.
17607
17608 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
17609
17610         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
17611         during regular simple name resolution.   Now, the trick is that
17612         instead of returning for processing the simplename, we do a
17613         TypeManager.LookupType (ie, a rooted lookup as opposed to a
17614         contextual lookup type).   If a match is found, return that, if
17615         not, return for further composition.
17616
17617         This fixes long-standing 30485.
17618
17619         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
17620         using the address to initialize an object, do an Stobj instead of
17621         using the regular Stelem.
17622
17623         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
17624         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
17625         Because if we are a BaseIndexerAccess that value will be true.
17626         Fixes 43643.
17627
17628         * statement.cs (GotoCase.Resolve): Return after reporting an
17629         error, do not attempt to continue. 
17630
17631         * expression.cs (PointerArithmetic.Emit): If our operand is a
17632         long, convert our constants to match the operand before
17633         multiplying.  Convert to I type before adding.   Fixes 43670.
17634
17635 2003-05-14  Ravi Pratap  <ravi@ximian.com>
17636
17637         * enum.cs (ImplicitConversionExists) : Rename to
17638         ImplicitEnumConversionExists to remove ambiguity. 
17639
17640         * ecore.cs (NullCast): New type of cast expression class which
17641         basically is very similar to EmptyCast with the difference being
17642         it still is a constant since it is used only to cast a null to
17643         something else
17644         (eg. (string) null)
17645
17646         * convert.cs (ImplicitReferenceConversion): When casting a null
17647         literal, we return a NullCast.
17648
17649         * literal.cs (NullLiteralTyped): Remove - I don't see why this
17650         should be around anymore.
17651
17652         The renaming (reported was slightly wrong). Corrections:
17653
17654         ConvertImplicitStandard -> ImplicitConversionStandard
17655         ConvertExplicitStandard -> ExplicitConversionStandard
17656
17657         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
17658         before passing them in !
17659
17660         * convert.cs (ImplicitConversionStandard): When comparing for
17661         equal expr and target types, ensure that expr is not a
17662         NullLiteral.
17663
17664         In general, we must not be checking (expr_type ==
17665         target_type) in the top level conversion methods
17666         (ImplicitConversion, ExplicitConversion etc). This checking is
17667         done in the methods that they delegate to.
17668
17669 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
17670
17671         * convert.cs: Move Error_CannotConvertType,
17672         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
17673         ImplicitNumericConversion, ImplicitConversionExists,
17674         ImplicitUserConversionExists, StandardConversionExists,
17675         FindMostEncompassedType, FindMostSpecificSource,
17676         FindMostSpecificTarget, ImplicitUserConversion,
17677         ExplicitUserConversion, GetConversionOperators,
17678         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
17679         TryImplicitIntConversion, Error_CannotConvertImplicit,
17680         ConvertImplicitRequired, ConvertNumericExplicit,
17681         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
17682         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
17683         its own file.
17684
17685         Perform the following renames:
17686
17687         StandardConversionExists -> ImplicitStandardConversionExists
17688         ConvertImplicit -> ImplicitConversion
17689         ConvertImplicitStandard -> ImplicitStandardConversion
17690         TryImplicitIntConversion -> ImplicitIntConversion
17691         ConvertImplicitRequired -> ImplicitConversionRequired
17692         ConvertNumericExplicit -> ExplicitNumericConversion
17693         ConvertReferenceExplicit -> ExplicitReferenceConversion
17694         ConvertExplicit -> ExplicitConversion
17695         ConvertExplicitStandard -> ExplicitStandardConversion
17696
17697 2003-05-19  Martin Baulig  <martin@ximian.com>
17698
17699         * statement.cs (TypeInfo.StructInfo): Made this type protected.
17700         (TypeInfo): Added support for structs having structs as fields.
17701
17702         * ecore.cs (FieldExpr): Implement IVariable.
17703         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
17704         VariableInfo for the field.
17705
17706 2003-05-18  Martin Baulig  <martin@ximian.com>
17707
17708         * expression.cs (This.DoResolve): Report a CS0027 if we're
17709         emitting a field initializer.
17710
17711 2003-05-18  Martin Baulig  <martin@ximian.com>
17712
17713         * expression.cs (This.ResolveBase): New public function.
17714         (This.DoResolve): Check for CS0188.
17715
17716         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
17717         This.Resolve().
17718
17719         * ecore.cs (MethodGroupExpr.DoResolve): Set the
17720         `instance_expression' to null if we don't have any non-static
17721         methods.
17722
17723 2003-05-18  Martin Baulig  <martin@ximian.com>
17724
17725         Reworked the way how local variables and parameters are handled by
17726         the flow analysis code.
17727
17728         * statement.cs (TypeInfo, VariableMap): New public classes.
17729         (VariableInfo): New public class.  This is now responsible for
17730         checking whether a variable has been assigned.  It is used for
17731         parameters and local variables.
17732         (Block.EmitMeta): Take the InternalParameters as argument; compute
17733         the layout of the flow vectors here.
17734         (Block.LocalMap, Block.ParameterMap): New public properties.
17735         (FlowBranching): The .ctor doesn't get the InternalParameters
17736         anymore since Block.EmitMeta() now computes the layout of the flow
17737         vector.
17738         (MyStructInfo): This class is now known as `StructInfo' and nested
17739         in `TypeInfo'; we don't access this directly anymore.
17740
17741         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
17742         property and removed IsAssigned(), IsFieldAssigned(),
17743         SetAssigned() and SetFieldAssigned(); we now call them on the
17744         VariableInfo so we don't need to duplicate this code everywhere.
17745
17746         * expression.cs (ParameterReference): Added `Block block' argument
17747         to the .ctor.
17748         (LocalVariableReference, ParameterReference, This): The new
17749         VariableInfo class is now responsible for all the definite
17750         assignment stuff.
17751
17752         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
17753         IsParameterAssigned, SetParameterAssigned): Removed.
17754
17755 2003-05-18  Martin Baulig  <martin@ximian.com>
17756
17757         * typemanager.cs (InitCoreTypes): Try calling
17758         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
17759         the 3-args-version.  Corlib now also needs our `void_type'.
17760         (GetMethod): Added overloaded version which takes an optional
17761         `bool report_errors' to allow lookups of optional methods.
17762
17763 2003-05-12  Martin Baulig  <martin@ximian.com>
17764
17765         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
17766         only used for locals and not for parameters.
17767
17768 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
17769
17770         * support.cs (InternalParameters.ParameterType): Return the
17771         ExternalType of the parameter.
17772
17773         * parameter.cs (Parameter.ExternalType): drop the two arguments,
17774         they were unused.
17775
17776 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
17777
17778         * class.cs (MethodData.Define): Do not set the `newslot' on
17779         interface members, if they are also flagged as "override".
17780
17781         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
17782         better code for ++i and i++.  This only works for static fields
17783         and local variables.
17784
17785         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
17786         want to pull the DeclSpace out of the builder_to_declspace instead
17787         of the TypeBuilder (like in TypeContainer.FindMembers).
17788
17789         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
17790         instead of LookupTypeContainer.  Fixes the crash on .NET for
17791         looking up interface members.
17792
17793         * const.cs: Create our own emit context during the Definition
17794         stage, so that constants are evaluated in the proper context, when
17795         a recursive definition happens.
17796
17797 2003-05-11  Martin Baulig  <martin@ximian.com>
17798
17799         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
17800         new block for a switch section.
17801         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
17802         the adding/lookup in the switch block.  Fixes #39828.
17803
17804 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
17805
17806         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
17807         functionality: I needed to convert the data after I had performed
17808         the add/sub operation into the operands type size.
17809
17810         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
17811         pass the type for the box operation, otherwise the resulting
17812         object would have been of type object.
17813
17814         (BoxedCast): Add constructor to specify the type to box as.
17815
17816 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
17817
17818         * iterators.cs: I was reusing the `count' variable inadvertently,
17819         take steps to not allow this to happen.
17820
17821 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
17822
17823         * attribute.cs (Attribute.Resolve): Params attributes are encoded
17824         by creating an array at the point where the params starts and
17825         putting all those arguments there, then adjusting the size of the
17826         array.
17827
17828 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
17829
17830         * expression.cs (New.AddressOf): Implement interface
17831         IMemoryLocation.  This is used when the `new' operator is used in
17832         the context of an invocation to a method on a value type.
17833
17834         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
17835         example. 
17836
17837         * namespace.cs: Also check the using aliases here.
17838
17839         * driver.cs: Move the test for using validity after the types have
17840         been entered, so we do a single pass that also includes the using
17841         aliases. 
17842
17843         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
17844         in the regular case.   CreateSiblingForFinally is doing extra
17845         error checking.
17846
17847         * attribute.cs (GetAttributeArgumentExpression): Store the result
17848         on an out value, and use the return value to indicate failure
17849         instead of using null (which is a valid return for Constant.GetValue).
17850
17851         * statement.cs: Perform the analysis flow for the increment
17852         portion after the statement, because this will be the real flow of
17853         execution.  Fixes #42385
17854
17855         * codegen.cs (EmitContext.EmitArgument,
17856         EmitContext.EmitStoreArgument): New helper functions when the
17857         RemapToProxy flag is set.
17858
17859         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
17860         function.
17861
17862         Add support for remapping parameters. 
17863
17864         * iterators.cs: Propagate parameter values;  Store parameter
17865         values in the proxy classes.
17866
17867 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
17868
17869         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
17870         need a proxy reference;  I do not know what I was thinking
17871
17872         * cs-parser.jay (constructor_initializer): catch another error,
17873         and display nice message.
17874
17875         (field_declaration): catch void field declaration
17876         to flag a better error. 
17877
17878         * class.cs (MemberBase.CheckBase): Report an error instead of a
17879         warning if a new protected member is declared in a struct. 
17880         (Field.Define): catch the error of readonly/volatile.
17881
17882         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
17883
17884         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
17885         volatile variable is taken
17886
17887 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
17888
17889         * statement.cs (Fixed.Resolve): Report an error if we are not in
17890         an unsafe context.
17891
17892 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
17893
17894         * typemanager.cs: reuse the code that handles type clashes for
17895         delegates and enumerations.
17896
17897         * class.cs (Report28): Always report.
17898
17899         * expression.cs (EncodeAsAttribute): Allow nulls here.
17900
17901 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
17902
17903         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
17904         the functionality for testing whether an expression is valid for
17905         an attribute here.  Also handle the case of arrays of elements
17906         being stored. 
17907
17908         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
17909         encoding a linear array into an array of objects that are suitable
17910         to be passed to an CustomAttributeBuilder.
17911
17912         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
17913
17914         * ecore.cs: (FieldExpr): Handle field remapping here.
17915
17916         * iteratators.cs: Pass the instance variable (if the method is an
17917         instance method) to the constructors, so we can access the field
17918         variables on the class.
17919
17920         TODO: Test this with structs.  I think the THIS variable on
17921         structs might have to be a pointer, and not a refenrece
17922
17923 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
17924
17925         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
17926         local variables to fields in a proxy class.
17927
17928         * iterators.cs (PopulateProxy): Rename our internal fields to
17929         <XXX>.  
17930         Create a <THIS> field if we are an instance method, so we can
17931         reference our parent container variables.
17932         (MapVariable): Called back from the EmitContext code to enter a
17933         new variable to field mapping into the proxy class (we just create
17934         a FieldBuilder).
17935
17936         * expression.cs
17937         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
17938         for using the remapped locals to fields.
17939
17940         I placed the code here, because that gives the same semantics to
17941         local variables, and only changes the Emit code.
17942
17943         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
17944         statements inside iterators.
17945         (VariableInfo): Add a FieldBuilder for the cases when we are
17946         remapping local variables to fields in a proxy class
17947
17948         * ecore.cs (SimpleNameResolve): Avoid testing two times for
17949         current_block != null.
17950
17951         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
17952         not cope with strings, as it has been moved to the
17953         TableSwitchEmit.  Fixed bug in switch generation.
17954
17955         * expression.cs (New.DoResolve): Provide more context for the user
17956         when reporting an error.
17957
17958         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
17959         pointers. 
17960
17961         * expression.cs (MemberAccess.DoResolve): When we get a type back,
17962         check the permissions for it.  Note than in a type-resolution
17963         context the check was already present in DeclSpace.ResolveType,
17964         but was missing from the MemberAccess.
17965
17966         (ArrayCreation.CheckIndices): warn if the user has
17967         more nested levels of expressions, but there are no more
17968         dimensions specified.  Avoids crash on bug 41906.
17969
17970 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
17971
17972         * statement.cs (Block): replace Implicit bool, for a generic
17973         flags.   
17974         New flag: `Unchecked'.  This is used during the EmitMeta phase
17975         (which is out-of-line with the regular Resolve/Emit process for a
17976         statement, as this is done ahead of time, but still gets a chance
17977         to call constant resolve).
17978
17979         (Block.Flags): new enum for adding a new flag.
17980
17981         (Block.EmitMeta): track the state of unchecked.
17982
17983         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
17984         to enable constant resolution to work there as well.
17985
17986 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
17987
17988         * typemanager.cs (ienumerable_type): Also look up
17989         System.Collections.IEnumerable. 
17990
17991 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
17992
17993         TODO: Test more than one conditional per method.
17994
17995         * class.cs (Indexer.Define): Report the location where the user is
17996         referencing the unsupported feature.
17997
17998         (MethodData): Overload the use of `conditionals' to
17999         minimize the creation of needless ArrayLists.   This saves roughly
18000         212kb on my machine.
18001
18002         (Method): Implement the new IIteratorContainer interface.
18003         (Method.SetYields): Implement the method by setting the ModFlags
18004         to contain METHOD_YIELDS.
18005
18006         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
18007         which just got set to null.
18008
18009         * iterators.cs: New file.
18010
18011         (Yield, YieldBreak): New statements.
18012
18013         * statement.cs (Return.Resolve): Flag an error if we are used in
18014         an iterator method.
18015
18016         * codegen.cs (InIterator): New flag set if the code is being
18017         compiled in an iterator method.
18018
18019         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
18020         internal modifier, and we just use it to avoid adding extra
18021         fields, as this is seldom used.  
18022
18023         * cs-parser.jay: Add yield_statement (yield and yield break).
18024
18025         * driver.cs: New flag -v2 to turn on version 2 features. 
18026
18027         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
18028         hashtable when v2 is enabled.
18029
18030 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
18031
18032         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
18033         there is already a namespace defined with this name.
18034
18035         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
18036         people upgraded their corlibs.
18037
18038         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
18039         always use fully qualified types, no need to use the compiler
18040         front end.
18041
18042         (TypeManager.IsNamespace): Use binarysearch.
18043
18044         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
18045         AddDelegate): I did not quite use the new IsValid API properly: I
18046         have to pass the short-name and the fullname.  I was passing only
18047         the basename instead of the fullname sometimes. 
18048
18049         (TypeContainer.DefineType): call NamespaceClash.
18050
18051         * interface.cs (Interface.DefineType): use NamespaceClash before
18052         defining the type.
18053
18054         * delegate.cs (Delegate.DefineType): use NamespaceClash before
18055         defining the type.
18056
18057         * enum.cs: (Enum.DefineType): use NamespaceClash before
18058         defining the type.
18059
18060         * typemanager.cs (: 3-line patch that gives us some tasty 11%
18061         speed increase.  First, use the negative_hits cache when we get a
18062         negative.  Second, add the type with its full original name
18063         instead of the new . and + encoded name (reflection uses + to
18064         separate type from a nested type).  Use LookupTypeReflection
18065         directly which bypasses the type->name hashtable (that we already
18066         know does not contain the type.
18067
18068         * decl.cs (DeclSpace.ResolveTypeExpr): track the
18069         location/container type. 
18070
18071         * driver.cs: When passing utf8, use directly the UTF8Encoding.
18072
18073 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
18074
18075         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
18076
18077         * delegate.cs (NewDelegate.Resolve): Test whether an instance
18078         method is being referenced in the method group from a static
18079         context, and report error 120 if so.
18080
18081         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
18082         Error118. 
18083
18084         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
18085         is created, we create the A namespace).
18086
18087         * cs-parser.jay: A namespace also introduces a DeclarationFound.
18088         Fixes #41591
18089
18090 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
18091
18092         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
18093         invocation to ModuleBuilder.GetType with the same values will
18094         return a new type instance, so we need to cache its return
18095         values. 
18096
18097         * expression.cs (Binary.ResolveOperator): Only allow the compare
18098         operators on enums if they are of the same type.
18099
18100         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
18101         types of ValueType on their own case.  Before we were giving them
18102         the same treatment as objects.
18103
18104         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
18105         fullname.  Short name is used to compare against container name.
18106         Fullname is used to check against defined namespace names.
18107
18108         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
18109         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
18110
18111         (Method.CheckBase): Call parent.
18112         (MemberBase.CheckBase): Check for protected members on sealed
18113         classes.
18114         (PropertyBase.CheckBase): Call parent.
18115         (Field.Define): Call parent.
18116
18117         * report.cs: Negative error codes are now mapped to 8000 - code,
18118         so that the display is render more nicely.
18119
18120         * typemanager.cs: Do not use try/catch, instead report a regular
18121         error. 
18122
18123         (GetPointerType, GetReferenceType): These methods provide
18124         mechanisms to obtain the T* and T& from a T.  We had the code
18125         previously scattered around the code base, and it also used
18126         TypeManager.LookupType that would go through plenty of caches.
18127         This one goes directly to the type source.
18128
18129         In some places we did the Type.GetType followed by
18130         ModuleBuilder.GetType, but not in others, so this unifies the
18131         processing as well.
18132
18133         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
18134         statements now that we have namespace information.
18135
18136         * typemanager.cs (IsNamespace): New method, returns whether the
18137         string presented is a namespace or not.
18138
18139         (ComputeNamespaces): New public entry point, computes the list of
18140         available namespaces, using the GetNamespaces API call in Mono, or
18141         the slower version in MS.NET.   
18142
18143         Now before we start the semantic analysis phase, we have a
18144         complete list of namespaces including everything that the user has
18145         provided.
18146
18147         Deleted old code to cache namespaces in .nsc files.
18148
18149 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
18150
18151         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
18152         class/struct location definition Location for the implicit
18153         constructor location.
18154
18155         (Operator.Define): Use the location of the operator for the
18156         implicit Method definition.
18157
18158         (Constructor.Emit): use the constructor location for the implicit
18159         base initializer constructor.
18160
18161         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
18162         and the Expression class now contains two new methods:
18163
18164         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
18165         isolate type lookup from the rest of the resolution process.
18166
18167         Since we use Expressions to hold type definitions due to the way
18168         we parse the input we have historically overloaded Resolve to
18169         perform the Type lookups if a special flag is passed.  Now this is
18170         eliminated and two methods take their place. 
18171
18172         The differences in the two methods between xStep and xTerminal is
18173         that xStep is involved in our current lookup system that uses
18174         SimpleNames to compose a name, while xTerminal is used just to
18175         catch the case where the simplename lookup failed.
18176
18177 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
18178
18179         * expression.cs (ResolveMemberAccess): Remove redundant code.
18180         TypeExpr expressions are always born fully resolved.
18181
18182         * interface.cs (PopulateMethod): Do not lookup the types twice.
18183         We were doing it once during SemanticAnalysis and once during
18184         PopulateMethod.
18185
18186         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
18187         in local variable type definitions, were being returned as a
18188         SimpleName (we decomposed everything into a string), that is
18189         because primary_expression was being used instead of a type in the
18190         grammar (reduce/reduce conflicts).
18191
18192         The part that was wrong is that we converted the expression into a
18193         string (an oversimplification in one hand, compounded with primary
18194         expressions doing string concatenation).
18195
18196         So things like:
18197
18198         A.B.C [] x;
18199
18200         Would return "A.B.C[]" as a SimpleName.  This stopped things like
18201         using clauses from working on this particular context.  And a type
18202         was being matched directly against "A.B.C[]".
18203
18204         We now use the correct approach, and allow for ComposedCast to be
18205         part of the unary expression.  So the "A.B.C []" become a composed
18206         cast of "A.B.C" (as a nested group of MemberAccess with a
18207         SimpleName at the end) plus the rank composition "[]". 
18208
18209         Also fixes 35567
18210
18211 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
18212
18213         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
18214         for the access level checking.
18215
18216         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
18217         `TypeContainer container', because I kept getting confused when I
18218         was debugging this code.
18219
18220         * expression.cs (Indexers): Instead of tracking getters/setters,
18221         we now track them in parallel.  We create one arraylist less, but
18222         most importantly it is possible now for the LValue code to find a
18223         matching get for a set.
18224
18225         (IndexerAccess.DoResolveLValue): Update the code.
18226         GetIndexersForType has been modified already to extract all the
18227         indexers from a type.  The code assumed it did not.
18228
18229         Also make the code set the correct return type for the indexer.
18230         This was fixed a long time ago for properties, but was missing for
18231         indexers.  It used to be void_type.
18232
18233         (Binary.Emit): Test first for doubles instead of
18234         floats, as they are more common.
18235
18236         (Binary.EmitBranchable): Use the .un version of the branch opcodes
18237         when dealing with floats and the <=, >= operators.  This fixes bug
18238         #39314 
18239
18240         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
18241         to load the array value by emitting a load on the foreach variable
18242         type.  This was incorrect.  
18243
18244         We now emit the code to load an element using the the array
18245         variable type, and then we emit the conversion operator.
18246
18247         Fixed #40176
18248
18249 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
18250
18251         * attribute.cs: Avoid allocation of ArrayLists in the common case.
18252
18253 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
18254
18255         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
18256         test for protection before we test for signatures. 
18257
18258         (MethodSignature.ToString): implement.
18259
18260         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
18261         to the case where we reduced into a LongConstant.
18262
18263         * decl.cs (CheckAccessLevel): If the type is an array, we can not
18264         depend on whether the information is acurrate, because the
18265         Microsoft runtime will always claim that the array type is public,
18266         regardless of the real state.
18267
18268         If the type is a pointer, another problem happens: the type is
18269         reported as non-public in Microsoft.  
18270
18271         In both cases we have to call CheckAccessLevel recursively with
18272         the underlying type as the argument to be tested.
18273
18274 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
18275
18276         * assign.cs (Assign.Emit): If we are dealing with a compound
18277         assignment expression, we should use the code path that stores the
18278         intermediate result in a temporary value.  This fixes #40903.
18279
18280         *expression.cs (Indirection.ToString): Provide ToString method for
18281         debugging. 
18282
18283 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
18284
18285         * class.cs: Null out fields holding references to Block objects so
18286         they can be garbage collected.
18287
18288         * expression.cs (OverloadResolve): Remove unused local.
18289
18290 2003-04-07  Martin Baulig  <martin@ximian.com>
18291
18292         * codegen.cs (EmitContext.CurrentFile): New public field.
18293         (EmitContext.Mark): Use the CurrentFile to check whether the
18294         location is in the correct file.
18295         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
18296
18297 2003-04-07  Martin Baulig  <martin@ximian.com>
18298
18299         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
18300
18301         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
18302         location.  [FIXME: The location argument which gets passed to this
18303         method is sometimes wrong!]
18304
18305 2003-04-07  Nick Drochak <ndrochak@gol.com>
18306
18307         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
18308
18309 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
18310
18311         * expression.cs (Indirection.EmitAssign): We were using the
18312         temporary, but returning immediately instead of continuing the
18313         EmitAssing flow.
18314
18315 2003-04-06  Martin Baulig  <martin@ximian.com>
18316
18317         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
18318         if it's a nested child, but also deriving from the outer class.
18319         See test 190.cs.
18320
18321         * typemanager.cs (IsNestedChildOf): Make this work if it's a
18322         nested child, but also deriving from the outer class.  See
18323         test-190.cs.
18324         (FilterWithClosure): We may access private members of the outer
18325         class if we're a nested child and deriving from the outer class.
18326         (RealMemberLookup): Only set `closure_private_ok' if the
18327         `original_bf' contained BindingFlags.NonPublic.
18328
18329 2003-04-05  Martin Baulig  <martin@ximian.com>
18330
18331         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
18332
18333 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
18334
18335         * class.cs (Event.Define): Do not allow abstract events to have
18336         initializers. 
18337
18338 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
18339
18340         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
18341         block in event declarations.
18342
18343         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
18344         value type, get its address.
18345
18346         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
18347         leaving a class on the stack instead of a boolean value (int
18348         0/1).  Change the code so we compare against null, and then the
18349         result against zero.
18350
18351         * class.cs (TypeContainer.GetClassBases): We were checking for the
18352         parent class being sealed too late.
18353
18354         * expression.cs (Binary.Emit): For <= and >= when dealing with
18355         floating point values, use cgt.un and clt.un instead of cgt and
18356         clt alone.
18357
18358 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
18359
18360         * statement.cs: Apply the same optimization as MS: skip the 
18361         GetEnumerator returning an IEnumerator, and use the one returning a 
18362         CharEnumerator instead. This allows us to avoid the try-finally block 
18363         and the boxing.
18364
18365 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
18366
18367         * cs-parser.jay: Attributes cannot be applied to
18368                          namespaces. Fixes #40473
18369
18370 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18371
18372         * class.cs:
18373         (Add*): check if the name is valid using the full name for constants,
18374         fields, properties and events.
18375
18376 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
18377
18378         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
18379         char constants to be part of the enumeration.
18380
18381         * expression.cs (Conditional.DoResolve): Add support for operator
18382         true. Implements the missing functionality from 14.12
18383
18384         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
18385         operator true/false as required by the spec.
18386
18387         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
18388         implicit conversion to boolean.
18389
18390         * statement.cs (Statement.ResolveBoolean): A boolean expression is
18391         also one where the type implements `operator true'. 
18392
18393         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
18394         get an expression that will invoke operator true based on an
18395         expression.  
18396
18397         (GetConversionOperators): Removed the hack that called op_True
18398         here.  
18399
18400         (Expression.ResolveBoolean): Move this from Statement.
18401
18402 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
18403
18404         * ecore.cs (FieldExpr): do not allow initialization of initonly
18405         fields on derived classes
18406
18407 2003-03-13  Martin Baulig  <martin@ximian.com>
18408
18409         * statement.cs (Block.Emit): Call ig.BeginScope() and
18410         ig.EndScope() when compiling with debugging info; call
18411         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
18412
18413 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
18414
18415         * expression.cs (Indexers): Do not construct immediately, allow
18416         for new members to be appended as we go.  Fixes 38143
18417
18418 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18419
18420         * expression.cs: save/restore context when resolving an unchecked
18421         expression.
18422
18423 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
18424
18425         * cfold.cs: Catch division by zero in modulus operator during
18426         constant folding.
18427
18428 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
18429
18430         * interface.cs (Interface.DefineMembers): Avoid defining members
18431         twice. 
18432
18433 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
18434
18435         * driver.cs: handle the +/- options for -noconfig
18436
18437         * statement.cs (Unckeched.Resolve): Also track the state of
18438         unchecked in the Resolve phase.
18439
18440 2003-02-27  Martin Baulig  <martin@ximian.com>
18441
18442         * ecore.cs (Expression.MemberLookup): Don't create a
18443         MethodGroupExpr for something which is not a method.  Fixes #38291.
18444
18445 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
18446
18447         * class.cs (MemberBase.CheckParameters): Also check that the type
18448         is unmanaged if it is a pointer.
18449
18450         * expression.cs (SizeOf.Resolve): Add location information.
18451
18452         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
18453         a managed type is declared.
18454
18455         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
18456         parameter modifiers as well.  Fixes bug 38606
18457
18458         * class.cs: Very sad.  Am backing out the speed up changes
18459         introduced by the ArrayList -> Array in the TypeContainer, as they
18460         were not actually that much faster, and introduced a bug (no error
18461         reports on duplicated methods).
18462
18463         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
18464         source first, this will guarantee that we have a valid expression
18465         before calling in lower levels functions that will require a
18466         resolved object.  Then use this original_source in the
18467         target.ResolveLValue instead of the original source that was
18468         passed to us.
18469
18470         Another change.  Use target.Resolve instead of LValueResolve.
18471         Although we are resolving for LValues, we will let the Assign code
18472         take care of that (it will be called again from Resolve).  This
18473         basically allows code like this:
18474
18475         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
18476         class Y { void A (X x) { x [0] += o; }
18477
18478         The problem was that the indexer was trying to resolve for
18479         set_Item (idx, object o) and never finding one.  The real set_Item
18480         was set_Item (idx, X).  By delaying the process we get the right
18481         semantics. 
18482
18483         Fixes bug 36505
18484
18485 2003-02-23  Martin Baulig  <martin@ximian.com>
18486
18487         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
18488         while calling DoEmit ().
18489
18490         * codegen.cs (EmitContext.Mark): Don't mark locations in other
18491         source files; if you use the #line directive inside a method, the
18492         compiler stops emitting line numbers for the debugger until it
18493         reaches the end of the method or another #line directive which
18494         restores the original file.
18495
18496 2003-02-23  Martin Baulig  <martin@ximian.com>
18497
18498         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
18499
18500 2003-02-23  Martin Baulig  <martin@ximian.com>
18501
18502         * statement.cs (Block.AddChildVariableNames): We need to call this
18503         recursively, not just for our immediate children.
18504
18505 2003-02-23  Martin Baulig  <martin@ximian.com>
18506
18507         * class.cs (Event.Define): Always make the field private, like csc does.
18508
18509         * typemanager.cs (TypeManager.RealMemberLookup): Make events
18510         actually work, fixes bug #37521.
18511
18512 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
18513
18514         * delegate.cs: When creating the various temporary "Parameters"
18515         classes, make sure that we call the ComputeAndDefineParameterTypes
18516         on those new parameters (just like we do with the formal ones), to
18517         allow them to be resolved in the context of the DeclSpace.
18518
18519         This fixes the bug that Dick observed in Bugzilla #38530.
18520
18521 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
18522
18523         * expression.cs (ResolveMemberAccess): When resolving a constant,
18524         do not attempt to pull a constant if the value was not able to
18525         generate a valid constant.
18526
18527         * const.cs (LookupConstantValue): Do not report more errors than required.
18528
18529 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18530
18531         * expression.cs: fixes bug #38328.
18532
18533 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
18534
18535         * class.cs: Changed all the various members that can be part of a
18536         class from being an ArrayList to be an Array of the right type.
18537         During the DefineType type_list, interface_list, delegate_list and
18538         enum_list are turned into types, interfaces, delegates and enums
18539         arrays.  
18540
18541         And during the member population, indexer_list, event_list,
18542         constant_list, field_list, instance_constructor_list, method_list,
18543         operator_list and property_list are turned into their real arrays.
18544
18545         Although we could probably perform this operation earlier, for
18546         good error reporting we need to keep the lists and remove the
18547         lists for longer than required.
18548
18549         This optimization was triggered by Paolo profiling the compiler
18550         speed on the output of `gen-sample-program.pl' perl script. 
18551
18552         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
18553         not crash in methods like MemberLookupFailed that use this field.  
18554
18555         This problem arises when the compiler fails to resolve a type
18556         during interface type definition for example.
18557
18558 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
18559
18560         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
18561         inherit from System.Object, so we have to stop at null, not only
18562         when reaching System.Object.
18563
18564 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
18565
18566         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
18567         DeclaredOnly because the parent indexer might have had a different
18568         name, but did not loop until the top of the hierarchy was reached.
18569
18570         The problem this one fixes is 35492: when a class implemented an
18571         indexer from an interface, we were getting the interface method
18572         (which was abstract) and we were flagging an error (can not invoke
18573         abstract method).
18574
18575         This also keeps bug 33089 functioning, and test-148 functioning.
18576
18577         * typemanager.cs (IsSpecialMethod): The correct way of figuring
18578         out if a method is special is to see if it is declared in a
18579         property or event, or whether it is one of the predefined operator
18580         names.   This should fix correctly #36804.
18581
18582 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
18583
18584         The goal here is to remove the dependency on EmptyCast.Peel ().
18585         Killing it completely.
18586
18587         The problem is that currently in a number of places where
18588         constants are expected, we have to "probe" for an EmptyCast, and
18589         Peel, which is not the correct thing to do, as this will be
18590         repetitive and will likely lead to errors. 
18591
18592         The idea is to remove any EmptyCasts that are used in casts that
18593         can be reduced to constants, so we only have to cope with
18594         constants. 
18595
18596         This bug hunt was triggered by Bug 37363 and the desire to remove
18597         the duplicate pattern where we were "peeling" emptycasts to check
18598         whether they were constants.  Now constants will always be
18599         constants.
18600
18601         * ecore.cs: Use an enumconstant here instead of wrapping with
18602         EmptyCast.  
18603
18604         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
18605         throwing me off.  By handling this we can get rid of a few hacks.
18606
18607         * statement.cs (Switch): Removed Peel() code.
18608
18609 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
18610
18611         * class.cs: Location information for error 508
18612
18613         * expression.cs (New.DoResolve): Add a guard against double
18614         resolution of an expression.  
18615
18616         The New DoResolve might be called twice when initializing field
18617         expressions (see EmitFieldInitializers, the call to
18618         GetInitializerExpression will perform a resolve on the expression,
18619         and later the assign will trigger another resolution
18620
18621         This leads to bugs (#37014)
18622
18623         * delegate.cs: The signature for EndInvoke should contain any ref
18624         or out parameters as well.  We were not doing this in the past. 
18625
18626         * class.cs (Field.Define): Do not overwrite the type definition
18627         inside the `volatile' group.  Turns out that volatile enumerations
18628         were changing the type here to perform a validity test, which
18629         broke conversions. 
18630
18631 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
18632
18633         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
18634         and structs, we do not want to load the instance variable
18635
18636         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
18637         enum_type has to be handled like an object reference (implicit
18638         conversions exists from this to object), but the regular IsClass
18639         and IsValueType tests will never return true for this one.
18640
18641         Also we use TypeManager.IsValueType instead of type.IsValueType,
18642         just for consistency with the rest of the code (this is only
18643         needed if we ever use the construct exposed by test-180.cs inside
18644         corlib, which we dont today).
18645
18646 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
18647
18648         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
18649         just InternalCall.
18650
18651 2003-02-09  Martin Baulig  <martin@ximian.com>
18652
18653         * namespace.cs (Namespace..ctor): Added SourceFile argument.
18654         (Namespace.DefineNamespaces): New static public method; this is
18655         called when we're compiling with debugging to add all namespaces
18656         to the symbol file.
18657
18658         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
18659         pass it to the Namespace's .ctor.
18660
18661         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
18662         and MethodBase arguments; pass the namespace ID to the symwriter;
18663         pass the MethodBase instead of the token to the symwriter.
18664         (SymbolWriter.DefineNamespace): New method to add a namespace to
18665         the symbol file.
18666
18667 2003-02-09  Martin Baulig  <martin@ximian.com>
18668
18669         * symbolwriter.cs: New file.  This is a wrapper around
18670         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
18671         methods here in near future.
18672
18673 2003-02-09  Martin Baulig  <martin@ximian.com>
18674
18675         * codegen.cs (EmitContext.Mark): Just pass the arguments to
18676         ILGenerator.MarkSequencePoint() which are actually used by the
18677         symbol writer.
18678
18679 2003-02-09  Martin Baulig  <martin@ximian.com>
18680
18681         * location.cs (SourceFile): New public sealed class.  This
18682         contains the name and an index which is used in the location's token.
18683         (Location): Reserve an appropriate number of bits in the token for
18684         the source file instead of walking over that list, this gives us a
18685         really huge performance improvement when compiling with debugging.
18686
18687         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
18688         `SourceFile' argument instead of a string.
18689         (Driver.ProcessFile): Add all the files via Location.AddFile(),
18690         but don't parse/tokenize here, we need to generate the list of all
18691         source files before we do that.
18692         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
18693         the files.
18694
18695         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
18696         instead of a string.
18697
18698         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
18699         of a string.
18700
18701 2003-02-09  Martin Baulig  <martin@ximian.com>
18702
18703         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
18704         filename on `#line default'.
18705
18706 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
18707
18708         * statement.cs: don't clear the pinned var when the fixed statement
18709         returns from the method (fixes bug#37752).
18710
18711 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
18712
18713         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
18714         to IsValueType.
18715
18716 2003-02-07  Martin Baulig  <martin@ximian.com>
18717
18718         * driver.cs: Removed the `--debug-args' command line argument.
18719
18720         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
18721         automatically by the AsssemblyBuilder.
18722         (CodeGen.InitializeSymbolWriter): We don't need to call any
18723         initialization function on the symbol writer anymore.  This method
18724         doesn't take any arguments.
18725
18726 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
18727
18728         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
18729         from referenced assemblies as well.
18730
18731 2003-02-02  Martin Baulig  <martin@ximian.com>
18732
18733         * class.cs (MethodData.Emit): Generate debugging info for external methods.
18734
18735 2003-02-02  Martin Baulig  <martin@ximian.com>
18736
18737         * class.cs (Constructor.Emit): Open the symbol writer before
18738         emitting the constructor initializer.
18739         (ConstructorInitializer.Emit): Call ec.Mark() to allow
18740         single-stepping through constructor initializers.
18741
18742 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
18743
18744         * class.cs: Handle error 549: do not allow virtual methods in
18745         sealed classes. 
18746
18747 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
18748
18749         * decl.cs: Check access levels when resolving types
18750
18751 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
18752
18753         * statement.cs: Add parameters and locals set in catch blocks that might 
18754         return to set vector
18755
18756 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
18757
18758         * class.cs (Operator): Set the SpecialName flags for operators.
18759
18760         * expression.cs (Invocation.DoResolve): Only block calls to
18761         accessors and operators on SpecialName methods.
18762
18763         (Cast.TryReduce): Handle conversions from char constants.
18764
18765
18766 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
18767
18768         * statement.cs: small memory and time optimization in FlowBranching.
18769
18770 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
18771
18772         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
18773         problem that the last fix but in the other sid (Set).
18774
18775         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
18776         access when there is no indexer in the hierarchy.
18777
18778 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
18779
18780         * class.cs: Combine some if statements.
18781
18782 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18783
18784         * driver.cs: fixed bug #37187.
18785
18786 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
18787
18788         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
18789         any indexer, it's needed to build a list with all the indexers in the
18790         hierarchy (AllGetters), else we have problems. Fixes #35653.
18791
18792 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
18793
18794         * class.cs (MethodData.Define): It is wrong for an interface
18795         implementation to be static in both cases: explicit and implicit.
18796         We were only handling this in one case.
18797
18798         Improve the if situation there to not have negations.
18799
18800         * class.cs (Field.Define): Turns out that we do not need to check
18801         the unsafe bit on field definition, only on usage.  Remove the test.
18802
18803 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18804
18805         * driver.cs: use assembly.Location instead of Codebase (the latest
18806         patch made mcs fail when using MS assemblies).
18807
18808 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
18809
18810         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
18811         get the path to *corlib.dll.
18812
18813 2003-01-21  Nick Drochak <ndrochak@gol.com>
18814
18815         * cs-tokenizer.cs:
18816         * pending.cs:
18817         * typemanager.cs: Remove compiler warnings
18818
18819 2003-01-20  Duncan Mak  <duncan@ximian.com>
18820
18821         * AssemblyInfo.cs: Bump the version number to 0.19.
18822
18823 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18824
18825         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
18826
18827 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
18828
18829         * class.cs (Constructor::Emit): Emit debugging info for constructors.
18830
18831 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
18832
18833         * cs-parser.jay: Small fix: we were not comparing the constructor
18834         name correctly.   Thanks to Zoltan for the initial pointer.
18835
18836 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
18837
18838         * cs-tokenizer.cs: Set file name when specified with #line
18839
18840 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
18841
18842         * cs-parser.jay: Only perform the constructor checks here if we
18843         are named like the class;  This will help provider a better
18844         error.  The constructor path is taken when a type definition is
18845         not found, but most likely the user forgot to add the type, so
18846         report that rather than the constructor error.
18847
18848 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
18849
18850         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
18851         allocations.
18852
18853 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
18854
18855         * cs-parser.jay: Add cleanup call.
18856
18857 2003-01-13  Duncan Mak  <duncan@ximian.com>
18858
18859         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
18860         consistent with other methods.
18861
18862 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
18863
18864         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
18865
18866 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
18867
18868         * attribute.cs: only set GuidAttr to true when we have a
18869         GuidAttribute.
18870
18871 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18872
18873         * ecore.cs:
18874         * expression.cs:
18875         * typemanager.cs: fixes to allow mcs compile corlib with the new
18876         Type.IsSubclassOf fix.
18877
18878 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
18879
18880         * expression.cs (LocalVariableReference.DoResolve): Classify a
18881         constant as a value, not as a variable.   Also, set the type for
18882         the variable.
18883
18884         * cs-parser.jay (fixed_statement): take a type instead of a
18885         pointer_type, so we can produce a better error message later.
18886
18887         * statement.cs (Fixed.Resolve): Flag types that are not pointers
18888         as an error.  
18889
18890         (For.DoEmit): Make inifinite loops have a
18891         non-conditional branch back.
18892
18893         (Fixed.DoEmit): First populate the pinned variables, then emit the
18894         statement, then clear the variables.  Before I was emitting the
18895         code once for each fixed piece.
18896
18897
18898 2003-01-08  Martin Baulig  <martin@ximian.com>
18899
18900         * statement.cs (FlowBranching.MergeChild): A break in a
18901         SWITCH_SECTION does not leave a loop.  Fixes #36155.
18902
18903 2003-01-08  Martin Baulig  <martin@ximian.com>
18904
18905         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
18906         lives in the same number space than `param_map'.  Fixes #36154.
18907
18908 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
18909
18910         * cs-parser.jay (constructor_declaration): Set the
18911         Constructor.ModFlags before probing for it.  This makes the
18912         compiler report 514, 515 and 132 (the code was there, but got
18913         broken). 
18914
18915         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
18916         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
18917         (GotoCase.Resolve): Set `Returns' to ALWAYS.
18918
18919 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
18920
18921         * enum.cs: create the enum static fields using the enum type.
18922
18923 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
18924
18925         * class.cs: don't try to create the ParamBuilder for the return
18926         type if it's not needed (and handle it breaking for the ms runtime
18927         anyway).
18928
18929 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
18930
18931         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
18932
18933 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
18934
18935         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
18936         the command.   This showed up while compiling the JANET source
18937         code, which used \r as its only newline separator.
18938
18939 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
18940
18941         * class.cs (Method.Define): If we are an operator (because it
18942         reuses our code), then set the SpecialName and HideBySig.  #36128
18943
18944 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
18945
18946         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
18947         exception, report error 120 `object reference required'.
18948
18949         * driver.cs: Add --pause option, used during to measure the size
18950         of the process as it goes with --timestamp.
18951
18952         * expression.cs (Invocation.DoResolve): Do not allow methods with
18953         SpecialName to be invoked.
18954
18955 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
18956
18957         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
18958         number before adding it.
18959
18960 2002-12-21  Ravi Pratap  <ravi@ximian.com>
18961
18962         * ecore.cs (StandardImplicitConversion): When in an unsafe
18963         context, we allow conversion between void * to any other pointer
18964         type. This fixes bug #35973.
18965
18966 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
18967
18968         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
18969         is not thrown when extensionless outputs are used 
18970
18971 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18972
18973         * rootcontext.cs: fixed compilation of corlib.
18974
18975 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
18976
18977         * attribute.cs (Attributes.Contains): Add new method.
18978
18979         * class.cs (MethodCore.LabelParameters): if the parameter is an
18980         `out' parameter, check that no attribute `[In]' has been passed.
18981
18982         * enum.cs: Handle the `value__' name in an enumeration.
18983
18984 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
18985
18986         * decl.cs: Added special case to allow overrides on "protected
18987         internal" methods
18988
18989 2002-12-18  Ravi Pratap  <ravi@ximian.com>
18990
18991         * attribute.cs (Attributes.AddAttributeSection): Rename to this
18992         since it makes much more sense.
18993
18994         (Attributes.ctor): Don't require a Location parameter.
18995
18996         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
18997
18998         * attribute.cs (ApplyAttributes): Remove extra Location parameters
18999         since we already have that information per attribute.
19000
19001         * everywhere : make appropriate changes.
19002
19003         * class.cs (LabelParameters): Write the code which actually
19004         applies attributes to the return type. We can't do this on the MS
19005         .NET runtime so we flag a warning in the case an exception is
19006         thrown.
19007
19008 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
19009
19010         * const.cs: Handle implicit null conversions here too.
19011
19012 2002-12-17  Ravi Pratap  <ravi@ximian.com>
19013
19014         * class.cs (MethodCore.LabelParameters): Remove the extra
19015         Type [] parameter since it is completely unnecessary. Instead
19016         pass in the method's attributes so that we can extract
19017         the "return" attribute.
19018
19019 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
19020
19021         * cs-parser.jay (parse): Use Report.Error to flag errors instead
19022         of ignoring it and letting the compile continue.
19023
19024         * typemanager.cs (ChangeType): use an extra argument to return an
19025         error condition instead of throwing an exception.
19026
19027 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
19028
19029         * expression.cs (Unary.TryReduce): mimic the code for the regular
19030         code path.  Perform an implicit cast in the cases where we can
19031         implicitly convert to one of the integral types, and then reduce
19032         based on that constant.   This fixes bug #35483.
19033
19034 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19035
19036         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
19037
19038 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19039
19040         * namespace.cs: fixed bug #35489.
19041
19042 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
19043
19044         * class.cs: Remove some dead code.
19045
19046         * cs-parser.jay: Estimate the number of methods needed
19047         (RootContext.MethodCount);
19048
19049         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
19050         numbers instead of StringBuilders.
19051
19052         * support.cs (PtrHashtable): Add constructor with initial size;
19053         We can now reduce reallocations of the method table.
19054
19055 2002-12-10  Ravi Pratap  <ravi@ximian.com>
19056
19057         * attribute.cs (ApplyAttributes): Keep track of the emitted
19058         attributes on a per-target basis. This fixes bug #35413.
19059
19060 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
19061
19062         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
19063         default to the Windows 1252 encoding.
19064
19065         (UnixParseOption): Support version, thanks to Alp for the missing
19066         pointer. 
19067
19068         * AssemblyInfo.cs: Add nice assembly information.
19069
19070         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
19071         (bug 35169).
19072
19073         * cs-parser.jay: Allow a trailing comma before the close bracked
19074         in the attribute_section production.
19075
19076         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
19077         address of the instance was being taken, I will take this out,
19078         because we take the address of the object immediately here.
19079
19080 2002-12-09  Ravi Pratap  <ravi@ximian.com>
19081
19082         * typemanager.cs (AreMultipleAllowed): Take care of the most
19083         obvious case where attribute type is not in the current assembly -
19084         stupid me ;-)
19085
19086 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
19087
19088         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
19089         definitions, instead of doing that afterwards.  
19090
19091         Also we use a nice little hack, depending on the constructor, we
19092         know if we are a "composed" name or a simple name.  Hence, we
19093         avoid the IndexOf test, and we avoid 
19094
19095         * codegen.cs: Add code to assist in a bug reporter to track down
19096         the source of a compiler crash. 
19097
19098 2002-12-07  Ravi Pratap  <ravi@ximian.com>
19099
19100         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
19101         types have been emitted for a given element and flag an error
19102         if something which does not have AllowMultiple set is used more
19103         than once.
19104
19105         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
19106         attribute types and their corresponding AllowMultiple properties
19107
19108         (AreMultipleAllowed): Check the property for a given type.
19109
19110         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
19111         property in the case we have a TypeContainer.
19112
19113         (Attributes.AddAttribute): Detect duplicates and just skip on
19114         adding them. This trivial fix catches a pretty gross error in our
19115         attribute emission - global attributes were being emitted twice!
19116
19117         Bugzilla bug #33187 is now fixed.
19118
19119 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
19120
19121         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
19122         instead of pp_and).
19123
19124         * expression.cs (Binary.ResolveOperator): I can only use the
19125         Concat (string, string, string) and Concat (string, string,
19126         string, string) if the child is actually a concatenation of
19127         strings. 
19128
19129 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
19130
19131         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
19132         context where we need a 2-character lookahead.
19133
19134         * pending.cs (PendingImplementation): Rework so we can keep track
19135         of interface types all the time, and flag those which were
19136         implemented by parents as optional.
19137
19138 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
19139
19140         * expression.cs (Binary.ResolveOperator): Use
19141         String.Concat(string,string,string) or
19142         String.Concat(string,string,string,string) when possible. 
19143
19144         * typemanager: More helper methods.
19145
19146
19147 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
19148
19149         * pending.cs: remove the bogus return from GetMissingInterfaces()
19150         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
19151
19152 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19153
19154         * namespace.cs: avoid duplicated 'using xxx' being added to
19155         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
19156         when we get more than one 'using' statement for the same namespace.
19157         Report a CS0105 warning for it.
19158
19159 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
19160
19161         * cs-tokenizer.cs (consume_identifier): use read directly, instead
19162         of calling getChar/putback, uses internal knowledge of it.    
19163
19164         (xtoken): Reorder tokenizer so most common patterns are checked
19165         first.  This reduces the compilation time in another 5% (from 8.11s
19166         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
19167
19168         The parsing time is 22% of the compilation in mcs, and from that
19169         64% is spent on the tokenization process.  
19170
19171         I tried using a binary search for keywords, but this is slower
19172         than the hashtable.  Another option would be to do a couple of
19173         things:
19174
19175                 * Not use a StringBuilder, instead use an array of chars,
19176                   with a set value.  Notice that this way we could catch
19177                   the 645 error without having to do it *afterwards*.
19178
19179                 * We could write a hand-parser to avoid the hashtable
19180                   compares altogether.
19181
19182         The identifier consumption process takes 37% of the tokenization
19183         time.  Another 15% is spent on is_number.  56% of the time spent
19184         on is_number is spent on Int64.Parse:
19185
19186                 * We could probably choose based on the string length to
19187                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
19188                   computations. 
19189
19190         Another 3% is spend on wrapping `xtoken' in the `token' function.
19191
19192         Handle 0xa0 as whitespace (#34752)
19193
19194 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
19195
19196         * typemanager.cs (IsCLRType): New routine to tell whether a type
19197         is one of the builtin types.  
19198
19199         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
19200         typecode in more places instead of doing pointer comparissions.
19201         We could leverage some knowledge about the way the typecodes are
19202         laid out.
19203
19204         New code to cache namespaces in assemblies, it is currently not
19205         invoked, to be used soon.
19206
19207         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
19208
19209         * expression.cs (Binary.ResolveOperator): specially handle
19210         strings, and do not perform user-defined operator overloading for
19211         built-in types.
19212
19213 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
19214
19215         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
19216         internalcall as it is a pretty simple operation;  Avoid whenever
19217         possible to call Char.IsLetter.
19218
19219         (consume_identifier): Cut by half the number of
19220         hashtable calls by merging the is_keyword and GetKeyword behavior.
19221
19222         Do not short-circuit, because if we do, we
19223         report errors (ie, #if false && true would produce an invalid
19224         directive error);
19225
19226
19227 2002-11-24  Martin Baulig  <martin@ximian.com>
19228
19229         * expression.cs (Cast.TryReduce): If we're in checked syntax,
19230         check constant ranges and report a CS0221.  Fixes #33186.
19231
19232 2002-11-24  Martin Baulig  <martin@ximian.com>
19233
19234         * cs-parser.jay: Make this work for uninitialized variable
19235         declarations in the `for' initializer.  Fixes #32416.
19236
19237 2002-11-24  Martin Baulig  <martin@ximian.com>
19238
19239         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
19240         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
19241
19242 2002-11-24  Martin Baulig  <martin@ximian.com>
19243
19244         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
19245         argument; if true, we also check for user-defined conversions.
19246         This is only needed if both arguments are of a user-defined type.
19247         Fixes #30443, added test-175.cs.
19248         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
19249
19250         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
19251
19252 2002-11-24  Martin Baulig  <martin@ximian.com>
19253
19254         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
19255         function to get the store opcode.
19256         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
19257         only emit the Ldelema if the store opcode is Stobj.  You must run
19258         both test-34 and test-167 to test this.  Fixes #34529.
19259
19260 2002-11-23  Martin Baulig  <martin@ximian.com>
19261
19262         * ecore.cs (Expression.MemberLookup): Added additional
19263         `qualifier_type' argument which is used when we're being called
19264         from MemberAccess.DoResolve() and null if we're called from a
19265         SimpleName lookup.
19266         (Expression.MemberLookupFailed): New method to report errors; this
19267         does the CS1540 check and reports the correct error message.
19268
19269         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
19270         argument for the CS1540 check and redone the way how we're dealing
19271         with private members.  See the comment in the source code for details.
19272         (FilterWithClosure): Reverted this back to revision 1.197; renamed
19273         `closure_start_type' to `closure_qualifier_type' and check whether
19274         it's not null.  It was not this filter being broken, it was just
19275         being called with the wrong arguments.
19276
19277         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
19278         and pass it the correct `qualifier_type'; this also does the error
19279         handling for us.
19280
19281 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
19282
19283         * expression.cs (Invocation.EmitParams): If the we are dealing
19284         with a non-built-in value type, load its address as well.
19285
19286         (ArrayCreation): Use a a pretty constant instead
19287         of the hardcoded value 2.   Use 6 instead of 2 for the number of
19288         static initializers.  
19289
19290         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
19291         because they are not really value types, just glorified integers. 
19292
19293         * driver.cs: Do not append .exe, the CSC compiler does not do it.
19294
19295         * ecore.cs: Remove redundant code for enumerations, make them use
19296         the same code path as everything else, fixes the casting issue
19297         with enumerations in Windows.Forms.
19298
19299         * attribute.cs: Do only cast to string if it is a string, the
19300         validation happens later.
19301
19302         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
19303         people upgrade their corlibs.
19304
19305         * ecore.cs: Oops, enumerations were not following the entire code path
19306
19307 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
19308
19309         * typemanager.cs (FilterWithClosure): Commented out the test for
19310         1540 in typemanager.cs, as it has problems when accessing
19311         protected methods from a parent class (see test-174.cs). 
19312
19313         * attribute.cs (Attribute.ValidateGuid): new method.
19314         (Attribute.Resolve): Use above.
19315
19316 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
19317
19318         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
19319
19320         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
19321         handling for enumerations, as we only needed the TypeContainer
19322         functionality to begin with (this is required for the fix below to
19323         work for enums that reference constants in a container class for
19324         example). 
19325
19326         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
19327
19328         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
19329         a valid TypeBuilder to perform lookups on.o
19330
19331         * class.cs (InheritableMemberSignatureCompare): Use true in the
19332         call to GetGetMethod and GetSetMethod, because we are comparing
19333         the signature, and we need to get the methods *even* if they are
19334         private. 
19335
19336         (PropertyBase.CheckBase): ditto.
19337
19338         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
19339         GotoCase.Resolve): Use Peel on EmpytCasts.
19340
19341         * ecore.cs (EmptyCast): drop child, add Peel method.
19342
19343 2002-11-17  Martin Baulig  <martin@ximian.com>
19344
19345         * ecore.cs (EmptyCast.Child): New public property.
19346
19347         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
19348         label resolved to an EmptyCast.  Fixes #34162.
19349         (GotoCase.Resolve): Likewise.
19350         (Block.EmitMeta): Likewise.
19351
19352 2002-11-17  Martin Baulig  <martin@ximian.com>
19353
19354         * expression.cs (Invocation.BetterConversion): Prefer int over
19355         uint; short over ushort; long over ulong for integer literals.
19356         Use ImplicitConversionExists instead of StandardConversionExists
19357         since we also need to check for user-defined implicit conversions.
19358         Fixes #34165.  Added test-173.cs.
19359
19360 2002-11-16  Martin Baulig  <martin@ximian.com>
19361
19362         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
19363         with the `true' and `false' literals.  Fixes #33151.
19364
19365 2002-11-16  Martin Baulig  <martin@ximian.com>
19366
19367         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
19368         October 22nd; don't do the cs1540 check for static members.
19369
19370         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
19371         now using our own filter here and doing the cs1540 check again.
19372
19373 2002-11-16  Martin Baulig  <martin@ximian.com>
19374
19375         * support.cs (InternalParameters): Don't crash if we don't have
19376         any fixed parameters.  Fixes #33532.
19377
19378 2002-11-16  Martin Baulig  <martin@ximian.com>
19379
19380         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
19381         when looking up static methods to make this work on Windows.
19382         Fixes #33773.
19383
19384 2002-11-16  Martin Baulig  <martin@ximian.com>
19385
19386         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
19387         a setter rather than using PropertyInfo.CanWrite.
19388
19389 2002-11-15  Nick Drochak  <ndrochak@gol.com>
19390
19391         * class.cs: Allow acces to block member by subclasses. Fixes build
19392         breaker.
19393
19394 2002-11-14  Martin Baulig  <martin@ximian.com>
19395
19396         * class.cs (Constructor.Emit): Added the extern/block check.
19397         Fixes bug #33678.
19398
19399 2002-11-14  Martin Baulig  <martin@ximian.com>
19400
19401         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
19402         iteration while looking for indexers, this is needed because the
19403         indexer may have a different name in our base classes.  Fixed the
19404         error reporting (no indexers at all, not get accessor, no
19405         overloaded match).  Fixes bug #33089.
19406         (IndexerAccess.DoResolveLValue): Likewise.
19407
19408 2002-11-14  Martin Baulig  <martin@ximian.com>
19409
19410         * class.cs (PropertyBase.CheckBase): Make this work for multiple
19411         indexers.  Fixes the first part of bug #33089.
19412         (MethodSignature.InheritableMemberSignatureCompare): Added support
19413         for properties.
19414
19415 2002-11-13  Ravi Pratap  <ravi@ximian.com>
19416
19417         * attribute.cs (Attribute.Resolve): Catch the
19418         NullReferenceException and report it since it isn't supposed to
19419         happen. 
19420
19421 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
19422
19423         * expression.cs (Binary.EmitBranchable): Also handle the cases for
19424         LogicalOr and LogicalAnd that can benefit from recursively
19425         handling EmitBranchable.  The code now should be nice for Paolo.
19426
19427 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
19428
19429         * typemanager.cs (LookupType): Added a negative-hit hashtable for
19430         the Type lookups, as we perform quite a number of lookups on
19431         non-Types.  This can be removed once we can deterministically tell
19432         whether we have a type or a namespace in advance.
19433
19434         But this might require special hacks from our corlib.
19435
19436         * TODO: updated.
19437
19438         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
19439         and double which avoids a conversion from an integer to a double.
19440
19441         * expression.cs: tiny optimization, avoid calling IsConstant,
19442         because it effectively performs the lookup twice.
19443
19444 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
19445
19446         But a bogus return here to keep the semantics of the old code
19447         until the Mono runtime is fixed.
19448
19449         * pending.cs (GetMissingInterfaces): New method used to remove all
19450         the interfaces that are already implemented by our parent
19451         classes from the list of pending methods. 
19452
19453         * interface.cs: Add checks for calls after ResolveTypeExpr.
19454
19455 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
19456
19457         * class.cs (Class.Emit): Report warning 67: event not used if the
19458         warning level is beyond 3.
19459
19460         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
19461         being a NullLiteral.
19462
19463         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
19464         specifiers. 
19465
19466         * class.cs (TypeContainer.GetClassBases): Cover a missing code
19467         path that might fail if a type can not be resolved.
19468
19469         * expression.cs (Binary.Emit): Emit unsigned versions of the
19470         operators. 
19471
19472         * driver.cs: use error 5.
19473
19474 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
19475
19476         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
19477
19478 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
19479
19480         * cs-parser.jay (switch_section): A beautiful patch from Martin
19481         Baulig that fixed 33094.
19482
19483 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
19484
19485         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
19486         Check whether the base is abstract and report an error if so.
19487
19488         * expression.cs (IndexerAccess.DoResolveLValue,
19489         IndexerAccess.DoResolve): ditto. 
19490
19491         (Invocation.DoResolve): ditto.
19492
19493         (Invocation.FullMethodDesc): Improve the report string.
19494
19495         * statement.cs (Block): Eliminate IsVariableDefined as it is
19496         basically just a wrapper for GetVariableInfo.
19497
19498         * ecore.cs (SimpleName): Use new 
19499
19500         * support.cs (ReflectionParamter.ParameterType): We unwrap the
19501         type, as we return the actual parameter ref/unref state on a
19502         different call.
19503
19504 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
19505
19506         * support.cs: Return proper flags REF/OUT fixing the previous
19507         commit.  
19508
19509         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
19510         not used to mean `ref' but `ref or out' in ParameterReference
19511
19512         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
19513         full type signature instead of calling TypeManger.CSharpName
19514         ourselves. 
19515
19516         * support.cs (InternalParameters.ParameterDesc): Do not compare
19517         directly to the modflags, because REF/OUT will actually be bitsets
19518         if set. 
19519
19520         * delegate.cs (VerifyMethod): Check also the modifiers.
19521
19522         * cs-tokenizer.cs: Fix bug where floating point values with an
19523         exponent where a sign was missing was ignored.
19524
19525         * driver.cs: Allow multiple assemblies to be specified in a single
19526         /r: argument
19527
19528 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
19529
19530         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
19531         because identifiers after a parenthesis would end up in this kind
19532         of production, and we needed to desamiguate it for having casts
19533         like:
19534
19535                 (UserDefinedType *) xxx
19536
19537 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
19538
19539         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
19540         we should set on the Bindingflags.NonPublic, but not turn on
19541         private_ok.  private_ok controls whether a Private member is
19542         returned (this is chekced on the filter routine), while the
19543         BindingFlags.NonPublic just controls whether private/protected
19544         will be allowed.   This fixes the problem part of the problem of
19545         private properties being allowed to be used in derived classes.
19546
19547         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
19548         so we can call the children DoResolveLValue method (this will
19549         properly signal errors on lvalue assignments to base properties)
19550
19551         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
19552         getter are null, and we have a property info, we know that this
19553         happened because the lookup failed, so we report an error 122 for
19554         protection level violation.
19555
19556         We also silently return if setter and getter are null in the
19557         resolve functions, this condition only happens if we have flagged
19558         the error before.  This is the other half of the problem. 
19559
19560         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
19561         not have accessibility information, that is why we were returning
19562         true in the filter function in typemanager.cs.
19563
19564         To properly report 122 (property is inaccessible because of its
19565         protection level) correctly, we report this error in ResolveAccess
19566         by failing if both the setter and the getter are lacking (ie, the
19567         lookup failed). 
19568
19569         DoResolve and DoLResolve have been modified to check for both
19570         setter/getter being null and returning silently, the reason being
19571         that I did not want to put the knowledge about this error in upper
19572         layers, like:
19573
19574         int old = Report.Errors;
19575         x = new PropertyExpr (...);
19576         if (old != Report.Errors)
19577                 return null;
19578         else
19579                 return x;
19580
19581         So the property expr is returned, but it is invalid, so the error
19582         will be flagged during the resolve process. 
19583
19584         * class.cs: Remove InheritablePropertySignatureCompare from the
19585         class, as we no longer depend on the property signature to compute
19586         whether it is possible to implement a method or not.
19587
19588         The reason is that calling PropertyInfo.GetGetMethod will return
19589         null (in .NET, in Mono it works, and we should change this), in
19590         cases where the Get Method does not exist in that particular
19591         class.
19592
19593         So this code:
19594
19595         class X { public virtual int A { get { return 1; } } }
19596         class Y : X { }
19597         class Z : Y { public override int A { get { return 2; } } }
19598
19599         Would fail in Z because the parent (Y) would not have the property
19600         defined.  So we avoid this completely now (because the alternative
19601         fix was ugly and slow), and we now depend exclusively on the
19602         method names.
19603
19604         (PropertyBase.CheckBase): Use a method-base mechanism to find our
19605         reference method, instead of using the property.
19606
19607         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
19608         routines are gone now.
19609
19610         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
19611         names, they were incorrectly named.
19612
19613         * cs-tokenizer.cs: Return are more gentle token on failure. 
19614
19615         * pending.cs (PendingImplementation.InterfaceMethod): This routine
19616         had an out-of-sync index variable, which caused it to remove from
19617         the list of pending methods the wrong method sometimes.
19618
19619 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
19620
19621         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
19622         CanWrite, because those refer to this particular instance of the
19623         property, and do not take into account the fact that we can
19624         override single members of a property.
19625
19626         Constructor requires an EmitContext.  The resolution process does
19627         not happen here, but we need to compute the accessors before,
19628         because the resolution does not always happen for properties.
19629
19630         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
19631         subclass, before we did not update this flag, but we did update
19632         bindingflags. 
19633
19634         (GetAccessors): Drop this routine, as it did not work in the
19635         presence of partially overwritten set/get methods. 
19636
19637         Notice that this broke the cs1540 detection, but that will require
19638         more thinking. 
19639
19640 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19641
19642         * class.cs:
19643         * codegen.cs:
19644         * driver.cs: issue a warning instead of an error if we don't support
19645         debugging for the platform. Also ignore a couple of errors that may
19646         arise when trying to write the symbols. Undo my previous patch.
19647
19648 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19649
19650         * driver.cs: ignore /debug switch except for Unix platforms.
19651
19652 2002-10-23  Nick Drochak  <ndrochak@gol.com>
19653
19654         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
19655
19656 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
19657
19658         * driver.cs: Do not make mcs-debug conditional, so we do not break
19659         builds that use it.
19660
19661         * statement.cs (UsageVector.MergeChildren): I would like Martin to
19662         review this patch.  But basically after all the children variables
19663         have been merged, the value of "Breaks" was not being set to
19664         new_breaks for Switch blocks.  I think that it should be set after
19665         it has executed.  Currently I set this to the value of new_breaks,
19666         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
19667         conservative, but I do not understand this code very well.
19668
19669         I did not break anything in the build, so that is good ;-)
19670
19671         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
19672
19673 2002-10-20  Mark Crichton  <crichton@gimp.org>
19674
19675         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
19676
19677 2002-10-20  Nick Drochak  <ndrochak@gol.com>
19678
19679         * cfold.cs: Fixed compile blocker.
19680
19681 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
19682
19683         * driver.cs: I was chekcing the key, not the file.
19684
19685 2002-10-19  Ravi Pratap  <ravi@ximian.com>
19686
19687         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
19688         message that we were generating - we just need to silently return
19689         a null.
19690
19691 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
19692
19693         * class.cs (Event.Define): Change my previous commit, as this
19694         breaks the debugger.  This is a temporary hack, as it seems like
19695         the compiler is generating events incorrectly to begin with.
19696
19697         * expression.cs (Binary.ResolveOperator): Added support for 
19698         "U operator - (E x, E y)"
19699
19700         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
19701         y)".
19702
19703         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
19704         init-only variables, but this path did not take into account that
19705         there might be also instance readonly variables.  Correct this
19706         problem. 
19707
19708         This fixes bug 32253
19709
19710         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
19711         delegates as well.
19712
19713         * driver.cs: Change the extension for modules to `netmodule'
19714
19715         * cs-parser.jay: Improved slightly the location tracking for
19716         the debugger symbols.
19717
19718         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
19719         modifiers that were specified instead of the hardcoded value
19720         (FamAndAssem).  This was basically ignoring the static modifier,
19721         and others.  Fixes 32429.
19722
19723         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
19724         fixed a bug in the process (32476)
19725
19726         * expression.cs (ArrayAccess.EmitAssign): Patch from
19727         hwang_rob@yahoo.ca that fixes bug 31834.3
19728
19729 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
19730
19731         * driver.cs: Make the module extension .netmodule.
19732
19733 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
19734
19735         * driver.cs: Report an error if the resource file is not found
19736         instead of crashing.
19737
19738         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
19739         false, like Emit does.
19740
19741 2002-10-16  Nick Drochak  <ndrochak@gol.com>
19742
19743         * typemanager.cs: Remove unused private member.  Also reported mcs
19744         bug to report this as a warning like csc.
19745
19746 2002-10-15  Martin Baulig  <martin@gnome.org>
19747
19748         * statement.cs (Statement.Emit): Made this a virtual method; emits
19749         the line number info and calls DoEmit().
19750         (Statement.DoEmit): New protected abstract method, formerly knows
19751         as Statement.Emit().
19752
19753         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
19754
19755 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
19756
19757         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
19758         have fixed a remaining problem: not every AddXXXX was adding a
19759         fully qualified name.  
19760
19761         Now everyone registers a fully qualified name in the DeclSpace as
19762         being defined instead of the partial name.  
19763
19764         Downsides: we are slower than we need to be due to the excess
19765         copies and the names being registered this way.  
19766
19767         The reason for this is that we currently depend (on the corlib
19768         bootstrap for instance) that types are fully qualified, because
19769         we dump all the types in the namespace, and we should really have
19770         types inserted into the proper namespace, so we can only store the
19771         basenames in the defined_names array.
19772
19773 2002-10-10  Martin Baulig  <martin@gnome.org>
19774
19775         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
19776         from bug #31834, see the bug report for a testcase which is
19777         miscompiled.
19778
19779 2002-10-10  Martin Baulig  <martin@gnome.org>
19780
19781         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
19782         flow analysis code for this.
19783
19784         * statement.cs (Do, While, For): Tell the flow analysis code about
19785         infinite loops.
19786         (FlowBranching.UsageVector): Added support for infinite loops.
19787         (Block.Resolve): Moved the dead code elimination here and use flow
19788         analysis to do it.
19789
19790 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
19791
19792         * class.cs (Field.Define): Catch cycles on struct type
19793         definitions. 
19794
19795         * typemanager.cs (IsUnmanagedtype): Do not recursively check
19796         fields if the fields are static.  We only need to check instance
19797         fields. 
19798
19799         * expression.cs (As.DoResolve): Test for reference type.
19800
19801         * statement.cs (Using.ResolveExpression): Use
19802         ConvertImplicitRequired, not ConvertImplicit which reports an
19803         error on failture
19804         (Using.ResolveLocalVariableDecls): ditto.
19805
19806         * expression.cs (Binary.ResolveOperator): Report errors in a few
19807         places where we had to.
19808
19809         * typemanager.cs (IsUnmanagedtype): Finish implementation.
19810
19811 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
19812
19813         * expression.cs: Use StoreFromPtr instead of extracting the type
19814         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
19815
19816         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
19817         an enumeration value to a System.Enum, but System.Enum is not a
19818         value type, but an class type, so we need to box.
19819
19820         (Expression.ConvertExplicit): One codepath could return
19821         errors but not flag them.  Fix this.  Fixes #31853
19822
19823         * parameter.cs (Resolve): Do not allow void as a parameter type.
19824
19825 2002-10-06  Martin Baulig  <martin@gnome.org>
19826
19827         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
19828         if it's a class type and not a struct.  Fixes #31815.
19829
19830 2002-10-06  Martin Baulig  <martin@gnome.org>
19831
19832         * statement.cs: Reworked the flow analysis code a bit to make it
19833         usable for dead code elimination.
19834
19835 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19836
19837         * cs-parser.jay: allow empty source files. Fixes bug #31781.
19838
19839 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
19840
19841         * expression.cs (ComposedCast.DoResolveType): A quick workaround
19842         to fix the test 165, will investigate deeper.
19843
19844 2002-10-04  Martin Baulig  <martin@gnome.org>
19845
19846         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
19847         finally blocks actually work.
19848         (Try.Resolve): We don't need to create a sibling for `finally' if
19849         there is no finally block.
19850
19851 2002-10-04  Martin Baulig  <martin@gnome.org>
19852
19853         * class.cs (Constructor.Define): The default accessibility for a
19854         non-default constructor is private, not public.
19855
19856 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
19857
19858         * class.cs (Constructor): Make AllowedModifiers public, add
19859         EXTERN.
19860
19861         * cs-parser.jay: Perform the modifiers test here, as the
19862         constructor for the Constructor class usually receives a zero
19863         because of the way we create it (first we create, later we
19864         customize, and we were never checking the modifiers).
19865
19866         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
19867         is a version of LookupTypeReflection that includes the type-name
19868         cache.  This can be used as a fast path for functions that know
19869         the fully qualified name and are only calling into *.GetType() to
19870         obtain a composed type.
19871
19872         This is also used by TypeManager.LookupType during its type
19873         composition.
19874
19875         (LookupType): We now also track the real type name, as sometimes
19876         we can get a quey for the real type name from things like
19877         ComposedCast.  This fixes bug 31422.
19878
19879         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
19880         complete type fullname, it does not have to go through the type
19881         resolution system to obtain the composed version of the type (for
19882         obtaining arrays or pointers).
19883
19884         (Conditional.Emit): Use the EmitBoolExpression to
19885         generate nicer code, as requested by Paolo.
19886
19887         (ArrayCreation.CheckIndices): Use the patch from
19888         hwang_rob@yahoo.ca to validate the array initializers. 
19889
19890 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
19891
19892         * class.cs (ConstructorInitializer.Emit): simplify code by using
19893         Invocation.EmitCall, and at the same time, fix the bugs in calling
19894         parent constructors that took variable arguments. 
19895
19896         * ecore.cs (Expression.ConvertNumericExplicit,
19897         Expression.ImplicitNumericConversion): Remove the code that
19898         manually wrapped decimal (InternalTypeConstructor call is now gone
19899         as well).
19900
19901         * expression.cs (Cast.TryReduce): Also handle decimal types when
19902         trying to perform a constant fold on the type.
19903
19904         * typemanager.cs (IsUnmanagedtype): Partially implemented.
19905
19906         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
19907         that only turned off an error report, and did nothing else. 
19908
19909 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
19910
19911         * driver.cs: Handle and ignore /fullpaths
19912
19913 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
19914
19915         * expression.cs (Binary.ResolveOperator): Catch the case where
19916         DoNumericPromotions returns true, 
19917
19918         (Binary.DoNumericPromotions): Simplify the code, and the tests.
19919
19920 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
19921
19922         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
19923         report error 70.
19924
19925 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
19926
19927         * ecore.cs (ConvertNumericExplicit): It is not enough that the
19928         conversion exists, but it is also required that the conversion be
19929         performed.  This manifested in "(Type64Enum) 2".  
19930
19931         * class.cs (TypeManager.AddMethod): The fix is not to change
19932         AddEnum, because that one was using a fully qualified name (every
19933         DeclSpace derivative does), but to change the AddMethod routine
19934         that was using an un-namespaced name.  This now correctly reports
19935         the duplicated name.
19936
19937         Revert patch until I can properly fix it.  The issue
19938         is that we have a shared Type space across all namespaces
19939         currently, which is wrong.
19940
19941         Options include making the Namespace a DeclSpace, and merge
19942         current_namespace/current_container in the parser.
19943
19944 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
19945
19946         * cs-parser.jay: Improve error reporting when we get a different
19947         kind of expression in local_variable_type and
19948         local_variable_pointer_type. 
19949
19950         Propagate this to avoid missleading errors being reported.
19951
19952         * ecore.cs (ImplicitReferenceConversion): treat
19953         TypeManager.value_type as a target just like object_type.   As
19954         code like this:
19955
19956         ValueType v = 1;
19957
19958         Is valid, and needs to result in the int 1 being boxed before it
19959         is assigned to the value type v.
19960
19961         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
19962         to validate the enumeration name.
19963
19964         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
19965         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
19966         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
19967
19968         * ecore.cs (TryImplicitIntConversion): When doing an
19969         implicit-enumeration-conversion, check if the type is 64-bits and
19970         perform a conversion before passing to EnumConstant.
19971
19972 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
19973
19974         * decl.cs (Error_AmbiguousTypeReference); New routine used to
19975         report ambiguous type references.  Unlike the MS version, we
19976         report what the ambiguity is.   Innovation at work ;-)
19977
19978         (DeclSpace.FindType): Require a location argument to
19979         display when we display an ambiguous error.
19980
19981         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
19982
19983         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
19984
19985         * expression.cs (EmitDynamicInitializers): Apply patch from
19986         hwang_rob@yahoo.ca that fixes the order in which we emit our
19987         initializers. 
19988
19989 2002-09-21  Martin Baulig  <martin@gnome.org>
19990
19991         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
19992         delegate takes no arguments.
19993
19994 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
19995
19996         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
19997         from integers.
19998
19999         * expression.cs: Extract the underlying type.
20000
20001         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
20002
20003         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
20004
20005 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
20006
20007         * class.cs (TypeContainer.DefineType): We can not use the nice
20008         PackingSize with the size set to 1 DefineType method, because it
20009         will not allow us to define the interfaces that the struct
20010         implements.
20011
20012         This completes the fixing of bug 27287
20013
20014         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
20015         means also structs.  This fixes part of the problem. 
20016         (Expresion.ImplicitReferenceConversionExists): ditto.
20017
20018         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
20019         error if there were no errors reported during the type lookup
20020         process, to avoid duplicates or redundant errors.  Without this
20021         you would get an ambiguous errors plus a type not found.  We have
20022         beaten the user enough with the first error.  
20023
20024         (DeclSparce.FindType): Emit a warning if we have an ambiguous
20025         reference. 
20026
20027         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
20028         during the resolution process, stop the lookup, this avoids
20029         repeated error reports (same error twice).
20030
20031         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
20032
20033         * typemanager.cs (LookupType): Redo the type lookup code to match
20034         the needs of System.Reflection.  
20035
20036         The issue is that System.Reflection requires references to nested
20037         types to begin with a "+" sign instead of a dot.  So toplevel
20038         types look like: "NameSpace.TopLevelClass", and nested ones look
20039         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
20040         levels. 
20041
20042 2002-09-19  Martin Baulig  <martin@gnome.org>
20043
20044         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
20045         says that a method always returns or always throws an exception,
20046         don't report the CS0161.
20047
20048         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
20049         set `Returns = new_returns'.
20050
20051 2002-09-19  Martin Baulig  <martin@gnome.org>
20052
20053         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
20054         to an enum constant, check for a CS0176.
20055
20056 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
20057
20058         * class.cs (TypeContainer.CheckPairedOperators): Now we check
20059         for operators that must be in pairs and report errors.
20060
20061         * ecore.cs (SimpleName.DoResolveType): During the initial type
20062         resolution process, when we define types recursively, we must
20063         check first for types in our current scope before we perform
20064         lookups in the enclosing scopes.
20065
20066         * expression.cs (MakeByteBlob): Handle Decimal blobs.
20067
20068         (Invocation.VerifyArgumentsCompat): Call
20069         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
20070         I thought we were supposed to always call this, but there are a
20071         few places in the code where we dont do it.
20072
20073 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
20074
20075         * driver.cs: Add support in -linkres and -resource to specify the
20076         name of the identifier.
20077
20078 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
20079
20080         * ecore.cs (StandardConversionExists): Sync with the conversion
20081         code: allow anything-* to void* conversions.
20082
20083         (FindMostSpecificSource): Use an Expression argument
20084         instead of a Type, because we might be handed over a Literal which
20085         gets a few more implicit conversions that plain types do not.  So
20086         this information was being lost.
20087
20088         Also, we drop the temporary type-holder expression when not
20089         required.
20090
20091 2002-09-17  Martin Baulig  <martin@gnome.org>
20092
20093         * class.cs (PropertyBase.CheckBase): Don't check the base class if
20094         this is an explicit interface implementation.
20095
20096 2002-09-17  Martin Baulig  <martin@gnome.org>
20097
20098         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
20099         different `IndexerName' attributes.
20100
20101         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
20102         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
20103         virtual CommonResolve().
20104
20105 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
20106
20107         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
20108         and convert that to the UnderlyingType.
20109
20110         * statement.cs (Foreach.Resolve): Indexers are just like variables
20111         or PropertyAccesses.
20112
20113         * cs-tokenizer.cs (consume_string): Track line numbers and columns
20114         inside quoted strings, we were not doing this before.
20115
20116 2002-09-16  Martin Baulig  <martin@gnome.org>
20117
20118         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
20119         resolve it.  This is needed for the definite assignment check of the
20120         instance expression, fixes bug #29846.
20121         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
20122
20123 2002-09-16  Nick Drochak  <ndrochak@gol.com>
20124
20125         * parameter.cs: Fix compile error.  Cannot reference static member
20126         from an instance object.  Is this an mcs bug?
20127
20128 2002-09-14  Martin Baulig  <martin@gnome.org>
20129
20130         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
20131         multiple times.  Fixes bug #30295, added test-166.cs.
20132
20133 2002-09-14  Martin Baulig  <martin@gnome.org>
20134
20135         * statement.cs (Block.Emit): Don't emit unreachable code.
20136         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
20137         `break' statements.
20138         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
20139
20140 2002-09-14  Martin Baulig  <martin@gnome.org>
20141
20142         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
20143         is set.
20144
20145 2002-09-14  Martin Baulig  <martin@gnome.org>
20146
20147         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
20148         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
20149         be false on the ms runtime.
20150
20151 2002-09-13  Martin Baulig  <martin@gnome.org>
20152
20153         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
20154         the CS0038 error message.
20155
20156 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
20157
20158         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
20159         constant inside, return it.
20160
20161 2002-09-12  Martin Baulig  <martin@gnome.org>
20162
20163         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
20164         implicit conversion can be done between enum types.
20165
20166         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
20167         check whether an implicit conversion to the current enum's UnderlyingType
20168         exists and report an error if not.
20169
20170         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
20171         without debugging support.
20172
20173         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
20174         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
20175
20176 2002-09-12  Martin Baulig  <martin@gnome.org>
20177
20178         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
20179
20180         * ecore.cs (IMemberExpr.DeclaringType): New property.
20181         (SimpleName.SimpleNameResolve): Check whether we're accessing a
20182         nonstatic member of an outer type (CS0038).
20183
20184 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
20185
20186         * driver.cs: Activate the using-error detector at warning level
20187         4 (at least for MS-compatible APIs).
20188
20189         * namespace.cs (VerifyUsing): Small buglett fix.
20190
20191         * pending.cs (PendingImplementation): pass the container pointer. 
20192
20193         * interface.cs (GetMethods): Allow for recursive definition.  Long
20194         term, I would like to move every type to support recursive
20195         definitions, not the current ordering mechanism that we have right
20196         now.
20197
20198         The situation is this: Attributes are handled before interfaces,
20199         so we can apply attributes to interfaces.  But some attributes
20200         implement interfaces, we will now handle the simple cases
20201         (recursive definitions will just get an error).  
20202
20203         * parameter.cs: Only invalidate types at the end if we fail to
20204         lookup all types.  
20205
20206 2002-09-09  Martin Baulig  <martin@gnome.org>
20207
20208         * ecore.cs (PropertyExpr.Emit): Also check for
20209         TypeManager.system_int_array_get_length so this'll also work when
20210         compiling corlib.  Fixes #30003.
20211
20212 2002-09-09  Martin Baulig  <martin@gnome.org>
20213
20214         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
20215         and throw an exception if we can't get the type's size.  Fixed #30040,
20216         added test-165.cs.
20217
20218 2002-09-09  Martin Baulig  <martin@gnome.org>
20219
20220         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
20221
20222         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
20223         context.  Fixes bug #30027.
20224
20225         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
20226         virtual functions.  Fixes bug #30043, added test-164.cs.
20227
20228 2002-09-08  Ravi Pratap  <ravi@ximian.com>
20229
20230         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
20231
20232 2002-09-08  Nick Drochak  <ndrochak@gol.com>
20233
20234         * driver.cs: Use an object to get the windows codepage since it's not a
20235         static property.
20236
20237 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
20238
20239         * statement.cs (For.Emit): for infinite loops (test == null)
20240         return whether there is a break inside, not always "true".
20241
20242         * namespace.cs (UsingEntry): New struct to hold the name of the
20243         using definition, the location where it is defined, and whether it
20244         has been used in a successful type lookup.
20245
20246         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
20247         strings.
20248
20249         * decl.cs: ditto.
20250
20251 2002-09-06  Ravi Pratap  <ravi@ximian.com>
20252
20253         * attribute.cs : Fix incorrect code which relied on catching
20254         a NullReferenceException to detect a null being passed in
20255         where an object was expected.
20256
20257 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
20258
20259         * statement.cs (Try): flag the catch variable as assigned
20260
20261         * expression.cs (Cast): Simplified by using ResolveType instead of
20262         manually resolving.
20263
20264         * statement.cs (Catch): Fix bug by using ResolveType.
20265
20266 2002-09-06  Ravi Pratap  <ravi@ximian.com>
20267
20268         * expression.cs (BetterConversion): Special case for when we have
20269         a NullLiteral as the argument and we have to choose between string
20270         and object types - we choose string the way csc does.
20271
20272         * attribute.cs (Attribute.Resolve): Catch the
20273         NullReferenceException and report error #182 since the Mono
20274         runtime no more has the bug and having this exception raised means
20275         we tried to select a constructor which takes an object and is
20276         passed a null.
20277
20278 2002-09-05  Ravi Pratap  <ravi@ximian.com>
20279
20280         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
20281         message (1502, 1503) when we can't locate a method after overload
20282         resolution. This is much more informative and closes the bug
20283         Miguel reported.
20284
20285         * interface.cs (PopulateMethod): Return if there are no argument
20286         types. Fixes a NullReferenceException bug.
20287
20288         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
20289         expressions too. Previously we were checking only in one place for
20290         positional arguments leaving out named arguments.
20291
20292         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
20293         type to the enum type is not allowed. Remove code corresponding to
20294         that.
20295
20296         (ConvertNumericExplicit): Allow explicit conversions from
20297         the underlying type to enum type. This precisely follows the spec
20298         and closes a bug filed by Gonzalo.
20299
20300 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20301
20302         * compiler.csproj:
20303         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
20304
20305 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
20306
20307         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
20308         it was important that we stored the right value after the
20309         reduction in `converted'.
20310
20311 2002-09-04  Martin Baulig  <martin@gnome.org>
20312
20313         * location.cs (Location.SymbolDocument): Use full pathnames for the
20314         source files.
20315
20316 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
20317
20318         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
20319         of the expression resolve mechanism, because that will catch the
20320         SimpleName error failures.
20321
20322         (Conditional): If we can not resolve the
20323         expression, return, do not crash.
20324
20325 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20326
20327         * cs-tokenizer.cs:
20328         (location): display token name instead of its number.
20329
20330 2002-08-28  Martin Baulig  <martin@gnome.org>
20331
20332         * expression.cs (Binary.ResolveOperator): Don't silently return
20333         but return an error if an operator cannot be applied between two
20334         enum types.
20335
20336 2002-08-28  Martin Baulig  <martin@gnome.org>
20337
20338         * class.cs (Constructor.Define): Set the permission attributes
20339         correctly instead of making all constructors public.
20340
20341 2002-08-28  Martin Baulig  <martin@gnome.org>
20342
20343         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
20344         for private members before reporting a CS0103; if we find anything,
20345         it's a CS0122.
20346
20347 2002-08-28  Martin Baulig  <martin@gnome.org>
20348
20349         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
20350         to check whether `closure_start_type == closure_invocation_type',
20351         we also need to check whether `m.DeclaringType == closure_invocation_type'
20352         before bypassing the permission checks.  We might be accessing
20353         protected/private members from the base class.
20354         (TypeManager.RealMemberLookup): Only set private_ok if private
20355         members were requested via BindingFlags.NonPublic.
20356
20357         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
20358
20359         * expression.cs (MemberAccess.ResolveMemberAccess): Set
20360         MethodGroupExpr.IsExplicitImpl if appropriate.
20361         (Invocation.DoResolve): Don't report the CS0120 for explicit
20362         interface implementations.
20363
20364 2002-08-27  Martin Baulig  <martin@gnome.org>
20365
20366         * expression.cs (Invocation.DoResolve): If this is a static
20367         method and we don't have an InstanceExpression, we must report
20368         a CS0120.
20369
20370 2002-08-25  Martin Baulig  <martin@gnome.org>
20371
20372         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
20373         `==' between a valuetype and an object.
20374
20375 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
20376
20377         * ecore.cs (TypeExpr): Provide a ToString method.
20378
20379 2002-08-24  Martin Baulig  <martin@gnome.org>
20380
20381         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
20382         now called proggie.dbg and it's a binary file.
20383
20384 2002-08-23  Martin Baulig  <martin@gnome.org>
20385
20386         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
20387
20388 2002-08-23  Martin Baulig  <martin@gnome.org>
20389
20390         * struct.cs (MyStructInfo.ctor): Make this work with empty
20391         structs; it's not allowed to use foreach() on null.
20392
20393 2002-08-23  Martin Baulig  <martin@gnome.org>
20394
20395         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
20396         writer the full pathname of the generated assembly.
20397
20398 2002-08-23  Martin Baulig  <martin@gnome.org>
20399
20400         * statements.cs (FlowBranching.UsageVector.MergeChildren):
20401         A `finally' block never returns or breaks; improved handling of
20402         unreachable code.
20403
20404 2002-08-23  Martin Baulig  <martin@gnome.org>
20405
20406         * statement.cs (Throw.Resolve): Allow `throw null'.
20407
20408 2002-08-23  Martin Baulig  <martin@gnome.org>
20409
20410         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
20411         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
20412         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
20413         MemberLookup would return a wrong event if this is an explicit
20414         interface implementation and the class has an event with the same
20415         name.
20416
20417 2002-08-23  Martin Baulig  <martin@gnome.org>
20418
20419         * statement.cs (Block.AddChildVariableNames): New public method.
20420         (Block.AddChildVariableName): Likewise.
20421         (Block.IsVariableNameUsedInChildBlock): Likewise.
20422         (Block.AddVariable): Check whether a variable name has already
20423         been used in a child block.
20424
20425         * cs-parser.jay (declare_local_variables): Mark all variable names
20426         from the current block as being used in a child block in the
20427         implicit block.
20428
20429 2002-08-23  Martin Baulig  <martin@gnome.org>
20430
20431         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
20432         find the symbol writer.
20433
20434         * driver.cs: csc also allows the arguments to /define being
20435         separated by commas, not only by semicolons.
20436
20437 2002-08-23  Martin Baulig  <martin@gnome.org>
20438
20439         * interface.cs (Interface.GetMembers): Added static check for events.
20440
20441 2002-08-15  Martin Baulig  <martin@gnome.org>
20442
20443         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
20444         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
20445
20446         * ecore.cs (Expression.MemberLookup): Added documentation and explained
20447         why the MethodData.EmitDestructor() change was necessary.
20448
20449 2002-08-20  Martin Baulig  <martin@gnome.org>
20450
20451         * class.cs (TypeContainer.FindMembers): Added static check for events.
20452
20453         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
20454
20455         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
20456         use Type.GetEvents(), not Type.FindMembers().
20457
20458 2002-08-20  Martin Baulig  <martin@gnome.org>
20459
20460         * decl.cs (MemberCache): Added a special method cache which will
20461         be used for method-only searched.  This ensures that a method
20462         search will return a MethodInfo with the correct ReflectedType for
20463         inherited methods.      
20464
20465 2002-08-20  Martin Baulig  <martin@gnome.org>
20466
20467         * decl.cs (DeclSpace.FindMembers): Made this public.
20468
20469 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20470
20471         * delegate.cs: fixed build on windows.
20472         [FIXME:  Filed as bug #29150: MCS must report these errors.]
20473
20474 2002-08-19  Ravi Pratap  <ravi@ximian.com>
20475
20476         * ecore.cs (StandardConversionExists): Return a false
20477         if we are trying to convert the void type to anything else
20478         since that is not allowed.
20479
20480         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
20481         we flag error 70 in the event an event is trying to be accessed
20482         directly from outside the declaring type.
20483
20484 2002-08-20  Martin Baulig  <martin@gnome.org>
20485
20486         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
20487         MemberCache from typemanager.cs to decl.cs.
20488
20489 2002-08-19  Martin Baulig  <martin@gnome.org>
20490
20491         * class.cs (TypeContainer): Implement IMemberContainer.
20492         (TypeContainer.DefineMembers): Create the MemberCache.
20493         (TypeContainer.FindMembers): Do better BindingFlags checking; only
20494         return public members if BindingFlags.Public was given, check
20495         whether members are static.
20496
20497 2002-08-16  Martin Baulig  <martin@gnome.org>
20498
20499         * decl.cs (DeclSpace.Define): Splitted this in Define and
20500         DefineMembers.  DefineMembers is called first and initializes the
20501         MemberCache.
20502
20503         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
20504         DefineMembers() on all our DeclSpaces.
20505
20506         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
20507         but call DefineMembers() on all nested interfaces.  We call their
20508         Define() in our new Define() function.
20509
20510         * interface.cs (Interface): Implement IMemberContainer.
20511         (Interface.Define): Moved all code except the attribute stuf to
20512         DefineMembers().
20513         (Interface.DefineMembers): Initialize the member cache.
20514
20515         * typemanager.cs (IMemberFinder): Removed this interface, we don't
20516         need this anymore since we can use MemberCache.FindMembers directly.
20517
20518 2002-08-19  Martin Baulig  <martin@gnome.org>
20519
20520         * typemanager.cs (MemberCache): When creating the cache for an
20521         interface type, add all inherited members.
20522         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
20523         to `out bool used_cache' and documented it.
20524         (TypeManager.MemberLookup): If we already used the cache in the first
20525         iteration, we don't need to do the interfaces check.
20526
20527 2002-08-19  Martin Baulig  <martin@gnome.org>
20528
20529         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
20530         here from IMemberFinder and don't implement this interface anymore.
20531         (DeclSpace.MemberCache): Moved here from IMemberFinder.
20532
20533         * typemanager.cs (IMemberFinder): This interface is now only used by
20534         classes which actually support the member cache.
20535         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
20536         since we only put DeclSpaces into this Hashtable.
20537         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
20538         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
20539
20540 2002-08-16  Martin Baulig  <martin@gnome.org>
20541
20542         * typemanager.cs (ICachingMemberFinder): Removed.
20543         (IMemberFinder.MemberCache): New property.
20544         (TypeManager.FindMembers): Merged this with RealFindMembers().
20545         This function will never be called from TypeManager.MemberLookup()
20546         so we can't use the cache here, just the IMemberFinder.
20547         (TypeManager.MemberLookup_FindMembers): Check whether the
20548         IMemberFinder has a MemberCache and call the cache's FindMembers
20549         function.
20550         (MemberCache): Rewrote larger parts of this yet another time and
20551         cleaned it up a bit.
20552
20553 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
20554
20555         * driver.cs (LoadArgs): Support quoting.
20556
20557         (Usage): Show the CSC-like command line arguments.
20558
20559         Improved a few error messages.
20560
20561 2002-08-15  Martin Baulig  <martin@gnome.org>
20562
20563         * typemanager.cs (IMemberContainer.Type): New property.
20564         (IMemberContainer.IsInterface): New property.
20565
20566         The following changes are conditional to BROKEN_RUNTIME, which is
20567         defined at the top of the file.
20568
20569         * typemanager.cs (MemberCache.MemberCache): Don't add the base
20570         class'es members, but add all members from TypeHandle.ObjectType
20571         if we're an interface.
20572         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
20573         is the current type.
20574         (MemberCache.CacheEntry.Container): Removed this field.
20575         (TypeHandle.GetMembers): Include inherited members.
20576
20577 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20578
20579         * typemanager.cs: fixed compilation and added a comment on a field that
20580         is never used.
20581
20582 2002-08-15  Martin Baulig  <martin@gnome.org>
20583
20584         * class.cs (ConstructorInitializer.Resolve): In the
20585         Expression.MemberLookup call, use the queried_type as
20586         invocation_type.
20587
20588         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
20589         declared' attribute, it's always true.
20590         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
20591         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
20592         temporary wrapper for FindMembers which tells MemberLookup whether
20593         members from the base classes are included in the return value.
20594         This will go away soon.
20595         (TypeManager.MemberLookup): Use this temporary hack here; once the
20596         new MemberCache is completed, we don't need to do the DeclaredOnly
20597         looping here anymore since the MemberCache will take care of this.
20598         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
20599         (MemberCache): When creating the MemberCache for a class, get
20600         members from the current class and all its base classes.
20601         (MemberCache.CacheEntry.Container): New field.  This is a
20602         temporary hack until the Mono runtime is fixed to distinguish
20603         between ReflectedType and DeclaringType.  It allows us to use MCS
20604         with both the MS runtime and the unfixed Mono runtime without
20605         problems and without accecting performance.
20606         (MemberCache.SearchMembers): The DeclaredOnly looping from
20607         TypeManager.MemberLookup is now done here.      
20608
20609 2002-08-14  Martin Baulig  <martin@gnome.org>
20610
20611         * statement.cs (MyStructInfo.MyStructInfo): Don't call
20612         Type.GetFields on dynamic types but get the fields from the
20613         corresponding TypeContainer.
20614         (MyStructInfo.GetStructInfo): Added check for enum types.
20615
20616         * typemanager.cs (MemberList.IsSynchronized): Implemented.
20617         (MemberList.SyncRoot): Implemented.
20618         (TypeManager.FilterWithClosure): No need to check permissions if
20619         closure_start_type == closure_invocation_type, don't crash if
20620         closure_invocation_type is null.
20621
20622 2002-08-13  Martin Baulig  <martin@gnome.org>
20623
20624         Rewrote TypeContainer.FindMembers to use a member cache.  This
20625         gives us a speed increase of about 35% for the self-hosting MCS
20626         build and of about 15-20% for the class libs (both on GNU/Linux).
20627
20628         * report.cs (Timer): New class to get enhanced profiling.  This
20629         whole class is "TIMER" conditional since it remarkably slows down
20630         compilation speed.
20631
20632         * class.cs (MemberList): New class.  This is an IList wrapper
20633         which we're now using instead of passing MemberInfo[]'s around to
20634         avoid copying this array unnecessarily.
20635         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
20636         (ICachingMemberFinder, IMemberContainer): New interface.
20637         (TypeManager.FilterWithClosure): If `criteria' is null, the name
20638         has already been checked, otherwise use it for the name comparision.
20639         (TypeManager.FindMembers): Renamed to RealMemberFinder and
20640         provided wrapper which tries to use ICachingMemberFinder.FindMembers
20641         if possible.  Returns a MemberList, not a MemberInfo [].
20642         (TypeHandle): New class, implements IMemberContainer.  We create
20643         one instance of this class per type, it contains a MemberCache
20644         which is used to do the member lookups.
20645         (MemberCache): New class.  Each instance of this class contains
20646         all members of a type and a name-based hash table.
20647         (MemberCache.FindMembers): This is our new member lookup
20648         function.  First, it looks up all members of the requested name in
20649         the hash table.  Then, it walks this list and sorts out all
20650         applicable members and returns them.
20651
20652 2002-08-13  Martin Baulig  <martin@gnome.org>
20653
20654         In addition to a nice code cleanup, this gives us a performance
20655         increase of about 1.4% on GNU/Linux - not much, but it's already
20656         half a second for the self-hosting MCS compilation.
20657
20658         * typemanager.cs (IMemberFinder): New interface.  It is used by
20659         TypeManager.FindMembers to call FindMembers on a TypeContainer,
20660         Enum, Delegate or Interface.
20661         (TypeManager.finder_to_member_finder): New PtrHashtable.
20662         (TypeManager.finder_to_container): Removed.
20663         (TypeManager.finder_to_delegate): Removed.
20664         (TypeManager.finder_to_interface): Removed.
20665         (TypeManager.finder_to_enum): Removed.
20666
20667         * interface.cs (Interface): Implement IMemberFinder.
20668
20669         * delegate.cs (Delegate): Implement IMemberFinder.
20670
20671         * enum.cs (Enum): Implement IMemberFinder.
20672
20673         * class.cs (TypeContainer): Implement IMemberFinder.
20674
20675 2002-08-12  Martin Baulig  <martin@gnome.org>
20676
20677         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
20678
20679 2002-08-12  Martin Baulig  <martin@gnome.org>
20680
20681         * ecore.cs (ITypeExpression): New interface for expressions which
20682         resolve to a type.
20683         (TypeExpression): Renamed to TypeLookupExpression.
20684         (Expression.DoResolve): If we're doing a types-only lookup, the
20685         expression must implement the ITypeExpression interface and we
20686         call DoResolveType() on it.
20687         (SimpleName): Implement the new ITypeExpression interface.
20688         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
20689         hack, the situation that we're only looking up types can't happen
20690         anymore when this method is called.  Moved the type lookup code to
20691         DoResolveType() and call it.
20692         (SimpleName.DoResolveType): This ITypeExpression interface method
20693         is now doing the types-only lookup.
20694         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
20695         (ResolveFlags): Added MaskExprClass.
20696
20697         * expression.cs (MemberAccess): Implement the ITypeExpression
20698         interface.
20699         (MemberAccess.DoResolve): Added support for a types-only lookup
20700         when we're called via ITypeExpression.DoResolveType().
20701         (ComposedCast): Implement the ITypeExpression interface.
20702
20703         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
20704         Expression.Resolve() with ResolveFlags.Type instead.
20705
20706 2002-08-12  Martin Baulig  <martin@gnome.org>
20707
20708         * interface.cs (Interface.Define): Apply attributes.
20709
20710         * attribute.cs (Attribute.ApplyAttributes): Added support for
20711         interface attributes.
20712
20713 2002-08-11  Martin Baulig  <martin@gnome.org>
20714
20715         * statement.cs (Block.Emit): Only check the "this" variable if we
20716         do not always throw an exception.
20717
20718         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
20719         whether the property has a set accessor.
20720
20721 2002-08-11  Martin Baulig  <martin@gnome.org>
20722
20723         Added control flow analysis support for structs.
20724
20725         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
20726         with control flow analysis turned off.
20727         (IVariable): New interface.
20728         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
20729         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
20730         (FieldExpr.DoResolve): Resolve the instance expression with flow
20731         analysis turned off and do the definite assignment check after the
20732         resolving when we know what the expression will resolve to.
20733
20734         * expression.cs (LocalVariableReference, ParameterReference):
20735         Implement the new IVariable interface, only call the flow analysis
20736         code if ec.DoFlowAnalysis is true.
20737         (This): Added constructor which takes a Block argument.  Implement
20738         the new IVariable interface.
20739         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
20740         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
20741         This does the definite assignment checks for struct members.
20742
20743         * class.cs (Constructor.Emit): If this is a non-static `struct'
20744         constructor which doesn't have any initializer, call
20745         Block.AddThisVariable() to tell the flow analysis code that all
20746         struct elements must be initialized before control returns from
20747         the constructor.
20748
20749         * statement.cs (MyStructInfo): New public class.
20750         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
20751         argument to this indexer.  If non-zero, check an individual struct
20752         member, not the whole struct.
20753         (FlowBranching.CheckOutParameters): Check struct members.
20754         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
20755         overloaded versions of these methods which take an additional
20756         `int field_idx' argument to check struct members.
20757         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
20758         overloaded versions of these methods which take an additional
20759         `string field_name' argument to check struct member.s
20760         (VariableInfo): Implement the IVariable interface.
20761         (VariableInfo.StructInfo): New public property.  Returns the
20762         MyStructInfo instance of the variable if it's a struct or null.
20763         (Block.AddThisVariable): New public method.  This is called from
20764         Constructor.Emit() for non-static `struct' constructor which do
20765         not have any initializer.  It creates a special variable for the
20766         "this" instance variable which will be checked by the flow
20767         analysis code to ensure that all of the struct's fields are
20768         initialized before control returns from the constructor.
20769         (UsageVector): Added support for struct members.  If a
20770         variable/parameter is a struct with N members, we reserve a slot
20771         in the usage vector for each member.  A struct is considered fully
20772         initialized if either the struct itself (slot 0) or all its
20773         members are initialized.
20774
20775 2002-08-08  Martin Baulig  <martin@gnome.org>
20776
20777         * driver.cs (Driver.MainDriver): Only report an error CS5001
20778         if there were no compilation errors.
20779
20780         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
20781         `UnsafeContext' property to determine whether the parent is in
20782         unsafe context rather than checking the parent's ModFlags:
20783         classes nested in an unsafe class are unsafe as well.
20784
20785 2002-08-08  Martin Baulig  <martin@gnome.org>
20786
20787         * statement.cs (UsageVector.MergeChildren): Distinguish between
20788         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
20789         we return.  Added test17() and test18() to test-154.cs.
20790
20791 2002-08-08  Martin Baulig  <martin@gnome.org>
20792
20793         * typemanager.cs (TypeManager.FilterWithClosure): If we have
20794         Family access, make sure the invoking type isn't a subclass of the
20795         queried type (that'd be a CS1540).
20796
20797         * ecore.cs (Expression.MemberLookup): Added overloaded version of
20798         this method which takes an additional `Type invocation_type'.
20799
20800         * expression.cs (BaseAccess.DoResolve): Use the base type as
20801         invocation and query type.
20802         (MemberAccess.DoResolve): If the lookup failed and we're about to
20803         report a CS0122, try a lookup with the ec.ContainerType - if this
20804         succeeds, we must report a CS1540.
20805
20806 2002-08-08  Martin Baulig  <martin@gnome.org>
20807
20808         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
20809         (MethodGroupExpr): Implement the IMemberExpr interface.
20810
20811         * expression (MemberAccess.ResolveMemberAccess): No need to have
20812         any special code for MethodGroupExprs anymore, they're now
20813         IMemberExprs.   
20814
20815 2002-08-08  Martin Baulig  <martin@gnome.org>
20816
20817         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
20818         Family, FamANDAssem and FamORAssem permissions.
20819         (TypeManager.IsSubclassOrNestedChildOf): New public method.
20820
20821 2002-08-08  Martin Baulig  <martin@gnome.org>
20822
20823         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
20824         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
20825         or loop block.
20826
20827 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
20828
20829         * driver.cs: implemented /resource option to embed managed resources.
20830
20831 2002-08-07  Martin Baulig  <martin@gnome.org>
20832
20833         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
20834         (FieldBase.HasFieldInitializer): New public property.
20835         (FieldBase.GetInitializerExpression): New public method.  Resolves and
20836         returns the field initializer and makes sure it is only resolved once.
20837         (TypeContainer.EmitFieldInitializers): Call
20838         FieldBase.GetInitializerExpression to get the initializer, this ensures
20839         that it isn't resolved multiple times.
20840
20841         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
20842         the resolving process (SimpleName/MemberLookup) that we're currently
20843         emitting a field initializer (which must not access any instance members,
20844         this is an error CS0236).
20845
20846         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
20847         argument, if the `IsFieldInitializer' flag is set, we must report and
20848         error CS0236 and not an error CS0120.   
20849
20850 2002-08-07  Martin Baulig  <martin@gnome.org>
20851
20852         * ecore.cs (IMemberExpr): New public interface.
20853         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
20854         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
20855         if the expression is an IMemberExpr.
20856
20857         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
20858         to be null, implicitly default to `this' if we're non-static in
20859         this case.  Simplified the code a lot by using the new IMemberExpr
20860         interface.  Also fixed bug #28176 here.
20861
20862 2002-08-06  Martin Baulig  <martin@gnome.org>
20863
20864         * cs-parser.jay (SimpleLookup): Removed.  We need to create
20865         ParameterReferences during semantic analysis so that we can do a
20866         type-only search when resolving Cast, TypeOf and SizeOf.
20867         (block): Pass the `current_local_parameters' to the Block's
20868         constructor.
20869
20870         * class.cs (ConstructorInitializer): Added `Parameters parameters'
20871         argument to the constructor.
20872         (ConstructorInitializer.Resolve): Create a temporary implicit
20873         block with the parameters.
20874
20875         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
20876         references here if we aren't doing a type-only search.
20877
20878         * statement.cs (Block): Added constructor which takes a
20879         `Parameters parameters' argument.
20880         (Block.Parameters): New public property.
20881
20882         * support.cs (InternalParameters.Parameters): Renamed `parameters'
20883         to `Parameters' and made it public readonly.
20884
20885 2002-08-06  Martin Baulig  <martin@gnome.org>
20886
20887         * ecore.cs (Expression.Warning): Made this public as well.
20888
20889         * report.cs (Report.Debug): Print the contents of collections.
20890
20891 2002-08-06  Martin Baulig  <martin@gnome.org>
20892
20893         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
20894         used to tell Resolve() which kinds of expressions it may return.
20895         (Expression.Resolve): Added overloaded version of this method which
20896         takes a `ResolveFlags flags' argument.  This can be used to tell
20897         Resolve() which kinds of expressions it may return.  Reports a
20898         CS0118 on error.
20899         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
20900         ResolveFlags.SimpleName.
20901         (Expression.Error118): Added overloaded version of this method which
20902         takes a `ResolveFlags flags' argument.  It uses the flags to determine
20903         which kinds of expressions are allowed.
20904
20905         * expression.cs (Argument.ResolveMethodGroup): New public method.
20906         Resolves an argument, but allows a MethodGroup to be returned.
20907         This is used when invoking a delegate.
20908
20909         * TODO: Updated a bit.
20910
20911 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20912
20913         Fixed compilation with csc.
20914
20915         * ecore.cs: Expression.Error made public. Is this correct? Should
20916         Warning be made public too?
20917
20918         * expression.cs: use ea.Location instead of ea.loc.
20919         [FIXME:  Filed as bug #28607: MCS must report these errors.]
20920
20921 2002-08-06  Martin Baulig  <martin@gnome.org>
20922
20923         * ecore.cs (Expression.loc): Moved the location here instead of
20924         duplicating it in all derived classes.
20925         (Expression.Location): New public property.
20926         (Expression.Error, Expression.Warning): Made them non-static and
20927         removed the location argument.
20928         (Expression.Warning): Added overloaded version which takes an
20929         `int level' argument.
20930         (Expression.Error118): Make this non-static and removed the
20931         expression and location arguments.
20932         (TypeExpr): Added location argument to the constructor.
20933
20934         * expression.cs (StaticCallExpr): Added location argument to
20935         the constructor.
20936         (Indirection, PointerArithmetic): Likewise.
20937         (CheckedExpr, UnCheckedExpr): Likewise.
20938         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
20939         (StringPtr): Likewise.
20940
20941
20942 2002-08-05  Martin Baulig  <martin@gnome.org>
20943
20944         * expression.cs (BaseAccess.DoResolve): Actually report errors.
20945
20946         * assign.cs (Assign.DoResolve): Check whether the source
20947         expression is a value or variable.
20948
20949         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
20950         while resolving the corresponding blocks.
20951
20952         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
20953         an error, don't silently return null.
20954
20955         * statement.cs (Block.AddVariable): Do the error reporting here
20956         and distinguish between CS0128 and CS0136.
20957         (Block.DoResolve): Report all unused labels (warning CS0164).
20958         (LabeledStatement): Pass the location to the constructor.
20959         (LabeledStatement.HasBeenReferenced): New property.
20960         (LabeledStatement.Resolve): Set it to true here.
20961
20962         * statement.cs (Return.Emit): Return success even after reporting
20963         a type mismatch error (CS0126 or CS0127), this is what csc does and
20964         it avoids confusing the users with any consecutive errors.
20965
20966 2002-08-05  Martin Baulig  <martin@gnome.org>
20967
20968         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
20969
20970         * const.cs (Const.LookupConstantValue): Catch circular definitions.
20971
20972         * expression.cs (MemberAccess.DoResolve): Silently return if an
20973         error has already been reported.
20974
20975         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
20976         error has already been reported.
20977
20978 2002-08-05  Martin Baulig  <martin@gnome.org>
20979
20980         * statement.cs (UsageVector): Only initialize the `parameters'
20981         vector if we actually have any "out" parameters.
20982
20983 2002-08-05  Martin Baulig  <martin@gnome.org>
20984
20985         * expression.cs (Binary.ResolveOperator): When combining delegates,
20986         they must have the same type.
20987
20988 2002-08-05  Martin Baulig  <martin@gnome.org>
20989
20990         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
20991         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
20992         work with the ms runtime and we also don't need it: if we're a
20993         PropertyBuilder and not in the `indexer_arguments' hash, then we
20994         are a property and not an indexer.
20995
20996         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
20997         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
20998         since the latter one doesn't work with the ms runtime.
20999
21000 2002-08-03  Martin Baulig  <martin@gnome.org>
21001
21002         Fixed bugs #27998 and #22735.
21003
21004         * class.cs (Method.IsOperator): New public field.
21005         (Method.CheckBase): Report CS0111 if there's already a method
21006         with the same parameters in the current class.  Report CS0508 when
21007         attempting to change the return type of an inherited method.
21008         (MethodData.Emit): Report CS0179 if a method doesn't have a body
21009         and it's not marked abstract or extern.
21010         (PropertyBase): New abstract base class for Property and Indexer.
21011         (PropertyBase.CheckBase): Moved here from Property and made it work
21012         for indexers.
21013         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
21014         the same so we can reuse it there.
21015         (Property, Indexer): Derive from PropertyBase.
21016         (MethodSignature.inheritable_property_signature_filter): New delegate
21017         to find properties and indexers.
21018
21019         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
21020         argument and improved error reporting.
21021
21022         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
21023         EmptyReadOnlyParameters and made it a property.
21024
21025         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
21026         version of this method which takes a `PropertyInfo indexer'.
21027         (TypeManager.RegisterIndexer): New method.
21028
21029         * class.cs: Added myself as author of this file :-)
21030
21031 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21032
21033         * class.cs: fixed compilation on windoze.
21034
21035 2002-08-03  Martin Baulig  <martin@gnome.org>
21036
21037         * interface.cs (Interface.GetInterfaceBases): Check whether all
21038         base interfaces are at least as accessible than the current one.
21039
21040         * class.cs (TypeContainer.GetClassBases): Check whether base types
21041         are at least as accessible than the current type.
21042         (TypeContainer.AsAccessible): Implemented and made non-static.
21043         (MemberBase.CheckParameters): Report errors if the accessibility
21044         checks fail.
21045
21046         * delegate.cs (Delegate.Delegate): The default visibility is
21047         internal for top-level types and private for nested types.
21048         (Delegate.Define): Report errors if the accessibility checks fail.
21049
21050         * enum.cs (Enum.Enum): The default visibility is internal for
21051         top-level types and private for nested types.
21052         (Enum.DefineType): Compute the correct visibility.
21053
21054         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
21055         function which takes a `bool is_toplevel' instead of a TypeContainer.
21056
21057         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
21058         builtin type.
21059
21060 2002-08-02  Martin Baulig  <martin@gnome.org>
21061
21062         * expression.cs (LocalVariableReferenc): Added constructor which
21063         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
21064         (LocalVariableReference.IsReadOnly): New property.
21065         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
21066         variable is readonly, use our own readonly flag to do this; you can
21067         use the new constructor to get a writable reference to a read-only
21068         variable.
21069
21070         * cs-parser.jay (foreach_statement, using_statement): Get a writable
21071         reference to the local variable.
21072
21073 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
21074
21075         * rootcontext.cs (ResolveCore): Also include System.Exception
21076
21077         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
21078         we reach an EmptyStatement.
21079
21080         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
21081         is also fine.
21082
21083         * expression.cs (Binary.ResolveOperator): Check error result in
21084         two places.
21085
21086         use brtrue/brfalse directly and avoid compares to null.
21087
21088 2002-08-02  Martin Baulig  <martin@gnome.org>
21089
21090         * class.cs (TypeContainer.Define): Define all nested interfaces here.
21091         Fixes bug #28407, added test-155.cs.
21092
21093 2002-08-01  Martin Baulig  <martin@gnome.org>
21094
21095         * class.cs (Event.EmitDefaultMethod): Make this work with static
21096         events.  Fixes #28311, added verify-3.cs.
21097
21098 2002-08-01  Martin Baulig  <martin@gnome.org>
21099
21100         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
21101         `is_disposable' fields.
21102         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
21103         `hm.is_disposable' if we're using the collection pattern.
21104         (Foreach.EmitCollectionForeach): Use the correct type for the
21105         enumerator's local variable, only emit the try/finally block if
21106         necessary (fixes #27713).
21107
21108 2002-08-01  Martin Baulig  <martin@gnome.org>
21109
21110         * ecore.cs (Expression.report118): Renamed to Error118 and made
21111         it public static.
21112
21113         * statement.cs (Throw.Resolve): Check whether the expression is of
21114         the correct type (CS0118) and whether the type derives from
21115         System.Exception (CS0155).
21116         (Catch.Resolve): New method.  Do the type lookup here and check
21117         whether it derives from System.Exception (CS0155).
21118         (Catch.CatchType, Catch.IsGeneral): New public properties.
21119
21120         * typemanager.cs (TypeManager.exception_type): Added.
21121
21122 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
21123
21124         * driver.cs: Updated About function.
21125
21126 2002-07-31  Martin Baulig  <martin@gnome.org>
21127
21128         Implemented Control Flow Analysis.
21129
21130         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
21131         (EmitContext.CurrentBranching): Added.
21132         (EmitContext.StartFlowBranching): Added.
21133         (EmitContext.EndFlowBranching): Added.
21134         (EmitContext.KillFlowBranching): Added.
21135         (EmitContext.IsVariableAssigned): Added.
21136         (EmitContext.SetVariableAssigned): Added.
21137         (EmitContext.IsParameterAssigned): Added.
21138         (EmitContext.SetParameterAssigned): Added.
21139         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
21140         Added control flow analysis stuff here.
21141
21142         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
21143         resolve the expression as lvalue.
21144         (LocalVariableReference.DoResolve): Check whether the variable has
21145         already been assigned.
21146         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
21147         the parameter as assigned here.
21148         (ParameterReference.DoResolve): Check whether the parameter has already
21149         been assigned.
21150         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
21151         expression as lvalue.
21152
21153         * statement.cs (FlowBranching): New class for the flow analysis code.
21154         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
21155         (LabeledStatement.IsDefined): New public property.
21156         (LabeledStatement.AddUsageVector): New public method to tell flow
21157         analyis that the label may be reached via a forward jump.
21158         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
21159         flow analysis.
21160         (VariableInfo.Number): New public field.  This is used by flow analysis
21161         to number all locals of a block.
21162         (Block.CountVariables): New public property.  This is the number of
21163         local variables in this block (including the locals from all parent
21164         blocks).
21165         (Block.EmitMeta): Number all the variables.
21166
21167         * statement.cs: Added flow analysis support to all classes.
21168
21169 2002-07-31  Martin Baulig  <martin@gnome.org>
21170
21171         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
21172         To get debugging messages, compile mcs with /define:MCS_DEBUG and
21173         then use this argument.
21174
21175         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
21176
21177         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
21178         use this to specify /define options.
21179
21180 2002-07-29  Martin Baulig  <martin@gnome.org>
21181
21182         * statement.cs (Fixed): Moved all code that does variable lookups
21183         and resolvings from Emit to Resolve.
21184
21185         * statement.cs (For): Moved all code that does variable lookups
21186         and resolvings from Emit to Resolve.
21187
21188         * statement.cs (Using): Moved all code that does variable lookups
21189         and resolvings from Emit to Resolve.
21190
21191 2002-07-29  Martin Baulig  <martin@gnome.org>
21192
21193         * attribute.cs (Attribute.Resolve): Explicitly catch a
21194         System.NullReferenceException when creating the
21195         CustromAttributeBuilder and report a different warning message.
21196
21197 2002-07-29  Martin Baulig  <martin@gnome.org>
21198
21199         * support.cs (ParameterData.ParameterName): Added method to
21200         get the name of a parameter.
21201
21202         * typemanager.cs (TypeManager.IsValueType): New public method.
21203
21204 2002-07-29  Martin Baulig  <martin@gnome.org>
21205
21206         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
21207         is a flag which specifies that it's either ref or out.
21208         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
21209         the out parameter to `out Parameter.Modifier mod', also set the
21210         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
21211
21212         * support.cs (InternalParameters.ParameterModifier): Distinguish
21213         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
21214         Parameter.Modifier.ISBYREF flag if it's either ref or out.
21215
21216         * expression.cs (Argument.GetParameterModifier): Distinguish
21217         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
21218         Parameter.Modifier.ISBYREF flag if it's either ref or out.
21219
21220 2002-07-29  Martin Baulig  <martin@gnome.org>
21221
21222         * expression.cs (ParameterReference.ParameterReference): Added
21223         `Location loc' argument to the constructor.
21224
21225         * cs-parser.jay: Pass location to ParameterReference.
21226
21227 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
21228
21229         * statement.cs (Try): Initialize the location.
21230
21231         * cs-parser.jay: pass location to Try.
21232
21233         * expression.cs (Unary.Reduce): Change the prototype to return
21234         whether a constant fold could be performed or not.  The result is
21235         returned in an out parameters.  In the case of Indirection and
21236         AddressOf, we want to perform the full tests.
21237
21238 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
21239
21240         * statement.cs (Statement.Emit): Flag dead code.
21241
21242 2002-07-27  Andrew Birkett  <andy@nobugs.org>
21243
21244         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
21245
21246 2002-07-27  Martin Baulig  <martin@gnome.org>
21247
21248         * class.cs (MethodData.Define): Put back call to
21249         TypeManager.AddMethod(), accidentally commented this out.
21250
21251         * report.cs (Debug): New public method to print debugging information,
21252         this is `[Conditional ("DEBUG")]'.
21253
21254 2002-07-26  Martin Baulig  <martin@gnome.org>
21255
21256         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
21257         (switch_statement): Push the current_block to the switch_stack and
21258         pop it again when we're done with the switch.
21259         (switch_section): The new block is a child of the current_block.
21260         Fixes bug #24007, added test-152.cs.
21261
21262 2002-07-27  Martin Baulig  <martin@gnome.org>
21263
21264         * expression.cs (Invocation.EmitArguments): When calling a varargs
21265         function with only its fixed arguments, we need to pass an empty
21266         array.
21267
21268 2002-07-27  Martin Baulig  <martin@gnome.org>
21269
21270         Mono 0.13 has been released.
21271
21272 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
21273
21274         * driver.cs: Rename --resource to --linkres, because that is what
21275         we do currently, we dont support --resource yet.
21276
21277         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
21278
21279 2002-07-25  Martin Baulig  <martin@gnome.org>
21280
21281         * class.cs (MethodData): New public class.  This is a `method builder'
21282         class for a method or one accessor of a Property/Indexer/Event.
21283         (MethodData.GetMethodFlags): Moved here from MemberBase.
21284         (MethodData.ApplyAttributes): Likewise.
21285         (MethodData.ApplyObsoleteAttribute): Likewise.
21286         (MethodData.ApplyConditionalAttribute): Likewise.
21287         (MethodData.ApplyDllImportAttribute): Likewise.
21288         (MethodData.CheckAbstractAndExternal): Likewise.
21289         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
21290         (MethodData.Emit): Formerly known as Method.Emit().
21291         (MemberBase): Moved everything which was specific to a single
21292         accessor/method to MethodData.
21293         (Method): Create a new MethodData and call Define() and Emit() on it.
21294         (Property, Indexer, Event): Create a new MethodData objects for each
21295         accessor and call Define() and Emit() on them.
21296
21297 2002-07-25  Martin Baulig  <martin@gnome.org>
21298
21299         Made MethodCore derive from MemberBase to reuse the code from there.
21300         MemberBase now also checks for attributes.
21301
21302         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
21303         (MemberBase.GetMethodFlags): Moved here from class Method and marked
21304         as virtual.
21305         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
21306         `CallingConventions cc' and `Attributes opt_attrs' arguments.
21307         (MemberBase.ApplyAttributes): New virtual method; applies the
21308         attributes to a method or accessor.
21309         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
21310         (MemberBase.ApplyConditionalAttribute): Likewise.
21311         (MemberBase.ApplyDllImportAttribute): Likewise.
21312         (MemberBase.CheckAbstractAndExternal): Likewise.
21313         (MethodCore.ParameterTypes): This is now a property instead of a
21314         method, it's initialized from DoDefineParameters().
21315         (MethodCore.ParameterInfo): Removed the set accessor.
21316         (MethodCore.DoDefineParameters): New protected virtual method to
21317         initialize ParameterTypes and ParameterInfo.
21318         (Method.GetReturnType): We can now simply return the MemberType.
21319         (Method.GetMethodFlags): Override the MemberBase version and add
21320         the conditional flags.
21321         (Method.CheckBase): Moved some code from Define() here, call
21322         DoDefineParameters() here.
21323         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
21324         here to avoid some larger code duplication.
21325         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
21326         ensure that abstract and external accessors don't declare a body.
21327
21328         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
21329         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
21330         lookup in the attribute's parent classes, so we need to abort as soon
21331         as we found the first match.
21332         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
21333         the attribute has no arguments.
21334
21335         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
21336         of a Method.
21337
21338 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21339
21340         * cs-parser.jay: reverted previous patch.
21341
21342 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21343
21344         * cs-parser.jay: fixed bug #22119.
21345
21346 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21347
21348         * attribute.cs: fixed compilation. The error was:
21349         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
21350         be assigned to before control leaves the current method."
21351         [FIXME:  Filed as bug #28186: MCS must report this error.]
21352
21353 2002-07-25  Martin Baulig  <martin@gnome.org>
21354
21355         * attribute.cs (Attribute.Conditional_GetConditionName): New static
21356         method to pull the condition name ouf of a Conditional attribute.
21357         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
21358         the obsolete message and error flag out of an Obsolete attribute.
21359
21360         * class.cs (Method.GetMethodFlags): New public method to get the
21361         TypeManager.MethodFlags for this method.
21362         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
21363         private methods.
21364         (Method.Define): Get and apply the Obsolete and Conditional attributes;
21365         if we're overriding a virtual function, set the new private variable
21366         `parent_method'; call the new TypeManager.AddMethod().
21367
21368         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
21369         the MethodBuilder and the Method in a PtrHashtable.
21370         (TypeManager.builder_to_method): Added for this purpose.
21371         (TypeManager.MethodFlags): Added IsObsoleteError.
21372         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
21373         Obsolete and Conditional arguments in MethodBuilders.  If we discover
21374         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
21375         the message from the attribute.
21376
21377 2002-07-24  Martin Baulig  <martin@gnome.org>
21378
21379         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
21380         preprocessor directives, ensure that the argument to #define/#undef is
21381         exactly one identifier and that it's actually an identifier.
21382
21383         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
21384         did not work ....
21385
21386 2002-07-24  Martin Baulig  <martin@gnome.org>
21387
21388         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
21389         initialize it to TypeManager.object_type in the constructor.
21390         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
21391         of the `hm.get_current' method if we're using the collection pattern.
21392         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
21393         for the explicit conversion to make it work when we're using the collection
21394         pattern and the `Current' property has a different return type than `object'.
21395         Fixes #27713.
21396
21397 2002-07-24  Martin Baulig  <martin@gnome.org>
21398
21399         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
21400         does not match, but don't report any errors.  This method is called in
21401         order for all methods in a MethodGroupExpr until a matching method is
21402         found, so we don't want to bail out if the first method doesn't match.
21403         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
21404         matches, report the 123.  Fixes #28070.
21405
21406 2002-07-24  Martin Baulig  <martin@gnome.org>
21407
21408         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
21409         TypeManager.TypeToCoreType() to the top of the method so the
21410         following equality checks will work.  Fixes #28107.
21411
21412 2002-07-24  Martin Baulig  <martin@gnome.org>
21413
21414         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
21415         operand is of type uint, and the other operand is of type sbyte,
21416         short or int, the operands are converted to type long." -
21417         Actually do what this comment already told us.  Fixes bug #28106,
21418         added test-150.cs.
21419
21420 2002-07-24  Martin Baulig  <martin@gnome.org>
21421
21422         * class.cs (MethodBase): New abstract class.  This is now a base
21423         class for Property, Indexer and Event to avoid some code duplication
21424         in their Define() and DefineMethods() methods.
21425         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
21426         generic methods for Define() and DefineMethods().
21427         (FieldBase): Derive from MemberBase, not MemberCore.
21428         (Property): Derive from MemberBase, not MemberCore.
21429         (Property.DefineMethod): Moved all the code from this method to the
21430         new MethodBase.DefineAccessor(), just call it with appropriate
21431         argumetnts.
21432         (Property.Define): Call the new Property.DoDefine(), this does some
21433         sanity checks and we don't need to duplicate the code everywhere.
21434         (Event): Derive from MemberBase, not MemberCore.
21435         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
21436         accessors, this will also make them work with interface events.
21437         (Indexer): Derive from MemberBase, not MemberCore.
21438         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
21439         (Indexer.Define): Use the new MethodBase functions.
21440
21441         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
21442         argument to the constructor.
21443         (Interface.FindMembers): Added support for interface events.
21444         (Interface.PopluateEvent): Implemented.
21445
21446         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
21447
21448 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
21449
21450         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
21451         but this is required to check for a method name being the same as
21452         the containing class.  
21453
21454         Handle this now.
21455
21456 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21457
21458         * interface.cs: initialize variable.
21459
21460 2002-07-23  Martin Baulig  <martin@gnome.org>
21461
21462         Implemented the IndexerName attribute in interfaces.
21463
21464         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
21465         name if this is an explicit interface implementation.
21466         (Indexer.InterfaceIndexerName): New public variable.  If we're
21467         implementing an interface indexer, this is the IndexerName in that
21468         interface.  Otherwise, it's the IndexerName.
21469         (Indexer.DefineMethod): If we're implementing interface indexer,
21470         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
21471         and Pending.ImplementIndexer methods.
21472         (Indexer.Define): Also define the PropertyBuilder if we're
21473         implementing an interface indexer and this is neither an explicit
21474         interface implementation nor do the IndexerName match the one in
21475         the interface.
21476
21477         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
21478         If a method is defined here, then we always need to create a proxy
21479         for it.  This is used when implementing interface indexers.
21480         (Pending.IsInterfaceIndexer): New public method.
21481         (Pending.ImplementIndexer): New public method.
21482         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
21483         This is used when implementing interface indexers to define a proxy
21484         if necessary.
21485         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
21486         define a proxy if necessary.
21487
21488         * interface.cs (Interface.IndexerName): New public variable.
21489         (Interface.PopulateIndexer): Set the IndexerName.
21490         (Interface.DefineIndexers): New private method.  Populate all the
21491         indexers and make sure their IndexerNames match.
21492
21493         * typemanager.cs (IndexerPropertyName): Added support for interface
21494         indexers.
21495
21496 2002-07-22  Martin Baulig  <martin@gnome.org>
21497
21498         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
21499         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
21500         ret if HasReturnLabel.
21501         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
21502         variables.
21503
21504         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
21505         and set the ec.LoopBeginTryCatchLevel.
21506         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
21507         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
21508         the current ec.TryCatchLevel, the branch goes out of an exception
21509         block.  In this case, we need to use Leave and not Br.
21510
21511 2002-07-22  Martin Baulig  <martin@gnome.org>
21512
21513         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
21514         block unless the block does not always return or it is contained in
21515         another try { ... } catch { ... } block.  Fixes bug #26506.
21516         Added verify-1.cs to the test suite.
21517
21518 2002-07-22  Martin Baulig  <martin@gnome.org>
21519
21520         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
21521         then we do not always return.  Fixes bug #24985.
21522
21523 2002-07-22  Martin Baulig  <martin@gnome.org>
21524
21525         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
21526         lookup on a per-class level; ie. walk up the class hierarchy until we
21527         found at least one applicable method, then choose the best among them.
21528         Fixes bug #24463 and test-29.cs.
21529
21530 2002-07-22  Martin Baulig  <martin@gnome.org>
21531
21532         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
21533         return types of the methods.  The return type is not part of the
21534         signature and we must not check it to make the `new' modifier work.
21535         Fixes bug #27999, also added test-147.cs.
21536         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
21537
21538         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
21539         on the method's return type.
21540
21541 2002-07-21  Martin Baulig  <martin@gnome.org>
21542
21543         * assign.cs: Make this work if the rightmost source is a constant and
21544         we need to do an implicit type conversion.  Also adding a few more tests
21545         to test-38.cs which should have caught this.
21546
21547         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
21548         target in the makefile for this.  The makefile.gnu is primarily intended
21549         for end-users who don't want to debug the compiler.
21550
21551 2002-07-21  Martin Baulig  <martin@gnome.org>
21552
21553         * assign.cs: Improved the Assign class so it can now handle embedded
21554         assignments (X = Y = Z = something).  As a side-effect this'll now also
21555         consume less local variables.  test-38.cs now passes with MCS, added
21556         a few new test cases to that test.
21557
21558 2002-07-20  Martin Baulig  <martin@gnome.org>
21559
21560         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
21561         instructions.  Fixes bug #27977, also added test-146.cs.
21562
21563 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21564
21565         * cs-tokenizer.cs: fixed getHex ().
21566
21567 2002-07-19  Martin Baulig  <martin@gnome.org>
21568
21569         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
21570         not Type.GetType() to lookup the array type.  This is needed when
21571         we're constructing an array of a user-defined type.
21572         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
21573         single-dimensional arrays, but also for single-dimensial arrays of
21574         type decimal.
21575
21576 2002-07-19  Martin Baulig  <martin@gnome.org>
21577
21578         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
21579         this function is called, it's not allowed to share LocalBuilders
21580         among ILGenerators.
21581
21582 2002-07-19  Martin Baulig  <martin@gnome.org>
21583
21584         * expression.cs (Argument.Resolve): Report an error 118 when trying
21585         to pass a type as argument.
21586
21587 2002-07-18  Martin Baulig  <martin@gnome.org>
21588
21589         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
21590         Conv_R_Un for the signed `long' type.
21591
21592 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
21593
21594         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
21595         `expr' for the temporary result, as that will fail if we do
21596         multiple resolves on the same expression.
21597
21598 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
21599
21600         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
21601         ec.TypeContainer for looking up aliases. 
21602
21603         * class.cs (TypeContainer): Remove LookupAlias from here.
21604
21605         * decl.cs (DeclSpace); Move here.
21606
21607 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
21608
21609         * class.cs (FindMembers): Only call filter if the constructor
21610         bulider is not null.
21611
21612         Also handle delegates in `NestedTypes' now.  Now we will perform
21613         type lookups using the standard resolution process.  This also
21614         fixes a bug.
21615
21616         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
21617         This uses Expressions (the limited kind that can be parsed by the
21618         tree) instead of strings.
21619
21620         * expression.cs (ComposedCast.ToString): Implement, used to flag
21621         errors since now we have to render expressions.
21622
21623         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
21624         FormArrayType. 
21625
21626         * ecore.cs (SimpleName.ToString): ditto.
21627
21628         * cs-parser.jay: Instead of using strings to assemble types, use
21629         Expressions to assemble the type (using SimpleName, ComposedCast,
21630         MemberAccess).  This should fix the type lookups in declarations,
21631         because we were using a different code path for this.
21632
21633         * statement.cs (Block.Resolve): Continue processing statements
21634         even when there is an error.
21635
21636 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
21637
21638         * class.cs (Event.Define): Also remove the `remove' method from
21639         the list of pending items.
21640
21641         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
21642         generate more compact code. 
21643
21644 2002-07-17  Martin Baulig  <martin@gnome.org>
21645
21646         * const.cs (Const.LookupConstantValue): Add support for constant
21647         `unchecked' and `checked' expressions.
21648         Also adding test case test-140.cs for this.
21649
21650 2002-07-17  Martin Baulig  <martin@gnome.org>
21651
21652         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
21653         check whether mi.ReturnType implements the IEnumerator interface; the
21654         `==' and the IsAssignableFrom() will fail in this situation.
21655
21656 2002-07-16  Ravi Pratap  <ravi@ximian.com>
21657
21658         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
21659         here too.
21660
21661 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21662
21663         * expression.cs: fixed bug #27811.
21664
21665 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
21666
21667         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
21668         Molaro: when we are a ref, the value already contains a pointer
21669         value, do not take the address of it.
21670
21671 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
21672         * removed mb-parser.jay and mb-tokenizer.cs
21673
21674 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
21675
21676         * expression.cs: check against the building corlib void type.
21677
21678 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
21679
21680         * ecore.cs: fix for valuetype static readonly fields: when 
21681         initializing them, we need their address, not the address of a copy.
21682
21683 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
21684
21685         * typemanager.cs: register also enum_type in corlib.
21686
21687 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
21688
21689         * class.cs: allow calling this (but not base) initializers in structs.
21690
21691 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
21692
21693         * ecore.cs: make sure we compare against the building base types
21694         in GetTypeSize ().
21695
21696 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
21697
21698         * typemanager.cs: fix TypeToCoreType() to handle void and object
21699         (corlib gets no more typerefs after this change).
21700
21701 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
21702
21703         * expression.cs (ArrayCreation.EmitArrayArguments): use
21704         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
21705
21706         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
21707         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
21708         array indexes, the runtime actually forbids them.
21709
21710         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
21711         for array arguments here.
21712
21713         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
21714         instead of the default for ValueTypes.
21715
21716         (New.DoEmit): Use IsValueType instead of
21717         IsSubclassOf (value_type)
21718         (New.DoResolve): ditto.
21719         (Invocation.EmitCall): ditto.
21720
21721         * assign.cs (Assign): ditto.
21722
21723         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
21724         Statements *are* currently doing part of their resolution during
21725         Emit.  
21726
21727         Expressions do always resolve during resolve, but statements are
21728         only required to propagate resolution to their children.
21729
21730 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
21731
21732         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
21733
21734         (LoadAssembly): Do not add the dll if it is already specified
21735
21736         (MainDriver): Add the System directory to the link path at the end,
21737         after all the other -L arguments. 
21738
21739         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
21740         wrong opcode for loading bytes and bools (ldelem.i1 instead of
21741         ldelem.u1) and using the opposite for sbytes.
21742
21743         This fixes Digger, and we can finally run it.
21744
21745         * driver.cs (UnixParseOption): Move the option parsing here.  
21746         (CSCParseOption): Implement CSC-like parsing of options.
21747
21748         We now support both modes of operation, the old Unix way, and the
21749         new CSC-like way.  This should help those who wanted to make cross
21750         platform makefiles.
21751
21752         The only thing broken is that /r:, /reference: and /lib: are not
21753         implemented, because I want to make those have the same semantics
21754         as the CSC compiler has, and kill once and for all the confussion
21755         around this.   Will be doing this tomorrow.
21756
21757         * statement.cs (Unsafe.Resolve): The state is checked during
21758         resolve, not emit, so we have to set the flags for IsUnsfe here.
21759
21760 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
21761
21762         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
21763         not catch the Error_ObjectRefRequired in SimpleName (as it is
21764         possible to have a class/instance variable name that later gets
21765         deambiguated), we have to check this here.      
21766
21767 2002-07-10  Ravi Pratap  <ravi@ximian.com>
21768
21769         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
21770         make static and put into Expression.
21771
21772         (Event.Define): Register the private field of the event with the 
21773         TypeManager so that GetFieldFromEvent can get at it.
21774
21775         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
21776         keep track of the private field associated with an event which
21777         has no accessors.
21778
21779         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
21780         private field.
21781
21782         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
21783
21784 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
21785
21786         * expression.cs (Binary.EmitBranchable): this routine emits the
21787         Binary expression in a branchable context.  This basically means:
21788         we need to branch somewhere, not just get the value on the stack.
21789
21790         This works together with Statement.EmitBoolExpression.
21791
21792         * statement.cs (Statement.EmitBoolExpression): Use
21793         EmitBranchable. 
21794
21795 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
21796
21797         * statement.cs (For): Reduce the number of jumps in loops.
21798
21799         (For): Implement loop inversion for the For statement.
21800
21801         (Break): We can be breaking out of a Try/Catch controlled section
21802         (foreach might have an implicit try/catch clause), so we need to
21803         use Leave instead of Br.
21804
21805         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
21806         now).  If the instace expression supports IMemoryLocation, we use
21807         the AddressOf method from the IMemoryLocation to extract the
21808         address instead of emitting the instance.
21809
21810         This showed up with `This', as we were emitting the instance
21811         always (Emit) instead of the Address of This.  Particularly
21812         interesting when This is a value type, as we dont want the Emit
21813         effect (which was to load the object).
21814
21815 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
21816
21817         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
21818
21819         * statement.cs (Checked): Set the CheckedState during the resolve
21820         process too, as the ConvCast operations track the checked state on
21821         the resolve process, and not emit.
21822
21823         * cs-parser.jay (namespace_member_declaration): Flag that we have
21824         found a declaration when we do.  This is used to flag error 1529
21825
21826         * driver.cs: Report ok when we display the help only.
21827
21828 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
21829
21830         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
21831
21832 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
21833
21834         * cs-tokenizer.cs (define): We also have to track locally the
21835         defines.  AllDefines is just used for the Conditional Attribute,
21836         but we also need the local defines for the current source code. 
21837
21838 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
21839
21840         * statement.cs (While, For, Do): These loops can exit through a
21841         Break statement, use this information to tell whether the
21842         statement is the last piece of code.
21843
21844         (Break): Flag that we break.
21845
21846         * codegen.cs (EmitContexts): New `Breaks' state variable.
21847
21848 2002-07-03  Martin Baulig  <martin@gnome.org>
21849
21850         * class.cs (TypeContainer.MethodModifiersValid): Allow override
21851         modifiers in method declarations in structs.  Otherwise, you won't
21852         be able to override things like Object.Equals().
21853
21854 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
21855
21856         * class.cs (Method, Property, Indexer): Do not allow the public
21857         modifier to be used in explicit interface implementations.
21858
21859         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
21860         override modifiers in method declarations in structs
21861
21862 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
21863
21864         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
21865         integer or real overflow, report an error
21866
21867 2002-07-02  Martin Baulig  <martin@gnome.org>
21868
21869         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
21870         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
21871         to tell the runtime about our newly created System.Object and
21872         System.ValueType types.
21873
21874 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
21875
21876         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
21877         struct instead of Ldarg/Starg.
21878
21879 2002-07-02  Martin Baulig  <martin@gnome.org>
21880
21881         * expression.cs (Indirection.Indirection): Call
21882         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
21883
21884 2002-07-02  Martin Baulig  <martin@gnome.org>
21885
21886         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
21887         ValueType, call TypeManager.TypeToCoreType() on it.
21888         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
21889         the OpCodes.Newarr argument.
21890
21891 2002-07-02  Martin Baulig  <martin@gnome.org>
21892
21893         * expression.cs (Invocation.EmitCall): When compiling corlib,
21894         replace all calls to the system's System.Array type to calls to
21895         the newly created one.
21896
21897         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
21898         System.Array methods.
21899         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
21900         from the system's System.Array type which must be replaced.
21901
21902 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
21903
21904         * typemanager.cs: load unverifiable_code_ctor so we can build
21905         corlib using the correct type. Avoid using GetTypeCode() with
21906         TypeBuilders.
21907         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
21908         TypeManager.object_type to allow building corlib.
21909
21910 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
21911
21912         * ecore.cs: handle System.Enum separately in LoadFromPtr().
21913
21914 2002-07-01  Martin Baulig  <martin@gnome.org>
21915
21916         * class.cs: Make the last change actually work, we need to check
21917         whether `ifaces != null' to avoid a crash.
21918
21919 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
21920
21921         * class.cs: when we build structs without fields that implement
21922         interfaces, we need to add the interfaces separately, since there is
21923         no API to both set the size and add the interfaces at type creation
21924         time.
21925
21926 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
21927
21928         * expression.cs: the dimension arguments to the array constructors
21929         need to be converted if they are a long.
21930
21931 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
21932
21933         * class.cs: don't emit ldarg.0 if there is no parent constructor
21934         (fixes showstopper for corlib).
21935
21936 2002-06-29  Martin Baulig  <martin@gnome.org>
21937
21938         MCS now compiles corlib on GNU/Linux :-)
21939
21940         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
21941         ie. check for MethodImplOptions.InternalCall.
21942
21943         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
21944         and TypeManager.attribute_type are null, so we must explicitly check
21945         whether parent is not null to find out whether it's an attribute type.
21946         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
21947         and SetBuilder, not only if the property is neither abstract nor external.
21948         This is necessary to set the MethodImplOptions on the accessor methods.
21949         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
21950         SetBuilder, see Property.Emit().
21951
21952         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
21953         populate "System.Object", "System.ValueType" and "System.Attribute" since
21954         they've already been populated from BootCorlib_PopulateCoreTypes().
21955
21956 2002-06-29  Martin Baulig  <martin@gnome.org>
21957
21958         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
21959         is the NullLiteral, we also need to make sure that target_type is not
21960         an enum type.   
21961
21962 2002-06-29  Martin Baulig  <martin@gnome.org>
21963
21964         * rootcontext.cs (RootContext.ResolveCore): We must initialize
21965         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
21966         before calling BootstrapCorlib_ResolveDelegate ().
21967
21968 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21969
21970         * statement.cs: fixed build-breaker. All tests passed ok.
21971
21972 2002-06-27  Martin Baulig  <martin@gnome.org>
21973
21974         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
21975         for System.Decimal when compiling corlib.
21976
21977 2002-06-27  Martin Baulig  <martin@gnome.org>
21978
21979         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
21980         switch blocks which contain nothing but a default clause.
21981
21982 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
21983
21984        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
21985
21986 2002-06-27  Martin Baulig  <martin@gnome.org>
21987
21988         * ecore.cs (PropertyExpr.PropertyExpr): Call
21989         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
21990
21991         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
21992         is already a TypeBuilder.
21993
21994 2002-06-27  Martin Baulig  <martin@gnome.org>
21995
21996         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
21997         `target_type == TypeManager.array_type', not IsAssignableFrom() in
21998         the "from an array-type to System.Array" case.  This makes it work
21999         when compiling corlib.
22000
22001 2002-06-27  Martin Baulig  <martin@gnome.org>
22002
22003         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
22004         non-static PropertyExpr, set its InstanceExpression.  This makes
22005         the `ICollection.Count' property work in System/Array.cs.
22006
22007 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
22008
22009         * driver.cs: Made error handling more consistent.  Errors now
22010         tracked by Report class, so many methods which used to return int
22011         now return void.  Main() now prints success/failure and 
22012         errors/warnings message.
22013
22014         Renamed '--probe' compiler argument to '--expect-error'.  Removed
22015         the magic number return values (123 and 124).  Now, if the
22016         expected error occurs, the compiler exits with success (exit value
22017         0).  If the compilation completes without seeing that particular
22018         error, the compiler exits with failure (exit value 1).  The
22019         makefile in mcs/errors has been changed to handle the new behaviour.
22020
22021         * report.cs: Made 'expected error' number a property and renamed
22022         it from 'Probe' to 'ExpectedError'.
22023
22024         * genericparser.cs: Removed error handling support, since it is
22025         now all done by Report class.
22026
22027         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
22028         class, so parse() no longer returns an int.
22029
22030         * namespace.cs: Use Report.Error instead of GenericParser.error
22031
22032 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
22033
22034         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
22035         TypeContainer.AddOperator): At the front of the list put the
22036         explicit implementations, so they get resolved/defined first. 
22037
22038 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
22039
22040         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
22041         interface type is implemented by this TypeContainer.  Used during
22042         explicit interface implementation.
22043
22044         (Property.Define, Indexer.Define, Method.Define): Validate that
22045         the given interface in the explicit implementation is one of the
22046         base classes for the containing type.
22047
22048         Also if we are explicitly implementing an interface, but there is
22049         no match in the pending implementation table, report an error.
22050
22051         (Property.Define): Only define the property if we are
22052         not explicitly implementing a property from an interface.  Use the
22053         correct name also for those properties (the same CSC uses,
22054         although that is really not needed).
22055
22056         (Property.Emit): Do not emit attributes for explicitly implemented
22057         properties, as there is no TypeBuilder.
22058
22059         (Indexer.Emit): ditto.
22060
22061         Hiding then means that we do not really *implement* a pending
22062         implementation, which makes code fail.
22063
22064 2002-06-22  Martin Baulig  <martin@gnome.org>
22065
22066         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
22067         the return value of Object.GetType().  [FIXME: we need to do this whenever
22068         we get a type back from the reflection library].
22069
22070 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
22071
22072         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
22073
22074 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
22075
22076         * attribute.cs: Return null if we can not look up the type.
22077
22078         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
22079         the interface types found.
22080
22081         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
22082         interface types found.
22083
22084         * typemanager.cs (GetInterfaces): Make this routine returns alll
22085         the interfaces and work around the lame differences between
22086         System.Type and System.Reflection.Emit.TypeBuilder in the results
22087         result for GetInterfaces.
22088
22089         (ExpandInterfaces): Given an array of interface types, expand and
22090         eliminate repeated ocurrences of an interface.  This expands in
22091         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
22092         be IA, IB, IC.
22093
22094 2002-06-21  Martin Baulig  <martin@gnome.org>
22095
22096         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
22097         on System.Enum.
22098
22099 2002-06-21  Martin Baulig  <martin@gnome.org>
22100
22101         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
22102         and called with one of the core types, return the corresponding typebuilder for
22103         that type.
22104
22105         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
22106         element type.
22107
22108 2002-06-21  Martin Baulig  <martin@gnome.org>
22109
22110         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
22111         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
22112         (Expression.ConvertReferenceExplicit): Likewise.
22113
22114         * expression.cs (ElementAccess.DoResolve): Likewise.
22115         (ElementAccess.DoResolveLValue): Likewise.
22116
22117 2002-06-10  Martin Baulig  <martin@gnome.org>
22118
22119         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
22120         add the "value" parameter to the parameter list.
22121
22122         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
22123         to our caller.
22124
22125 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
22126
22127         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
22128         the argument to an int, uint, long or ulong, per the spec.  Also
22129         catch negative constants in array creation.
22130
22131 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
22132
22133         * class.cs: do not allow the same interface to appear twice in
22134         the definition list.
22135
22136 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
22137
22138         * ecore.cs: don't use ldlen with System.Array.
22139
22140 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
22141
22142         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
22143
22144 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
22145
22146         * modifiers.cs: produce correct field attributes for protected
22147         internal. Easy fix so miguel can work on ther harder stuff:-)
22148
22149 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
22150
22151         * pending.cs: New file.  Move the code from class.cs here.
22152         Support clearning the pending flag for all methods (when not doing
22153         explicit interface implementation).
22154
22155 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
22156
22157         * rootcontext.cs: added a couple more types needed to bootstrap.
22158
22159 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
22160
22161         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
22162         constructor in the type, instead of any constructor in the type
22163         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
22164         a bug in the Mono runtime when applying the params attribute). 
22165
22166 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
22167         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
22168
22169 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
22170
22171         * expression.cs (Unary.ResolveOperator): Use TypeManager
22172         to resolve the type.
22173
22174 2002-06-13  Ravi Pratap  <ravi@ximian.com>
22175
22176         * cs-parser.jay (enum_member_declaration): Pass in the attributes
22177         attached.
22178
22179         * enum.cs (AddEnumMember): Add support to store the attributes associated 
22180         with each member too.
22181
22182         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
22183         field builders too - this takes care of the enum member case.
22184
22185 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
22186
22187         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
22188         address-of operator on both value types and pointers.
22189
22190 2002-06-10  Martin Baulig  <martin@gnome.org>
22191
22192         * interface.cs (Interface.PopulateIndexer): Add the indexer's
22193         PropertyBuilder to the `property_builders' list.
22194
22195         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
22196         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
22197         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
22198         find any indexers which are inherited from an interface.
22199
22200 2002-06-09  Martin Baulig  <martin@gnome.org>
22201
22202         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
22203         the same type as the constant if necessary.  There's also a test-130.cs
22204         for this.
22205
22206         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
22207
22208         * typemanager.cs (TypeManager.ChangeType): Previously known as
22209         Enum.ChangeEnumType().
22210
22211 2002-06-09  Martin Baulig  <martin@gnome.org>
22212
22213         * expression.cs (Cast.TryReduce): Added support for consts.
22214
22215 2002-06-08  Ravi Pratap  <ravi@ximian.com>
22216
22217         * class.cs (Accessor): Hold attributes information so we can pass
22218         it along.
22219
22220         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
22221         Modify to pass in attributes attached to the methods.
22222
22223         (add_accessor_declaration, remove_accessor_declaration): Ditto.
22224
22225         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
22226         to handle the Accessor kind :-)
22227
22228         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
22229
22230 2002-06-08  Martin Baulig  <martin@gnome.org>
22231
22232         * expression.cs (Unary.TryReduceNegative): Added support for
22233         ULongConstants.
22234
22235 2002-06-08  Martin Baulig  <martin@gnome.org>
22236
22237         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
22238         name can't be found in the `defined_names' - the caller will do a
22239         MemberLookup in this case and thus find methods in System.Enum
22240         such as Enum.IsDefined().
22241
22242 2002-06-08  Martin Baulig  <martin@gnome.org>
22243
22244         * enum.cs (Enum.ChangeEnumType): This is a custom version of
22245         Convert.ChangeType() which works with TypeBuilder created types.
22246         (Enum.LookupEnumValue, Enum.Define): Use it here.
22247
22248         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
22249         `TypeBuilder.BaseType != null' check.
22250         (TypeContainer.FindMembers): Only lookup parent members if we
22251         actually have a parent.
22252         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
22253         (ConstructorInitializer.Resolve): Likewise.
22254
22255         * interface.cs (Interface.FindMembers): Added
22256         `TypeBuilder.BaseType != null' check.
22257
22258         * rootcontext.cs (RootContext.ResolveCore): Added
22259         "System.Runtime.CompilerServices.IndexerNameAttribute" to
22260         classes_second_stage.
22261
22262         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
22263         debug_type and trace_type when compiling with --nostdlib.       
22264
22265 2002-06-07  Martin Baulig  <martin@gnome.org>
22266
22267         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
22268         (AddField): Set it to true when adding a non-static field.
22269         (DefineType): Use `have_nonstatic_fields' to find out whether we
22270         have non-static fields, not `Fields != null'.
22271
22272 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
22273
22274         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
22275         dereferencing a null on the static-field code path)
22276
22277 2002-05-30  Martin Baulig  <martin@gnome.org>
22278
22279         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
22280         to take command line arguments.  Use reflection to call the new
22281         custom `Initialize' function on the symbol writer and pass it the
22282         command line arguments.
22283
22284         * driver.cs (--debug-args): New command line argument to pass command
22285         line arguments to the symbol writer.
22286
22287 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
22288
22289         * assign.cs (DoResolve): Forgot to do the implicit conversion to
22290         the target type for indexers and properties.  Thanks to Joe for
22291         catching this.
22292
22293 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
22294
22295         * typemanager.cs (MethodFlags): returns the method flags
22296         (Obsolete/ShouldIgnore) that control warning emission and whether
22297         the invocation should be made, or ignored. 
22298
22299         * expression.cs (Invocation.Emit): Remove previous hack, we should
22300         not do this on matching a base type, we should do this based on an attribute
22301
22302         Only emit calls to System.Diagnostics.Debug and
22303         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
22304         on the command line.
22305
22306         * rootcontext.cs: Global settings for tracing and debugging.
22307
22308         * cs-tokenizer.cs (define): New utility function to track
22309         defines.   Set the global settings for TRACE and DEBUG if found.
22310
22311 2002-05-25  Ravi Pratap  <ravi@ximian.com>
22312
22313         * interface.cs (Populate*): Pass in the TypeContainer as well as
22314         the DeclSpace as parameters so that we can create EmitContexts and
22315         then use that to apply attributes etc.
22316
22317         (PopulateMethod, PopulateEvent, PopulateProperty)
22318         (PopulateIndexer): Apply attributes everywhere.
22319
22320         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
22321         etc.
22322
22323         (ApplyAttributes): Update accordingly.
22324
22325         We now apply interface attributes for all members too.
22326
22327 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
22328
22329         * class.cs (Indexer.Define); Correctly check if we are explicit
22330         implementation (instead of checking the Name for a ".", we
22331         directly look up if the InterfaceType was specified).
22332
22333         Delay the creation of the PropertyBuilder.
22334
22335         Only create the PropertyBuilder if we are not an explicit
22336         interface implementation.   This means that explicit interface
22337         implementation members do not participate in regular function
22338         lookups, and hence fixes another major ambiguity problem in
22339         overload resolution (that was the visible effect).
22340
22341         (DefineMethod): Return whether we are doing an interface
22342         implementation. 
22343
22344         * typemanager.cs: Temporary hack until we get attributes in
22345         interfaces (Ravi is working on that) and we get IndexerName
22346         support in interfaces.
22347
22348         * interface.cs: Register the indexers as properties.
22349
22350         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
22351         warning, I have verified that this is a bug in the .NET runtime
22352         (JavaScript suffers of the same problem).
22353
22354         * typemanager.cs (MemberLookup): When looking up members for
22355         interfaces, the parent of an interface is the implicit
22356         System.Object (so we succeed in searches of Object methods in an
22357         interface method invocation.  Example:  IEnumerable x;  x.ToString
22358         ()) 
22359
22360 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
22361
22362         * class.cs (Event): Events should also register if they do
22363         implement the methods that an interface requires.
22364
22365         * typemanager.cs (MemberLookup); use the new GetInterfaces
22366         method. 
22367
22368         (GetInterfaces): The code used to lookup interfaces for a type is
22369         used in more than one place, factor it here. 
22370
22371         * driver.cs: Track the errors at the bottom of the file, we kept
22372         on going.
22373
22374         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
22375         instance if the method we are calling is static!
22376
22377 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
22378
22379         * attribute.cs (ApplyAttributes): Make this function filter out
22380         the IndexerName attribute (as that attribute in reality is never
22381         applied) and return the string constant for the IndexerName
22382         attribute. 
22383
22384         * class.cs (TypeContainer.Emit): Validate that all the indexers
22385         have the same IndexerName attribute, and if so, set the
22386         DefaultName attribute on the class. 
22387
22388         * typemanager.cs: The return value might contain other stuff (not
22389         only methods).  For instance, consider a method with an "Item"
22390         property and an Item method.
22391
22392         * class.cs: If there is a problem with the parameter types,
22393         return. 
22394
22395 2002-05-24  Ravi Pratap  <ravi@ximian.com>
22396
22397         * ecore.cs (ImplicitConversionExists): Wrapper function which also
22398         looks at user defined conversion after making a call to 
22399         StandardConversionExists - we need this for overload resolution.
22400
22401         * expression.cs : Update accordingly the various method calls.
22402
22403         This fixes 2 bugs filed against implicit user defined conversions 
22404
22405 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
22406
22407         * statement.cs: Track the result of the assignment.
22408
22409 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
22410
22411         * expression.cs (MemberAccess): Improved error reporting for
22412         inaccessible members.
22413
22414 2002-05-22  Martin Baulig  <martin@gnome.org>
22415
22416         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
22417         itself with debugging support.
22418
22419 2002-05-22  Martin Baulig  <martin@gnome.org>
22420
22421         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
22422         Removed, this isn't needed anymore.
22423
22424 2002-05-20  Martin Baulig  <martin@gnome.org>
22425
22426         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
22427         be underlying type for an enum.
22428
22429 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
22430
22431         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
22432         that splits out the loading of just the core types.
22433
22434         * rootcontext.cs (ResolveCore): Split the struct resolution in
22435         two, so we can load the enumeration underlying types before any
22436         enums are used.
22437
22438         * expression.cs (Is): Bandaid until we fix properly Switch (see
22439         bug #24985 for details).
22440
22441         * typemanager.cs (ImplementsInterface): The hashtable will contain
22442         a null if there are no interfaces implemented.
22443
22444 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
22445
22446         * cs-parser.jay (indexer_declarator): It is fine to have array
22447         parameters
22448
22449 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
22450
22451         * typemanager.cs: (RegisterBuilder): New function used to register
22452         TypeBuilders that implement interfaces.  Since
22453         TypeBuilder.GetInterfaces (as usual) does not work with lame
22454         Reflection.Emit. 
22455         (AddUserType): register interfaces.
22456
22457         (ImplementsInterface): Use the builder_to_ifaces hash if we are
22458         dealing with TypeBuilder.  Also, arrays are showing up as
22459         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
22460         methods can not be invoked on them!
22461
22462         * ecore.cs (ExplicitReferenceConversionExists): Made public.
22463         (ImplicitReferenceConversionExists): Split out from
22464         StandardConversionExists. 
22465
22466         * expression.cs (As): We were only implementing one of the three
22467         cases for the as operator.  We now implement them all.
22468         (Is): Implement the various other cases for Is as well.
22469
22470         * typemanager.cs (CACHE): New define used to control if we want or
22471         not the FindMembers cache.  Seems to have a negative impact on
22472         performance currently
22473
22474         (MemberLookup): Nested types have full acess to
22475         enclosing type members
22476
22477         Remove code that coped with instance/static returns for events, we
22478         now catch this in RealFindMembers.
22479
22480         (RealFindMembers): only perform static lookup if the instance
22481         lookup did not return a type or an event.  
22482
22483 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
22484
22485         * assign.cs (CompoundAssign): We pass more semantic information
22486         now to Compound Assignments than we did before: now we have all
22487         the information at hand, and now we resolve the target *before* we
22488         do the expression expansion, which allows the "CacheValue" method
22489         to have the effect we intended (before, a [x] += 1 would generate
22490         two differen ArrayAccess expressions from the ElementAccess,
22491         during the resolution process).
22492
22493         (CompoundAssign.DoResolve): Resolve target and original_source here.
22494
22495 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
22496
22497         * expression.cs (ArrayAccess): dropped debugging information. 
22498
22499         * typemanager.cs: Small bug fix: I was always returning i_members,
22500         instead of one of i_members or s_members (depending on which had
22501         the content).
22502
22503         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
22504         method is invoked before any code generation takes place, and it
22505         is a mechanism to inform that the expression will be invoked more
22506         than once, and that the method should use temporary values to
22507         avoid having side effects
22508
22509         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
22510
22511         * ecore.cs (Expression.CacheTemporaries): Provide empty default
22512         implementation.
22513
22514         * expression.cs (Indirection, ArrayAccess): Add support for
22515         CacheTemporaries in these two bad boys. 
22516
22517         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
22518         ldobj or ldind_ref.  
22519         (StoreFromPtr): Handle stobj as well.
22520
22521         * expression.cs (UnaryMutator): Share more code.
22522
22523         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
22524         down: I was not tracking the Filter function as well, which
22525         was affecting the results of the cache.
22526
22527 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
22528
22529         * attribute.cs: Remove the hack to handle the CharSet property on
22530         StructLayouts. 
22531
22532 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
22533
22534         * attribute.cs (DoResolve): More uglyness, we now only try to
22535         resolve the attribute partially, to extract the CharSet
22536         information (only if we are a StructLayout attribute).  Otherwise 
22537
22538         (GetExtraTypeInfo): Add some code to conditionally kill in the
22539         future this.   I am more and more convinced that the .NET
22540         framework has special code to handle the attribute setting on
22541         certain elements.
22542
22543         * expression.cs (IsParamsMethodApplicable): Revert my previous
22544         foreach change here, it was wrong.
22545
22546 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
22547
22548         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
22549         (pp_expr): do not abort on unknown input, just return.
22550         (eval): abort if there are pending chars.
22551
22552         * attribute.cs (Attribute.Resolve): Positional parameters are
22553         optional.  Deal with that case.
22554
22555         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
22556         the Ansi/Unicode/Auto information for the type.
22557
22558         (TypeContainer.DefineType): instantiate the EmitContext here, as
22559         we will be using it during the type definition (to resolve
22560         attributes) and during the emit phase.
22561
22562         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
22563         to pull type information out of the attributes
22564
22565         (Attribute.Resolve): track the constructor builder, and allow for
22566         multiple invocations (structs and classes will use this).
22567
22568         * ecore.cs (MemberLookupFinal): new version with all the
22569         parameters customizable.
22570
22571         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
22572         constructors.  Return if the result value is null (as the error
22573         would have been flagged already by MemberLookupFinal)
22574
22575         Do not allow instances of abstract classes or interfaces to be
22576         created.
22577
22578         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
22579         We have to compare the assembly property here when dealing with
22580         FamANDAssem and Assembly access modifiers, because we might be
22581         creating an assembly from *modules* (that means that we are not
22582         getting TypeBuilders for types defined in other modules that are
22583         part of this assembly).
22584
22585         (Method.Emit): If the method is marked abstract and has a body,
22586         emit an error. 
22587
22588         (TypeContainer.DefineMembers): If both the defined member and the
22589         parent name match are methods, then do not emit any warnings: let
22590         the Method.Define routine take care of flagging warnings.  But if
22591         there is a mismatch (method overrides something else, or method is
22592         overriwritten by something, then emit warning).
22593
22594         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
22595         set to null, this means `do not check for the return type on the
22596         signature'. 
22597
22598         (Method.Define): set the return type for the method signature to
22599         null, so that we get methods with the same name and parameters and
22600         different return types.  This is used to flag warning 114 (you are
22601         hiding a method, and you probably want to use the new/override
22602         keywords instead).
22603
22604         * typemanager.cs (MemberLookup): Implemented proper access
22605         control, closing a long standing set of bug reports.  The problem
22606         was that the Framework only has two bits: Public and NonPublic,
22607         and NonPublic includes private and protected methods, but we need
22608         to enforce the FamANDAssem, FamOrAssem and Family. 
22609
22610 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
22611
22612         * statement.cs (GotoCase): Return true: Ammounts to giving up
22613         knowledge on whether we return or not, and letting the other case
22614         be responsible for it.
22615
22616 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
22617
22618         * driver.cs: Do not load directories for each file processed, only
22619         do it if there is a pattern.
22620
22621         * ecore.cs: Report readonly assigns here as well, as we might have
22622         been resolved only by MemberAccess.
22623
22624         (SimpleName.SimpleNameResolve): Also be useful for LValue
22625         resolution.   We need this to propagate assign to local readonly variables
22626
22627         * typemanager.cs: Use a ptrhashtable for the criteria, because we
22628         do not want to reuse potential criteria memory.
22629
22630         * class.cs (MyEventBuilder): Set reflected_type;
22631
22632         * ecore.cs (Constantify): Added support for constifying bools.
22633
22634         (RootContext.LookupType): Added a cache for values looked up in
22635         the declaration space.
22636
22637         * typemanager.cs (FindMembers): Now is a front-end to
22638         RealFindMembers, and provides a two-level hashtable-based cache to
22639         the request.  
22640
22641         15% performance improvement: from 22.5 to 19.2 seconds.
22642
22643         * expression.cs (IsParamsMethodApplicable): use foreach.
22644         (Invocation.DoResolve): ditto.
22645         (New.DoResolve): ditto.
22646         (ArrayCreation.DoResolve): ditto.
22647
22648         * ecore.cs (FindMostEncompassingType): use foreach.
22649
22650         * delegate.cs (NewDelegate.DoResolve): Use foreach
22651
22652         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
22653         (RemoveMethods): use foreach.
22654
22655         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
22656         nested foreach statements instead of for, and also break out of
22657         the inner loop once a match is found.
22658
22659         (Invocation.OverloadResolve): Use foreach, simplify the code. 
22660
22661 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
22662
22663         * cfold.cs (BinaryFold): During an enumeration evaluation context,
22664         we actually unwrap the expression to allow for extra information
22665         to be extracted. 
22666
22667         * expression.cs: Use Shr_Un on unsigned operations. 
22668
22669 2002-05-08  Ravi Pratap  <ravi@ximian.com>
22670
22671         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
22672         applicable operators was not being considered correctly. This closes
22673         the bug Miguel reported.
22674
22675 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
22676
22677         * attribute.cs: check that the type derives from System.Attribute
22678         and report the correct error in that case (moved the duplicate code to
22679         its own method, too).
22680
22681 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
22682
22683         * attribute.cs: lookup attribute type name as the spec says: first the
22684         bare attribute name and then name + "Attribute" (nant compiles with
22685         mcs after this fix).
22686
22687 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
22688
22689         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
22690         Because of the way we parse things, we should try to see if a
22691         UIntConstant can fit in an integer.
22692
22693 2002-05-07  Ravi Pratap  <ravi@ximian.com>
22694
22695         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
22696         when we are in an explicit context.
22697
22698         (ConvertReferenceExplicit): When converting from Iface type S to Class
22699         T make sure the rules are implemented as an OR.
22700
22701         * parameter.cs (ParameterType): Make it a property for now although the
22702         purpose really isn't anything immediate.
22703
22704         * expression.cs (Is*Applicable): Do better checking on the parameter type
22705         of a ref/out parameter. The ones from the system assemblies are already 
22706         marked with the correct type so we don't need to do any correction.
22707
22708         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
22709         the object type is standard too so include that.
22710
22711 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
22712
22713         * ecore.cs (StandardConversionExists): Augment with missing code:
22714         deal with IntConstant, LongConstants and Enumerations.
22715
22716         * assign.cs: Report the error, instead of failing silently
22717
22718         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
22719         typecontainer that they are declared, because the
22720         typecontainer/namespace will have the list of using clauses that
22721         need to be applied.
22722
22723         Assembly Attributes were escaping the normal registration
22724         mechanism. 
22725
22726         (EmitCode): Apply attributes within an EmitContext that represents
22727         the container they were declared on.
22728
22729         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
22730
22731 2002-05-06  Ravi Pratap  <ravi@ximian.com>
22732
22733         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
22734         Revamp completely - make much cleaner as we now operate only
22735         on a set of Types.
22736
22737         (FindMostSpecificSource, FindMostSpecificTarget): New methods
22738         to implement the logic detailed in the spec more correctly.
22739
22740         (UserDefinedConversion): Update accordingly.
22741
22742 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
22743
22744         * statement.cs: Return flow analysis information up.
22745
22746         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
22747         and the default.
22748
22749         (token): Do not consume an extra character before calling
22750         decimal_digits.
22751
22752 2002-05-06  Piers Haken <piersh@friskit.com>
22753
22754         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
22755
22756 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
22757
22758         * class.cs (Constructor.Emit): Set the IsStatic flag in the
22759         EmitContext during the instance constructor initializer
22760         resolution, to stop access to instance variables.
22761
22762         This is mandated by the spec, last paragraph of the `constructor
22763         initializers' section. 
22764
22765 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
22766
22767         * cs-parser.jay, class.cs (Accessor): new class used to represent
22768         an accessor (get or set).  In the past we used `null' to represent
22769         a missing accessor.  But this is ambiguous because there was no
22770         way to tell in abstract indexers/properties if one of them was
22771         specified.
22772
22773         Now there is a way of addressing that.
22774
22775         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
22776         instead of FindMembers.
22777
22778         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
22779         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
22780
22781         * attribute.cs: Treat indexers and properties as the same in terms
22782         of applying attributes
22783
22784         * ecore.cs (FindMostEncompassedType): Use statically initialized
22785         EmptyExpressions()s like we do elsewhere to avoid creating useless
22786         objects (and we take this out of the tight loop).
22787
22788         (GetConversionOperators): Move the code to extract the actual
22789         operators to a separate routine to clean things up.
22790
22791 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
22792
22793         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
22794         events are always registered FieldBuilders.
22795
22796         * class.cs (FieldBase): New class shared by Fields 
22797
22798         * delegate.cs: If we are a toplevel delegate, use our full name.
22799         If we are a nested delegate, then only use our tail name.
22800
22801 2002-05-02  Ravi Pratap  <ravi@ximian.com>
22802
22803         * expression.cs (IsApplicable): Ensure that we add the "&" to
22804         ref/out types before comparing it with the type of the argument.
22805
22806         (IsParamsMethodApplicable): Ditto.
22807
22808         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
22809         silly me ;-)
22810
22811         * delegate.cs : Handle the case when we have more than one applicable
22812         method. Flag an error only when we finish checking all.
22813
22814 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
22815
22816         * expression.cs: Add support for boolean static initializers.
22817
22818 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
22819
22820         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
22821
22822         * parameter.cs (ComputeParameterTypes,
22823         ComputeAndDefineParameterTypes): Better error handling: now we
22824         clear the `types' cache if we fail during any of the type lookups.
22825         We also return the status code correctly to our caller
22826
22827         * delegate.cs: If we fail to define a delegate, abort the extra
22828         steps. 
22829
22830         * expression.cs (Binary.ResolveOperator): for
22831         operator==(object,object) and operator !=(object, object) we also
22832         have to verify that there is an implicit conversion from one to
22833         the other.
22834
22835         (ArrayAccess.DoResolve): Array Access can operate on
22836         non-variables. 
22837
22838 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
22839
22840         * assign.cs (CompoundAssign): A new class used as a "flag" that
22841         the assignment actually is happening as part of a compound
22842         assignment operator.
22843
22844         During compound assignment, a few new rules exist to enable things
22845         like:
22846
22847         byte b |= 1 + 2
22848
22849         From the spec:
22850
22851         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
22852         to the type of x) if y is implicitly convertible to the type of x,
22853         and the operator is a builtin operator and the return type of the
22854         operator is explicitly convertible to the type of x. 
22855
22856         * rootcontext.cs: Reset warning level to 2.  4 catches various
22857         "interesting" features in mcs, we must clean this up at some
22858         point, but currently am trying to kill other bugs ;-)
22859
22860         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
22861         in container classes as well.  
22862
22863         * expression.cs (Binary.ResolveOperator): Handle string case
22864         before anything else (as operator overloading does emit an error
22865         before doing anything else).
22866
22867         This code could go away when we move to a table driven model, but
22868         i could not come up with a good plan last night.
22869
22870 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
22871
22872         * typemanager.cs (CSharpName): reimplementation using regex.
22873         * class.cs: added null check for fields in Emit
22874         * rootcontext.cs: set warninglevel to 4
22875
22876 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
22877
22878         * typemanager.cs (CSharpName): reimplemented with Lupus
22879         suggestion.
22880
22881 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
22882
22883         * statement.cs (If): correclty implement Resolve, because we were
22884         not catching sem errors in there.  The same process is needed
22885         everywhere else. 
22886         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
22887
22888
22889         (Statement.Warning_DeadCodeFound): Factorize code.
22890         (While): Report dead code here too.
22891
22892         (Statement): Added Resolve virtual method to allow
22893         for resolution split from the emit code.
22894
22895 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
22896
22897         * statement.cs (EmitBoolExpression): No longer try to resolve the
22898         expression here.    
22899         (MakeBoolean): New utility function that resolve, implicitly
22900         converts to boolean and tags the expression. 
22901
22902
22903         (If, Do): Implement dead code elimination.
22904         (While): Implement loop inversion
22905
22906         (Do, While, For, If): Resolve the expression prior to calling our
22907         code generation.
22908
22909 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
22910
22911         * class.cs:
22912           - added method Report28 (warning: program has more than one entry point)
22913           - added method IsEntryPoint, implements paragraph 10.1 of the spec
22914           - modified method Method.Define, the part at the end of the method
22915
22916         * rootcontext.cs: added static public Location EntryPointLocation;
22917           
22918         * ../errors/cs0028.cs : Add test case for the above warning.              
22919
22920         * typemanager.cs:
22921           - modified method CSharpName to allow arrays of primitive type to
22922             be printed nicely (e.g. instead of System.Int32[][] it now prints
22923             int[][])
22924           - added method CSharpSignature: returns the signature of a method
22925             in string format to be used in reporting errors, warnings, etc.
22926
22927         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
22928         with String.Empty.
22929
22930 2002-04-26  Ravi Pratap  <ravi@ximian.com>
22931
22932         * delegate.cs (Define): Fix extremely silly bug where I was
22933         setting the type of the 'object' parameter of the BeginInvoke
22934         method to System.IAsyncResult instead of System.Object ;-)
22935
22936 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
22937
22938         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
22939         here. 
22940
22941         (Constructor.Emit): return if we fail to initialize the
22942         constructor.  Another door closed!  
22943
22944         * expression.cs (New.DoResolve): Improve error message (from -6 to
22945         1501).  Use DeclaredOnly lookup to find the exact constructor.
22946
22947         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
22948         loop.  This is useful.
22949
22950         * cs-parser.jay: Adjust the default parameters so that destructors
22951         have the proper signature.
22952
22953 2002-04-26  Martin Baulig  <martin@gnome.org>
22954
22955         * driver.cs (LoadAssembly): If `assembly' contains any characters
22956         which are only valid in path names and not in assembly names
22957         (currently slash, backslash and point), use Assembly.LoadFrom ()
22958         instead of Assembly.Load () on the `assembly' (before iteration
22959         over the link_paths).
22960
22961 2002-04-26  Martin Baulig  <martin@gnome.org>
22962
22963         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
22964
22965 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
22966
22967         * class.cs (Property): use the new typemanager.MemberLookup
22968
22969         (TypeContainer.MemberLookup): Implement using the
22970         TypeManager.MemberLookup now. 
22971
22972         * typemanager.cs: Make MemberLookup a function of the TypeManager,
22973         and return MemberInfos, so that these can be used without an
22974         EmitContext (what we had before).
22975
22976 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
22977
22978         * expression.cs: Fix the case where the argument to params if the
22979         type of the params.  I omitted handling this before.   Fixed
22980
22981 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
22982
22983         * driver.cs: Call BootCorlib_PopulateCoreType
22984
22985         * class.cs (Property.CheckBase): Check for properties only, not
22986         for all members. 
22987
22988         * interface.cs: Temporary hack: try/catch around the
22989         CustomAttributeBuilder, because I am getting an exception that I
22990         do not understand.
22991
22992         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
22993         types whose definitions are required to be there (attributes are
22994         defined before standard types).
22995
22996         Compute definitions as we boot the various types, as they are used
22997         immediately (value_type class will need object_type, but if we do
22998         not initialize object_type, we will pass a null, which will let
22999         the runtime pick the System.Object from the existing corlib, which
23000         is not what we want).
23001
23002 2002-04-22  Patrik Torstensson <totte@labs2.com>
23003
23004         * cs-tokenizer.cs: fixed a number of trim() issues.
23005
23006 2002-04-22  Ravi Pratap  <ravi@ximian.com>
23007
23008         * expression.cs (Argument.Type): Ensure that we return the correct
23009         type when we have out or ref parameters [in which case we 
23010         append a "&"].
23011
23012 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
23013
23014         * class.cs (Property, Indexer): Allow extern modifier in there. 
23015
23016         * typemanager.cs (InitBaseTypes): Initializes object_type and
23017         value_type, since those will be used early on during the bootstrap
23018         process to compile corlib.
23019
23020         (InitCoreTypes): Move code from here to InitBaseTypes.
23021
23022 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
23023
23024         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
23025         single-dimension arrays as using the ldlen opcode.  
23026
23027         Daniel Lewis discovered this optimization.  
23028
23029         * typemanager.cs: Add signature for System.Array::get_Length
23030
23031 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23032
23033         * statement.cs: report the error when the foreach does not apply to an
23034         array nor a collection.
23035
23036 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
23037
23038         * expression.cs: Add implicit conversions to the operator ~.
23039
23040         * constant.cs (DecimalConstant.Emit): Emit decimal value.
23041
23042         * typemanager.cs: Locate the decimal constructor.
23043
23044 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23045
23046         * attribute.cs: use the new property of TypeOf.
23047         * expression.cs: added 'get' property around typearg.
23048
23049         These changes fix a build breaker reported by NickD. Is this the
23050         correct way to fix?  If not, please, revert my changes and make it
23051         work :-).
23052
23053 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
23054
23055         * attribute.cs: Add support for typeof in attribute invocations.
23056         I am not sure that this is right though.
23057
23058 2002-04-14  Duncan Mak  <duncan@ximian.com>
23059
23060         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
23061         Binary.Operator.Division case.
23062
23063 2002-04-13  Ravi Pratap  <ravi@ximian.com>
23064
23065         * class.cs (DefineType): Ensure that we do a proper check on
23066         attribute types and also register it with the TypeManager.
23067
23068         (TypeContainer.Targets): The default for attribute types is
23069         AttributeTargets.All.
23070
23071         * attribute.cs (ApplyAttributes): Registering the attribute type
23072         is done elsewhere, not when we discover we have a Usage attribute.
23073
23074 2002-04-12  Ravi Pratap  <ravi@ximian.com>
23075
23076         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
23077         and get rid of is_delegate parameter.
23078
23079         * everywhere : update.
23080
23081 2002-04-12  Ravi Pratap  <ravi@ximian.com>
23082
23083         * cs-parser.jay (compilation_unit): Revamp completely to use
23084         some new ideas that I got from Rhys' grammar to solve the problems
23085         with assembly level attributes.
23086
23087         (outer_declaration): New grammar production.
23088
23089         (attribute_sections): Add.
23090
23091         (opt_attributes): Base on attribute_sections
23092
23093         (namespace_declaration): Allow opt_attributes to tackle the case
23094         when we have assembly level attributes - we are clever in this
23095         regard now ;-)
23096
23097         * attribute.cs (ApplyAttributes): Do not worry about assembly 
23098         attributes in the non-global context.
23099
23100         * rootcontext.cs (AddGlobalAttributes): Go back to using this
23101         instead of SetGlobalAttributes.
23102
23103         * class.cs, rootcontext.cs : Ensure we define and generate 
23104         attribute types before anything else.
23105
23106         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
23107         and flag the new error -20 for the case when the attribute type
23108         does not have valid targets specified. csc does not catch this.
23109
23110         * ../errors/errors.txt : update for error # -20
23111
23112 2002-04-11  Ravi Pratap  <ravi@ximian.com>
23113
23114         * support.cs (InternalParameters.ParameterModifier): Do some null
23115         checking and return sane values.
23116
23117         * class.cs (Method.Define): If we are a PInvoke method, ensure
23118         that we are static and extern. Report error # 601
23119
23120         * ../errors/cs0601.cs : Add test case for the above error.
23121
23122 2002-04-07  Ravi Pratap  <ravi@ximian.com>
23123
23124         * rootcontext.cs (attribute_types): We need to keep type of
23125         all attribute types separately and emit code for them first.
23126
23127         (RegisterAttribute) : Implement.
23128
23129         * class.cs (DefineType): Check if the current Type is a custom
23130         attribute type and register it accordingly.
23131
23132         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
23133         adding the first attribute twice and rename to
23134
23135         (SetGlobalAttributes): this.
23136
23137         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
23138         lookups.
23139
23140         * attribute.cs (ApplyAttributes): Take an additional argument telling us
23141         if we are processing global arguments. Hmm, I am unsure of this.
23142
23143 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23144
23145         * expression.cs: added static array of strings to avoid calling
23146         Enum.ToString () for Operator in Binary. Significant recover of
23147         performance.
23148
23149 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
23150
23151         * class.cs (FindMembers): Allow the Builders of the various
23152         members to be null.  If they are skip them.  This only happens
23153         during the PInvoke declaration.
23154
23155 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
23156
23157         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
23158         failure, so we do not keep going afterwards.
23159
23160         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
23161         wanted to pass `false' as the `is_delegate' argument.  If this is
23162         the case, why not use delegate_type == null to mean `is_delegate =
23163         false' and anything else as is_delegate = true.
23164
23165 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
23166
23167         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
23168         code for the section, not the beginning of the tests.
23169
23170 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
23171
23172         * cfold.cs: Handle operator + (Enum x, Underlying x) 
23173
23174         * expression.cs (Binary): same.  Warn about errors where we have
23175         Enum/Enum in operator + as well.
23176
23177 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
23178
23179         * statement.cs:
23180                 - added support for switch(bool)
23181                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
23182                 - add TableSwitchEmit() to handle table-based switch statements
23183
23184 2002-04-05  Ravi Pratap  <ravi@ximian.com>
23185
23186         * expression.cs (Invocation.OverloadResolve): Factor out code which
23187         does parameter compatibility checking with arguments so that we can 
23188         re-use the code even from Delegate.VerifyApplicability
23189
23190         (VerifyArgumentsCompat): Move above code here.
23191
23192         * delegate.cs (VerifyApplicability): Get rid of duplicate code
23193         and instead make a call to the above method.
23194
23195 2002-03-31  Ravi Pratap  <ravi@ximian.com>
23196
23197         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
23198         We use it to keep track of classes which are attribute types.
23199
23200 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
23201
23202         * delegate.cs (Delegate.Define): Correctly define the types in the
23203         presence of fixed and array parameters.
23204
23205         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
23206         doing FindMembers.
23207
23208         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
23209         include NonPublic after the first iteration.
23210
23211         * class.cs (Indexer.CheckBase): Only check if both parents are
23212         non-null. 
23213
23214         * cs-parser.jay (accessor_body): If empty, set to null.
23215
23216         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
23217         same code path here to resolve constants names that we did have in
23218         MemberAccess.DoResolve.  There is too much code duplicated here.
23219
23220 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
23221
23222         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
23223
23224         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
23225         to MakeUnionSet.
23226
23227         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
23228         tokens, numbers and strings.
23229
23230         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
23231         parenthesis.
23232
23233         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
23234         asyncronous parameters and the regular parameters.  
23235
23236         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
23237         specify the target directory.
23238
23239         * expression.cs: (This.DoResolve): Simplify
23240         (As.Emit): Optimize, do not generate IsInst if the expression is
23241         always of the given type.
23242
23243         (Is.DoResolve): Bug fix, we were reporting both always/never for
23244         the is expression.
23245
23246         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
23247         creating too many unnecessary arrays.
23248
23249 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
23250
23251         * class.cs (EmitFieldInitializer): Use Assign expression to assign
23252         fields instead of rolling our own initializer.   Takes care of all
23253         implicit conversions, and drops unnecessary static checks/argument.
23254
23255 2002-03-31  Dick Porter  <dick@ximian.com>
23256
23257         * driver.cs: use the GetDirectories() return values properly, and
23258         use "/" as path separator.
23259
23260 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
23261
23262         * expression.cs (Unary): Optimize - - expr into expr.
23263         (Binary): Optimize a + (-b) into a -b.
23264
23265         * codegen.cs (CodeGen): Made all methods static.
23266
23267 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
23268
23269         * rootcontext.cs: 
23270
23271         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
23272         TypeBuilder property.
23273
23274         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
23275         instead. 
23276
23277         * tree.cs: Removed the various RecordXXXX, and replaced with a
23278         single RecordDecl.  Removed all the accessor methods, and just
23279         left a single access point Type 
23280
23281         * enum.cs: Rename DefineEnum to DefineType.
23282
23283         * decl.cs: New abstract method `DefineType' used to unify the
23284         Defines for Enumerations, Interfaces, TypeContainers and
23285         Delegates.
23286
23287         (FindType): Moved LookupInterfaceOrClass here.  Moved the
23288         LookupBaseClasses method that used to live in class.cs and
23289         interface.cs here, and renamed to FindType.
23290
23291         * delegate.cs: Implement DefineType.  Take advantage of the
23292         refactored pattern for locating the parent builder without taking
23293         the parent_builder argument (which we know does not work if we are
23294         nested, and triggering a toplevel definition).
23295
23296 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
23297
23298         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
23299         accessibility of a member has changed during override and report
23300         an error if so.
23301
23302         * class.cs (Method.Define, Property.Define): Only complain on
23303         overrides if the method is private, any other accessibility is
23304         fine (and since we just checked the permission is the same, we are
23305         good to go).
23306
23307         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
23308         and elif are processed always.  The other pre-processing
23309         directives are only processed if we are "taking" the path
23310
23311 2002-03-29  Martin Baulig  <martin@gnome.org>
23312
23313         * class.cs (Method.Emit): Only emit symbolic debugging info if the
23314         current location is not Null.
23315
23316         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
23317         a separate method so we can profile it.
23318
23319         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
23320         `span.Seconds' are just seconds, but no minutes or hours.
23321         (MainDriver): Profile the CodeGen.SaveSymbols calls.
23322
23323 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
23324
23325         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
23326         Remove the gratuitous set of Final:
23327
23328                                 // If an interface implementation, then we can set Final.
23329                                 if (((flags & MethodAttributes.Abstract) == 0) &&
23330                                     implementing.DeclaringType.IsInterface)
23331                                         flags |= MethodAttributes.Final;
23332
23333         I do not know what I was smoking when I used that.
23334
23335
23336         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
23337         step into fixing the name resolution issues for delegates and
23338         unifying the toplevel name resolution.
23339
23340 2002-03-28  Martin Baulig  <martin@gnome.org>
23341
23342         * class.cs (Method.Emit): If we have a symbol writer, call its
23343         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
23344         tell it about the current method.
23345
23346         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
23347         writer that we're going to emit the first byte of IL code for a new
23348         statement (a new source line).
23349         (EmitContext.EmitTopBlock): If we have a symbol writer, call
23350         EmitContext.Mark() before emitting any code.
23351
23352         * location.cs (SymbolDocument): Return null when we're Null.
23353
23354         * statement.cs (Statement): Moved the `Location loc' variable here.
23355         (Statement.EmitBoolExpression): If we have a symbol writer, call
23356         ec.Mark() before emitting any code to tell it that we're at the
23357         beginning of a new statement.
23358         (StatementExpression): Added `Location' argument to the constructor.
23359         (Block): Added public readonly variable `StartLocation' and public
23360         variable `EndLocation'.  The latter is to be set using SetEndLocation().
23361         (Block): Added constructor which takes a start and end location.
23362         (Block.SetEndLocation): New method. This sets the end location.
23363         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
23364         local variables we create.
23365         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
23366         each statement and do also mark the begin and end of the block.
23367
23368         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
23369         tell it the current lexer.Location, use Location.Null for the end of the
23370         block.
23371         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
23372         current block, set its end location using SetEndLocation().
23373         (statement_expression): StatementExpression constructor now takes the
23374         lexer.Location as additional argument.
23375         (for_statement, declare_local_variables): Likewise.
23376         (declare_local_variables): When creating a new implicit block, use the
23377         new Block constructor and pass it the lexer.Location.
23378
23379 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
23380
23381         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
23382         members also on the parent interfaces recursively.
23383
23384 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
23385
23386         * report.cs: Use new formats, since Gonzalo finished the missing
23387         bits. 
23388
23389         * expression.cs (Binary.ResolveOperator): added missing operator|
23390         operator& and operator^ for bool/bool.
23391
23392         * cs-parser.jay: CheckDef now takes a Location argument that is
23393         used to report errors more precisly (instead of reporting the end
23394         of a definition, we try to track something which is a lot closer
23395         to the source of the problem).
23396
23397         * cs-tokenizer.cs: Track global token use, so we can properly flag
23398         the use of #define/#undef after the first token has been seen.
23399
23400         Also, rename the reportXXXX to Error_DescriptiveName
23401
23402         * decl.cs (DeclSpace.IsTopLevel): Move property here from
23403         TypeContainer, so that Enum and Interface can use this too.
23404
23405         * class.cs (TypeContainer.LookupInterfaceOrClass,
23406         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
23407         `builder' argument.  Typically this was used to pass the parent
23408         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
23409         the definition).  
23410
23411         The problem is that a nested class could trigger the definition of
23412         a toplevel class, and the builder would be obviously wrong in that
23413         case. 
23414
23415         So we drop this argument, and we compute dynamically the
23416         TypeBuilder/ModuleBuilder (the correct information was available
23417         to us anyways from DeclSpace.Parent)
23418
23419         * interface.cs (Interface.DefineInterface): Drop builder
23420         parameter cleanup like class.cs
23421
23422         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
23423         like class.cs
23424
23425         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
23426         values. 
23427
23428         (Try.Emit): Propagate the returns value from the statement.
23429
23430         (Return.Emit): Even if we are leavning 
23431
23432         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
23433
23434         * modifiers.cs: Fix the computation of MethodAttributes flags.
23435
23436 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
23437
23438         * driver.cs: allow compilation of files that start with '/'.
23439         Add a default case when checking the argument of --target.
23440
23441 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
23442
23443         * interface.cs: Implement the same search algorithm for types in
23444         the interface code.
23445
23446         * delegate.cs: Do not allow multiple definition.
23447
23448         * Recovered ChangeLog that got accidentally amputated
23449
23450         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
23451
23452         * rootcontext.cs: Load manually enum to allow core classes to
23453         contain enumerations.
23454
23455         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
23456         Update to new static methods in TypeManager.
23457
23458         * typemanager.cs (GetMethod, GetConstructor): Use our
23459         implementation of FindMembers to find the members, since during
23460         corlib compilation, the types are TypeBuilders and GetMethod and
23461         GetConstructor do not work.
23462
23463         Make all methods in TypeManager static.
23464
23465         (InitCodeHelpers): Split the functionality from
23466         the InitCodeTypes function.
23467
23468         * driver.cs: Call InitCodeHelpers after we have populated the
23469         types. 
23470
23471         * cs-parser.jay (delegate_declaration): we did not used to compute
23472         the delegate name correctly for void delegates.
23473
23474 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
23475
23476         * rootcontext.cs (RootContext): Init the interface_resolve_order
23477         and type_container_resolve_order always.
23478
23479         (ResolveCore, BootstrapCorlib_ResolveClass,
23480         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
23481         compiler when compiling with --nostdlib
23482
23483         * class.cs (TypeContainer.DefineType): Check that our parent is
23484         not null.  This test is most important when we are bootstraping
23485         the core types.
23486
23487         * codegen.cs: Split out the symbol writing code.
23488
23489 2002-03-25  Martin Baulig  <martin@gnome.org>
23490
23491         * driver.cs (-g): Made -g an alias for --debug.
23492
23493 2002-03-24  Martin Baulig  <martin@gnome.org>
23494
23495         * codegen.cs (SymbolWriter): New public variable. Returns the
23496         current symbol writer.
23497         (CodeGen): Added `bool want_debugging_support' argument to the
23498          constructor. If true, tell the ModuleBuild that we want debugging
23499         support and ask it for the ISymbolWriter.
23500         (Save): If we have a symbol writer, call it's Close() method after
23501         saving the assembly.
23502
23503         * driver.c (--debug): New command line argument to create a
23504         debugger information file.
23505
23506         * location.cs (SymbolDocument): New public property. Returns an
23507         ISymbolDocumentWriter object for the current source file or null
23508         if we don't have a symbol writer.
23509
23510 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
23511
23512         * driver.cs (LoadAssembly): Correctly return when all the paths
23513         have been tried and not before.
23514
23515         * statement.cs (Switch.Emit): return the actual coverage for this
23516         statement (returns/not-returns)
23517
23518         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
23519         switch of the statement if we are the last switch section.  That
23520         kills two problems: try/catch problems (we used to emit an empty
23521         nop at the end) and switch statements where all branches would
23522         return. 
23523
23524 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
23525
23526         * driver.cs: Add default assemblies (the equivalent to the
23527         Microsoft CSC.RSP file)
23528
23529         * cs-tokenizer.cs: When updating `cols and setting it to zero,
23530         also update tokens_seen and set it to false.
23531
23532         * driver.cs: Implement --recurse for Mike.
23533
23534         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
23535         correctly splitting out the paths.
23536
23537 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
23538
23539         * interface.cs (Interface.PopulateProperty): Instead of using
23540         `parent' as the declaration space for the set parameters, use
23541         `this' 
23542
23543         * support.cs (InternalParameters): InternalParameters constructor
23544         takes a DeclSpace instead of a TypeContainer.
23545
23546         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
23547         types are being initialized, load the address of it before calling
23548         the function.  
23549
23550         (New): Provide a mechanism to disable the generation of local
23551         value type temporaries when the caller will be providing us with
23552         an address to store it.
23553
23554         (ArrayCreation.EmitDynamicInitializers): Use it.
23555
23556 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
23557
23558         * expression.cs (Invocation.EmitArguments): Only probe for array
23559         property if there is more than one argument.  Sorry about that.
23560
23561         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
23562         empty param arrays.
23563
23564         * class.cs (Method.LabelParameters): Fix incorrect code path that
23565         prevented the `ParamArrayAttribute' from being applied to the
23566         params attribute.
23567
23568 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
23569
23570         * support.cs (ReflectionParameters): Correctly compute whether the
23571         last argument is a params array.  Fixes the problem with
23572         string.Split ('a')
23573
23574         * typemanager.cs: Make the assemblies array always be non-null
23575         (empty, but non-null)
23576
23577         * tree.cs (RecordDecl): New function that abstracts the recording
23578         of names.  This reports error 101, and provides a pointer to the
23579         previous declaration.  Fixes a crash in the compiler.
23580
23581         * cs-parser.jay (constructor_declaration): Update to new grammar,
23582         and provide a constructor_body that can be empty.
23583
23584 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
23585
23586         * driver.cs: Add support for --resources.
23587
23588         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
23589         Make all types for the various array helper methods be integer.
23590
23591         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
23592         CheckState to ConvCast.
23593
23594         (ConvCast): Now it takes a `checked' state argument, to avoid
23595         depending on the emit context for the conversion, and just using
23596         the resolve time setting.
23597
23598         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
23599         instead of Invocation.EmitArguments.  We do not emit the original
23600         arguments, instead we emit those which have been converted to
23601         unsigned int expressions.
23602
23603         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
23604
23605         * codegen.cs: ditto.
23606
23607         * expression.cs (LocalVariableReference): Drop the use of the
23608         Store function that depended on the variable index.
23609
23610         * statement.cs (VariableInfo): Drop the `Idx' property from this
23611         class, as this is not taking into account the indexes for
23612         temporaries tat we generate during the execution, getting the
23613         indexes wrong.
23614
23615         * class.cs: First emit class initializers, then call the parent
23616         constructor. 
23617
23618         * expression.cs (Binary): Fix opcode emision.
23619         (UnaryMutator.EmitCode): Support checked code generation
23620
23621         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
23622         matches for events for both the Static and Instance scans,
23623         pointing to the same element.   Fix that.
23624
23625 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
23626
23627         * rootcontext.cs (ResolveTree): Always set the
23628         interface_resolve_order, because nested interfaces will be calling
23629         into us.
23630
23631         * class.cs (GetInterfaceOrClass): Track the same resolution
23632         process used by TypeManager.LookupType.  This fixes the nested
23633         type lookups in class declarations (separate path from
23634         LookupType). 
23635
23636         (TypeContainer.DefineType): Also define nested interfaces.
23637         (TypeContainer.RegisterOrder): New public function used to
23638         register the order in which child interfaces need to be closed.
23639
23640         Nested interfaces need to be closed after their parents have been
23641         created. 
23642
23643         * interface.cs (InterfaceAttr): Put all the logic for computing
23644         the interface attribute here. 
23645
23646         (DefineInterface): Register our interface order with the
23647         RootContext or with the TypeContainer depending on the case.
23648
23649 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
23650
23651         * cs-parser.jay: rework foreach statement to work with the new
23652         changes to the policy on SimpleNames.
23653
23654         * report.cs: support Stacktrace on warnings as well.
23655
23656         * makefile: drop --unsafe and /unsafe from the compile.
23657
23658 2002-03-13  Ravi Pratap  <ravi@ximian.com>
23659
23660         * ecore.cs (StandardConversionExists): Modify to take an Expression
23661         as the first parameter. Ensure we do null -> reference type conversion
23662         checking.
23663
23664         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
23665         temporary Expression objects.
23666
23667 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
23668
23669         * interface.cs: workaround bug in method overloading resolution
23670         (there is already a bugzilla bug for it).
23671
23672 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
23673
23674         We could also solve this problem by having a separate path for
23675         performing type lookups, instead of DoResolve, we could have a
23676         ResolveType entry point, and only participating pieces of the
23677         production (simplename, deref, array) would implement this. 
23678
23679         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
23680         signal SimpleName to only resolve type names and not attempt to
23681         resolve anything else.
23682
23683         * expression.cs (Cast): Set the flag.
23684
23685         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
23686
23687         * class.cs: Only report 108 if there is no `new' modifier.
23688
23689         * cs-parser.jay: rework foreach statement to work with the new
23690         changes to the policy on SimpleNames.
23691
23692         * report.cs: support Stacktrace on warnings as well.
23693
23694         * makefile: drop --unsafe and /unsafe from the compile.
23695
23696 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
23697
23698         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
23699         lookups here, instead of doing that at parse time.  This means
23700         that our grammar will not introduce `LocalVariableReferences' as
23701         expressions at this point.  That solves the problem of code like
23702         this:
23703
23704         class X {
23705            static void Main ()
23706            { int X = 1;
23707             { X x = null }}}
23708
23709         This is only half the fix.  The full fix requires parameters to
23710         also be handled in this way.
23711
23712         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
23713         makes the use more obvious of the DeclSpace.  The
23714         ec.TypeContainer.TypeBuilder is now only used to pull the
23715         TypeBuilder for it.
23716
23717         My theory is that I can get rid of the TypeBuilder completely from
23718         the EmitContext, and have typecasts where it is used (from
23719         DeclSpace to where it matters).  
23720
23721         The only pending problem is that the code that implements Aliases
23722         is on TypeContainer, and probably should go in DeclSpace.
23723
23724         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
23725         lookups here, instead of doing that at parse time.  This means
23726         that our grammar will not introduce `LocalVariableReferences' as
23727         expressions at this point.  That solves the problem of code like
23728         this:
23729
23730         class X {
23731            static void Main ()
23732            { int X = 1;
23733             { X x = null }}}
23734
23735         This is only half the fix.  The full fix requires parameters to
23736         also be handled in this way.
23737
23738         * class.cs (Property.DefineMethod): When implementing an interface
23739         method, set newslot, when implementing an abstract method, do not
23740         set the flag (before we tried never setting it, or always setting
23741         it, which is the difference).
23742         (Indexer.DefineMethod): same.
23743         (Method.DefineMethod): same.
23744
23745         * ecore.cs: Only set the status used flag if we get back a Field.
23746
23747         * attribute.cs: Temporary hack, so Paolo can keep working.
23748
23749 2002-03-08  Ravi Pratap  <ravi@ximian.com>
23750
23751         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
23752         the unmanaged type in the case we have a MarshalAs attribute.
23753
23754         (Resolve): Handle the case when we are parsing the special MarshalAs
23755         attribute [we need to store the unmanaged type to use later]
23756
23757         * typemanager.cs (marshal_as_attr_type): Built in type for the 
23758         MarshalAs Attribute.
23759
23760         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
23761         on parameters and accordingly set the marshalling info.
23762
23763 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
23764
23765         * class.cs: Optimizing slightly by removing redundant code after
23766         we switched to the `NoTypes' return value.
23767         (Property.DefineMethod): use NoTypes here too.
23768
23769         This fixes the bug I introduced in my last batch of changes.
23770
23771 2002-03-05  Ravi Pratap  <ravi@ximian.com>
23772
23773         * tree.cs (RecordEnum): Add. We now keep track of enums too.
23774
23775         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
23776         Enums since those are types too. 
23777
23778         * cs-parser.jay (enum_declaration): Record enums as we parse them.
23779
23780         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
23781         thanks to a call during the lookup process.
23782
23783 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
23784
23785         * statement.cs (Foreach): Lots of work to accomodate a particular
23786         kind of foreach statement that I had not kept in mind.  It is
23787         possible to have foreachs on classes that provide a GetEnumerator
23788         method that return objects that implement the "pattern" for using
23789         a foreach, there is no need to support GetEnumerator
23790         specifically. 
23791
23792         This is needed to compile nant.
23793
23794         * decl.cs: Only report 114 if the member is not `Finalize' and if
23795         the warning level is at least 2.
23796
23797         * class.cs: Moved the compare function from Method to
23798         MethodSignature. 
23799
23800         (MethodSignature.InheritableMemberSignatureCompare): Add new
23801         filter function that is used to extract inheritable methods from a
23802         class. 
23803
23804         (Method.Define): Use the new `inheritable_method_signature_filter'
23805         delegate
23806
23807         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
23808         command. 
23809
23810 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
23811
23812         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
23813
23814         * cs-parser.jay: Add opt_semicolon to the interface declaration.
23815
23816         * expression.cs: Pass location information to
23817         ConvertImplicitStandard. 
23818
23819         * class.cs: Added debugging code to track return values from
23820         interfaces. 
23821
23822 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
23823
23824         * expression.cs (Is.DoResolve): If either side of the `is' is an
23825         interface, do not flag the warning.
23826
23827         * ecore.cs (ImplicitReferenceConversion): We need a separate test
23828         for interfaces
23829
23830         * report.cs: Allow for --fatal to be used with --probe.
23831
23832         * typemanager.cs (NoTypes): Move the definition for the empty Type
23833         array here. 
23834
23835         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
23836         properties. 
23837         (TypeContainer.DefineProxy): New function used to proxy to parent
23838         implementations when implementing interfaces.
23839         (TypeContainer.ParentImplements): used to lookup if our parent
23840         implements a public function that is required by an interface.
23841         (TypeContainer.VerifyPendingMethods): Hook this up.
23842
23843         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
23844         `modules' and `assemblies' arraylists into arrays.  We only grow
23845         these are the very early start up of the program, so this improves
23846         the speedof LookupType (nicely measured).
23847
23848         * expression.cs (MakeByteBlob): Replaced unsafe code with
23849         BitConverter, as suggested by Paolo.
23850
23851         * cfold.cs (ConstantFold.Binary): Special case: perform constant
23852         folding of string concatenation, but if either side is a string,
23853         and the other is not, then return null, and let the runtime use
23854         the concatenation on the string plus the object (using
23855         `Object.ToString'). 
23856
23857 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
23858
23859         Constant Folding has been implemented now.
23860
23861         * expression.cs (Unary.Reduce): Do not throw an exception, catch
23862         the error instead on types that are not supported in one's
23863         complement. 
23864
23865         * constant.cs (Constant and all children): New set of functions to
23866         perform implict and explicit conversions.
23867
23868         * ecore.cs (EnumConstant): Implement the new functions to perform
23869         conversion by proxying to the child expression.
23870
23871         * codegen.cs: (ConstantCheckState): Constant evaluation has its
23872         own separate setting that can not be turned off from the command
23873         line using --unchecked or --checked and is only controlled using
23874         the checked/unchecked statements and expressions.  This setting is
23875         used by the constant folder to flag errors.
23876
23877         * expression.cs (CheckedExpr, UncheckedExpr): Set the
23878         ConstantCheckState as well.   
23879
23880         During Resolve, they also have to flag the state, because the
23881         constant folder runs completely in the Resolve phase.
23882
23883         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
23884         well.
23885
23886 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
23887
23888         * cfold.cs: New file, this file contains the constant folder.
23889
23890         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
23891         argument to track whether we are using the resulting address to
23892         load or store a value and provide better error messages. 
23893
23894         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
23895         new AddressOf arguments.
23896
23897         * statement.cs (Foreach.EmitCollectionForeach): Update
23898
23899         * expression.cs (Argument.Emit): Call AddressOf with proper
23900         arguments to track usage.
23901
23902         (New.DoEmit): Call AddressOf with new arguments.
23903
23904         (Unary.Emit): Adjust AddressOf call.
23905
23906 2002-03-01  Ravi Pratap  <ravi@ximian.com>
23907
23908         * cs-parser.jay (member_access): Change the case for pre-defined types
23909         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
23910         this suggestion.
23911
23912         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
23913         a method body.
23914
23915         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
23916         essentially like methods and apply attributes like MethodImplOptions to them too.
23917
23918         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
23919         not being null.
23920
23921         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
23922         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
23923         is the DeclSpace.
23924
23925         * Update code everywhere accordingly.
23926
23927         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
23928
23929         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
23930
23931 2002-02-28  Ravi Pratap  <ravi@ximian.com>
23932
23933         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
23934         try performing lookups against those instead of jumping straight into using
23935         the 'using' clauses.
23936
23937         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
23938
23939         (LookupType): Perform lookups in implicit parents too.
23940
23941         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
23942         sequence as RootContext.LookupType. 
23943
23944         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
23945         the various cases of namespace lookups into this method.
23946
23947 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
23948
23949         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
23950         in positional arguments)
23951
23952         * class.cs (Operator): Update the AllowedModifiers to contain
23953         extern. 
23954
23955         * cs-parser.jay: Update operator declaration to allow for the
23956         operator body to be empty.
23957
23958         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
23959         values. 
23960
23961 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
23962
23963         * class.cs (Method.Emit): Label parameters.
23964
23965         * driver.cs: Return 1 or 0 as the program exit code.
23966
23967 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
23968
23969         * expression.cs: Special case the `null' object when trying to
23970         auto-compute the type, as anything can be explicitly converted to
23971         that. 
23972
23973         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
23974         spotting this Paolo.
23975
23976         (Expression.ImplicitNumericConversion): Perform comparissions of
23977         the type using the underlying type in the case of an enumeration
23978         rather than using the enumeration type for the compare.
23979
23980         Cope with the underlying == type case, which is not possible to
23981         catch before. 
23982
23983         (Expression.ConvertNumericExplicit): Perform comparissions of
23984         the type using the underlying type in the case of an enumeration
23985         rather than using the enumeration type for the compare.
23986
23987         * driver.cs: If the user does not supply an extension, assume .exe
23988
23989         * cs-parser.jay (if_statement): Rewrote so that we can track the
23990         location for the if statement.
23991
23992         * expression.cs (Binary.ConstantFold): Only concat strings when
23993         the operation is "+", not everything ;-)
23994
23995         * statement.cs (Statement.EmitBoolExpression): Take a location
23996         argument. 
23997         (If, While, Do): Track location.
23998
23999         * expression.cs (Binary.ResolveOperator): In the object + string
24000         case, I was missing a call to ConvertImplicit
24001
24002 2002-02-25  Ravi Pratap  <ravi@ximian.com>
24003
24004         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
24005         Location arguments. Ensure we use RootContext.LookupType to do our work
24006         and not try to do a direct Type.GetType and ModuleBuilder.GetType
24007
24008         * interface.cs (PopulateMethod): Handle the type of the parameter being
24009         null gracefully.
24010
24011         * expression.cs (Invocation.BetterFunction): Handle the case when we 
24012         have a params method with no fixed arguments and a call is made with no
24013         arguments.
24014
24015 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
24016
24017         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
24018         the verbatim-string-literal
24019
24020         * support.cs (InternalParameters.ParameterModifier): handle null
24021         fixed parameters.
24022         (InternalParameters.ParameterType): ditto.
24023
24024         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
24025         duplicating the name of the variable parameter.
24026         (GetParameterByName): Fix bug where we were not looking up array
24027         paramters if they were the only present (thanks Paolo!).
24028         (GetParameterInfo): We only have an empty set of types if both
24029         fixed and array are set to null.
24030         (GetParameterInfo-idx): Handle FixedParameter == null
24031
24032         * cs-parser.jay: Handle the case where there is no catch
24033         statements (missing null test).
24034
24035 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
24036
24037         * driver.cs (MainDriver): Be conservative on our command line
24038         handling.
24039
24040         Catch DirectoryNotFoundException when calling GetFiles.
24041
24042         (SplitPathAndPattern): Used to split the input specification into
24043         a path and a pattern that we can feed to Directory.GetFiles.
24044
24045 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
24046
24047         * statement.cs (Fixed): Implement the last case of the Fixed
24048         statement (string handling).
24049
24050         * expression.cs (StringPtr): New class used to return a char * to
24051         a string;  Used by the Fixed statement.
24052
24053         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
24054
24055         * expression.cs (Binary.ResolveOperator): Remove redundant
24056         MemberLookup pn parent type.
24057         Optimize union call, we do not need a union if the types are the same.
24058         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
24059         type.
24060
24061         Specialize the use of MemberLookup everywhere, instead of using
24062         the default settings. 
24063
24064         (StackAlloc): Implement stackalloc keyword.
24065
24066         * cs-parser.jay: Add rule to parse stackalloc.
24067
24068         * driver.cs: Handle /h, /help, /?
24069
24070         * expression.cs (MakeByteBlob): Removed the hacks we had in place
24071         before we supported unsafe code.
24072
24073         * makefile: add --unsafe to the self compilation of mcs.
24074
24075 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
24076
24077         * expression.cs (PointerArithmetic): New class that is used to
24078         perform pointer arithmetic.
24079         (Binary.Resolve): Handle pointer arithmetic
24080         Handle pointer comparission.
24081         (ArrayPtr): Utility expression class that is used to take the
24082         address of an array.
24083
24084         (ElementAccess): Implement array access for pointers
24085
24086         * statement.cs (Fixed): Implement fixed statement for arrays, we
24087         are missing one more case before we are done.
24088
24089         * expression.cs (Indirection): Implement EmitAssign and set the
24090         ExprClass to Variable.  This allows pointer dereferences to be
24091         treated as variables, and to have values assigned to them.
24092
24093         * ecore.cs (Expression.StoreFromPtr): New utility function to
24094         store values dereferencing.
24095
24096 2002-02-20  Ravi Pratap  <ravi@ximian.com>
24097
24098         * expression.cs (Binary.ResolveOperator): Ensure that we are
24099         not trying to operate on a void type - this fixes the reported
24100         bug.
24101
24102         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
24103         the parent implementation is sealed.
24104
24105         * ../errors/cs0239.cs : Add.
24106
24107         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
24108
24109         * typemanager.cs (unverifiable_code_type): Corresponds to 
24110         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
24111         which have unsafe code in them.
24112
24113         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
24114         unsafe context.
24115
24116 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
24117
24118         * cs-tokenizer.cs: Add support for @"litreal strings"
24119
24120         Make tokenizer accept pre-processor directives
24121         on any column (remove the old C-like limitation). 
24122
24123         * rootcontext.cs (EmitCode): Emit any global attributes.
24124         (AddGlobalAttributes): Used to keep track of assembly attributes. 
24125
24126         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
24127
24128         * cs-parser.jay: Add support for global attributes.  
24129
24130 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
24131
24132         * expression.cs (Indirection): New helper class.  Unary will
24133         create Indirection classes to be able to implement the
24134         IMemoryLocation interface on it.
24135
24136 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
24137
24138         * cs-parser.jay (fixed_statement): reference the right statement.
24139
24140         * statement.cs (Fixed.Emit): Finish implementing the fixed
24141         statement for the &x case.
24142
24143 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
24144
24145         * class.cs (Property.Define, Method.Define): Remove newslot when
24146         `implementing'.  
24147
24148         * modifiers.cs: My use of NewSlot when `Abstract' was set was
24149         wrong.  NewSlot should only be used if the `new' keyword is present.
24150
24151         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
24152         locating our system dir.  Sorry about this.
24153
24154 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
24155
24156         * driver.cs (GetSystemDir): Compute correctly the location of our
24157         system assemblies.  I was using the compiler directory instead of
24158         the library directory.
24159
24160 2002-02-13  Ravi Pratap  <ravi@ximian.com>
24161
24162         * expression.cs (BetterFunction): Put back in what Miguel commented out
24163         since it is the correct fix. The problem is elsewhere ;-)
24164
24165         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
24166         parameters of the parms method are themselves compatible or not !
24167
24168         (StandardConversionExists): Fix very dangerous bug where we were forgetting
24169         to check that a class implements an interface before saying that an implicit
24170         conversion was allowed. Use ImplementsInterface to do the checking.
24171
24172 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
24173
24174         * class.cs (Method.Define): Track whether we are an explicit
24175         implementation or not.  And only call DefineMethodOverride if we
24176         are an explicit implementation.
24177
24178         (Property.DefineMethod): Ditto.
24179
24180 2002-02-11  Ravi Pratap  <ravi@ximian.com>
24181
24182         * expression.cs (BetterFunction): Catch hideous bug which was
24183          preventing us from detecting ambiguous calls due to implicit casts i.e
24184         cs0121.
24185
24186 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
24187
24188         * support.cs (Pair): Remove un-needed method.  I figured why I was
24189         getting the error in cs-parser.jay, the variable in a foreach loop
24190         is readonly, and the compiler does not really treat this as a variable.
24191
24192         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
24193         instead of EQUALS in grammar.  
24194
24195         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
24196
24197         * expression.cs (Unary.DoResolve): Check whether the argument is
24198         managed or not.
24199
24200 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
24201
24202         * support.cs: Api for Pair to set a value.  Despite the fact that
24203         the variables are public the MS C# compiler refuses to compile
24204         code that accesses the field if the variable is part of a foreach
24205         statement. 
24206
24207         * statement.cs (Fixed): Begin implementation of the fixed
24208         statement.
24209
24210         (Block.AddVariable): Return the VariableInfo on success and null
24211         on failure instead of true/false. 
24212
24213         * cs-parser.jay (foreach): Catch errors on variables already
24214         defined (we were ignoring this value before) and properly unwind
24215         the block hierarchy
24216
24217         (fixed_statement): grammar for the fixed statement.
24218
24219 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
24220
24221         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
24222         pointer types to be incretemented.
24223
24224         (SizeOf): Implement.
24225
24226         * cs-parser.jay (pointer_member_access): Implement
24227         expr->IDENTIFIER production.
24228
24229         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
24230         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
24231         on safe contexts.
24232
24233         (Unary): Implement indirection.
24234
24235         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
24236         use in non-unsafe context).
24237
24238         (SimpleName.DoResolve): Check for pointers in field access on safe
24239         contexts. 
24240
24241         (Expression.LoadFromPtr): Factor the load-indirect code in this
24242         function.  This was duplicated in UnboxCast and ParameterReference
24243
24244 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
24245
24246         * expression.cs (ComposedCast): report an error if a pointer cast
24247         is used in a safe region.
24248
24249         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
24250         pointer type casts in unsafe context.
24251
24252         * codegen.cs (EmitContext): Set up IsUnsafe.
24253
24254         * cs-parser.jay (non_expression_type): Add productions for pointer
24255         casts. 
24256
24257         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
24258         code.  We should not use force into static mode if the method is
24259         not virtual.  Fixes bug in MIS
24260
24261         * statement.cs (Do.Emit, While.Emit, For.Emit,
24262         Statement.EmitBoolExpression): Add support to Do and While to
24263         propagate infinite loop as `I do return' semantics.
24264
24265         Improve the For case to also test for boolean constants.
24266
24267         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
24268         to the list of attributes we can add.
24269
24270         Remove `EmitContext' argument.
24271
24272         * class.cs (Method.Define): Apply parameter attributes.
24273         (Constructor.Define): Apply parameter attributes.
24274         (MethodCore.LabelParameters): Move here the core of labeling
24275         parameters. 
24276
24277         * support.cs (ReflectionParameters.ParameterModifier,
24278         InternalParameters.ParameterModifier): Use IsByRef on the type and
24279         only return the OUT bit for these parameters instead of in/out/ref
24280         flags.
24281
24282         This is because I miss-understood things.  The ParameterInfo.IsIn
24283         and IsOut represent whether the parameter has the [In] and [Out]
24284         attributes set.  
24285
24286 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
24287
24288         * ecore.cs (FieldExpr.Emit): Release temporaries.
24289
24290         * assign.cs (LocalTemporary.Release): new function.
24291
24292         * codegen.cs (EmitContext.GetTemporaryStorage,
24293         EmitContext.FreeTemporaryStorage): Rework the way we deal with
24294         temporary storage.  Now we can "put back" localbuilders when we
24295         are done with them
24296
24297 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
24298
24299         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
24300         need to make a copy of the variable to generate verifiable code.
24301
24302 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
24303
24304         * driver.cs: Compute dynamically the system directory.
24305
24306         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
24307         Slower, but more generally useful.  Used by the abstract
24308         registering implementation. 
24309
24310         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
24311         the rules for the special rule on Type/instances.  First check if
24312         we have the same name, and if so, try that special static path
24313         rather than the instance path.
24314
24315 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
24316
24317         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
24318         for, while and if.
24319
24320         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
24321         Enum, ValueType, Delegate or Array for non-corlib compiles.
24322
24323         * cs-tokenizer.cs: Catch long identifiers (645)
24324
24325         * typemanager.cs (IndexerPropetyName): Ravi never tested this
24326         piece of code.
24327
24328         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
24329         fix, we were returning too early, so we were not registering
24330         pending methods from abstract classes.
24331
24332         Do not register pending methods if the class is abstract.
24333
24334         * expression.cs (Conditional.DoResolve): Report circular implicit
24335         conversions when we neecd to compute it for conditional
24336         expressions. 
24337
24338         (Is.DoResolve): If the expression is always of the provided type,
24339         flag warning 183.  If the expression can not ever be of the
24340         provided type flag warning 184.
24341
24342         * class.cs: Catch 169 as well.
24343
24344         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
24345         read. 
24346
24347 2002-01-18  Nick Drochak  <ndrochak@gol.com>
24348
24349         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
24350
24351 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
24352
24353         * interface.cs: (PopulateMethod): Check for pointers being defined
24354         only if the unsafe context is active.
24355         (PopulateProperty): ditto.
24356         (PopulateIndexer): ditto.
24357
24358         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
24359         specified.  If pointers are present, make sure that they are
24360         present in an unsafe context.
24361         (Constructor, Constructor.Define): ditto.
24362         (Field, Field.Define): ditto.
24363         (Property, Property.Define): ditto.
24364         (Event, Event.Define): ditto.
24365
24366         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
24367         hashtable if there are classes or structs defined.
24368
24369         * expression.cs (LocalVariableReference.DoResolve): Simplify this
24370         code, as the constant resolution moved.
24371
24372         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
24373         the metadata, so we can flag error 133. 
24374
24375         * decl.cs (MemberCore.UnsafeOK): New function to test that a
24376         pointer is being declared in an unsafe context.
24377
24378 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
24379
24380         * modifiers.cs (Modifiers.Check): Require a Location argument.
24381         Report error 227 for Unsafe use.
24382
24383         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
24384
24385         * statement.cs (For.Emit): If the test is null, then report that
24386         we do `return', as we wont reach anything afterwards.
24387
24388         (Switch.SwitchGoverningType): Track the expression that matched
24389         the conversion.
24390
24391         * driver.cs: Allow negative numbers as an error code to flag.
24392
24393         * cs-parser.jay: Handle 1551.
24394
24395         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
24396
24397 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
24398
24399         * cs-parser.jay: Report 1518 (type declaration can only contain
24400         class, struct, interface, enum or delegate)
24401
24402         (switch_label): Report 1523 (keywords `case' or `default' must
24403         preced code)
24404
24405         (opt_switch_sections): Report 1522 (empty switch)
24406
24407         * driver.cs: Report 1515 (response file specified multiple times)
24408         Report 1516 (Source file specified multiple times).
24409
24410         * expression.cs (Argument.Resolve): Signal 1510
24411
24412         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
24413         access not allowed in static code)
24414
24415 2002-01-11  Ravi Pratap  <ravi@ximian.com>
24416
24417         * typemanager.cs (IsPointerType): Utility method which we are going
24418         to need a lot.
24419
24420         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
24421         the object type, so we take care of that.
24422
24423         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
24424
24425         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
24426         added to non-params parameters :-)
24427
24428         * typemanager.cs (CSharpName): Include 'void' type too. 
24429
24430         (void_ptr_type): Include in the set of core types.
24431
24432         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
24433         duplicating code.
24434
24435         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
24436         an unsafe context.
24437
24438         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
24439         completely forgotten about it.
24440
24441 2002-01-10  Ravi Pratap  <ravi@ximian.com>
24442
24443         * cs-parser.jay (pointer_type): Add. This begins our implementation
24444         of parsing rules for unsafe code.
24445
24446         (unsafe_statement): Implement.
24447
24448         (embedded_statement): Modify to include the above.
24449
24450         * statement.cs (Unsafe): Implement new class for unsafe blocks.
24451
24452         * codegen.cs (EmitContext.InUnsafe): Add. This determines
24453         if the current context is an unsafe one.
24454
24455         * cs-parser.jay (local_variable_pointer_type): Since local variable types
24456         are handled differently, we need separate rules for them.
24457
24458         (local_variable_declaration): Update to use local_variable_pointer_type
24459         to allow variable declarations of unmanaged pointer types.
24460
24461         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
24462         in unsafe contexts.
24463
24464         * ../errors/cs0214.cs : Add.
24465
24466 2002-01-16  Nick Drochak  <ndrochak@gol.com>
24467
24468         * makefile: remove 'response' file when cleaning.
24469
24470 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
24471
24472         * cs-parser.jay: Report 1524.
24473
24474 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
24475
24476         * typemanager.cs (RegisterMethod): drop checking if we have
24477         registered this from here
24478
24479 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
24480
24481         * class.cs (Method.EmitDestructor): Implement calling our base
24482         destructor. 
24483
24484         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
24485         value of InFinally.
24486
24487         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
24488         this routine and will wrap the call in a try/catch block.  Deal
24489         with the case.
24490
24491 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
24492
24493         * ecore.cs (Expression.MemberLookup): instead of taking a
24494         parameter `same_type' that was used to tell whether we could
24495         access private members we compute our containing type from the
24496         EmitContext.
24497
24498         (FieldExpr): Added partial support for volatile fields.  This does
24499         not work for volatile fields exposed from assemblies, as I can not
24500         figure out how to extract the modreq from it.
24501
24502         Updated all the source files to use this.
24503
24504         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
24505         because it is referenced by MemberLookup very often. 
24506
24507 2002-01-09  Ravi Pratap  <ravi@ximian.com>
24508
24509         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
24510         TypeBuilder.GetCustomAttributes to retrieve what we need.
24511
24512         Get rid of redundant default_member_attr_type as this is the same as
24513         default_member_type which already exists.
24514
24515         * interface.cs, attribute.cs : Update accordingly.
24516
24517 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
24518
24519         * typemanager.cs: Enable IndexerPropertyName again.  It does not
24520         work for TYpeBuilders though.  Ravi, can you please fix this?
24521
24522         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
24523
24524         * expression.cs (Argument.Emit): Handle the case of ref objects
24525         being passed to ref functions;  
24526
24527         (ParameterReference.EmitLoad): Loads the content of the pointer
24528         without dereferencing.
24529
24530 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
24531
24532         * cs-tokenizer.cs: Implemented the pre-processing expressions.
24533
24534 2002-01-08  Ravi Pratap  <ravi@ximian.com>
24535
24536         * class.cs (Indexer.DefineMethod): Incorporate the interface
24537         type in the name of the method if we are doing explicit interface
24538         implementation.
24539
24540         * expression.cs (ConversionExists): Remove as it is completely obsolete.
24541
24542         (BetterConversion): Fix extremely trivial bug where we were referring to
24543         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
24544         again !
24545
24546         * ../errors/bug16.cs : Add although we have fixed it.
24547
24548 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
24549
24550         * expression.cs (BaseIndexer): Begin implementation.
24551
24552         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
24553
24554         * cs-parser.jay (indexer_declarator): Use qualified_identifier
24555         production directly to remove a shift/reduce, and implement
24556         explicit interface implementation.
24557
24558         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
24559         after a floating point suffix.
24560
24561         * expression.cs (DoNumericPromotions): Improved the conversion for
24562         uint/uint.  If we have a constant, we avoid doing a typecast to a
24563         larger type.
24564
24565         * class.cs (Indexer): Implement explicit interface implementation
24566         for indexers.
24567
24568 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
24569
24570         * class.cs: make the default instance constructor public and hidebysig.
24571
24572 2001-01-03  Ravi Pratap  <ravi@ximian.com>
24573
24574         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
24575         so we can call it from elsewhere.
24576
24577         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
24578         we emit it internally if the class has a defined indexer; otherwise the user
24579         emits it by decorating the class definition with the DefaultMemberAttribute.
24580
24581         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
24582         attribute is not used on a type which defines an indexer.
24583
24584         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
24585         character when we skip whitespace.
24586
24587         * ../errors/cs0646.cs : Add.
24588
24589 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
24590
24591         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
24592         again. 
24593
24594         * makefile: Add practical target `mcs3.exe' which builds the third
24595         generation compiler. 
24596
24597         * expression.cs (New): Fix structures constructor calling.
24598
24599         * class.cs (Property, Method, Indexer): Emit Final flag on the
24600         method if we are an interface implementation and we are not
24601         abstract. 
24602
24603         * ecore.cs (PropertyExpr): New public field `IsBase', tells
24604         whether this property is referencing a `base' method.
24605
24606         * expression.cs (Invocation.EmitCall): take an extra argument:
24607         is_base, this is used to determine whether the `call' or
24608         `callvirt' opcode should be used.
24609
24610
24611         * delegate.cs: update EmitCall.
24612
24613         * class.cs (Method.Define): Set NewSlot for the cases where we are
24614         not implementing an interface method.
24615
24616         (Property.Define): ditto.
24617
24618 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
24619
24620         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
24621         'r'.  Allows mcs to parse itself fully.
24622
24623 2002-01-02  Ravi Pratap  <ravi@ximian.com>
24624
24625         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
24626         of the number of initializers that require the InitializeArray method.
24627
24628         (CheckIndices): Store the Expression in all cases - not the plain value. Also
24629         update the above field where necessary.
24630
24631         (MakeByteBlob): Update accordingly.
24632
24633         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
24634         greater than 2.
24635
24636         (EmitDynamicInitializers): Update in accordance with the new optimization.
24637
24638         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
24639         same OpCode applies.
24640
24641         * cs-parser.jay : Fix some glaring errors I introduced.
24642
24643 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
24644
24645         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
24646         so that we can check for name clashes there too.
24647
24648         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
24649         for interface indexers.
24650
24651         * interfaces.cs (Define): Emit the default member attribute.
24652
24653         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
24654         variable was being referred to while setting the value ;-)
24655
24656 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
24657
24658         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
24659         byte-by-byte information when we know the data is zero.
24660
24661         Make the block always a multiple of 4, because
24662         DefineInitializedData has a bug.
24663
24664         * assign.cs: Fix, we should assign from the temporary, not from
24665         the source. 
24666
24667         * expression.cs (MakeByteBlob): Fix my incorrect code.
24668
24669 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
24670
24671         * typemanager.cs (EnumToUnderlying): This function is used to get
24672         the underlying type from an enumeration, because it does not
24673         always work. 
24674
24675         * constant.cs: Use the I4_S form for values between -128 and 127.
24676
24677         * statement.cs (Block.LookupLabel): Looks up a label.
24678         (Block): Drop support for labeled blocks.
24679
24680         (LabeledStatement): New kind of statement that represents a label
24681         only.
24682
24683         (Goto): Finally implement this bad boy.
24684
24685         * cs-parser.jay: Update to reflect new mechanism to implement
24686         labels.
24687
24688 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
24689
24690         * codegen.cs (EmitContext.This): a codegen property that keeps the
24691         a single instance of this instead of creating many different this
24692         instances. 
24693
24694         * delegate.cs (Delegate.DoResolve): Update to use the property;
24695
24696         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
24697
24698         * expression.cs (BaseAccess.DoResolve): Ditto.
24699
24700 2001-12-29  Ravi Pratap  <ravi@ximian.com>
24701
24702         * typemanager.cs (methodimpl_attr_type): Add to hold the type
24703         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
24704
24705         (InitCoreTypes): Update accordingly.
24706
24707         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
24708         so we can quickly store the state.
24709
24710         (ApplyAttributes): Set the correct implementation flags
24711         for InternalCall methods.
24712
24713 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
24714
24715         * expression.cs (EmitCall): if a method is not virtual, then do
24716         not use callvirt on it.
24717
24718         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
24719         user defined stuff) requires the use of stobj, which takes an
24720         address on the stack instead of an array and an index.  So emit
24721         the Ldelema operation for it.
24722
24723         (EmitStoreOpcode): Use stobj for valuetypes.
24724
24725         (UnaryMutator.EmitCode): Use the right 1 value depending on
24726         whether we are dealing with int64/uint64, float or doubles.
24727
24728         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
24729         constructors that I implemented last night.
24730
24731         (Constructor.IsDefault): Fix to work properly for static
24732         constructors.
24733
24734         * cs-parser.jay (CheckDef): report method signature errors.
24735         Update error number 103 to be 132.
24736
24737         * decl.cs: New AdditionResult enumeration value: MethodExists.
24738         Although we do this check for methods later on in the semantic
24739         analysis, catching repeated default constructors is so easy that
24740         we catch these here. 
24741
24742         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
24743         promotions code.
24744
24745         (ParameterReference.EmitAssign, Emit): handle
24746         bools as bytes.
24747
24748         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
24749         (ArrayAccess.EmitStoreOpcode): ditto.
24750
24751         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
24752
24753         * expression.cs (MakeByteBlob): Complete all the missing types
24754         (uint, short, ushort, byte, sbyte)
24755
24756         * class.cs: Only init instance field initializers on instance
24757         constructors. 
24758
24759         Rename `constructors' to instance_constructors. 
24760
24761         (TypeContainer.AddConstructor): Only add constructors to the list
24762         if it is not static.
24763
24764         Make sure that we handle default_static_constructor independently
24765         everywhere where we handle instance_constructors
24766
24767 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
24768
24769         * class.cs: Do not lookup or create a base initializer for a
24770         static constructor.
24771
24772         (ConstructorInitializer.Resolve): use the proper type to lookup
24773         for constructors.
24774
24775         * cs-parser.jay: Report error 1585 (modifiers between type and name).
24776
24777         * enum.cs, interface.cs: Remove CloseType, this is taken care by
24778         in DeclSpace. 
24779
24780         * decl.cs: CloseType is now an virtual method, the default
24781         implementation just closes this type.
24782
24783 2001-12-28  Ravi Pratap  <ravi@ximian.com>
24784
24785         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
24786         to PreserveSig by default. Also emit HideBySig on such methods.
24787
24788         Basically, set the defaults to standard values.
24789
24790         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
24791         argument, if candidate is better, it can't be worse than the best !
24792
24793         (Invocation): Re-write bits to differentiate between methods being
24794         applicable in their expanded form and their normal form - for params
24795         methods of course.
24796
24797         Get rid of use_standard everywhere as only standard conversions are allowed
24798         in overload resolution. 
24799
24800         More spec conformance.
24801
24802 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
24803
24804         * driver.cs: Add --timestamp, to see where the compiler spends
24805         most of its time.
24806
24807         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
24808         `this' in static code.
24809
24810         (SimpleName.DoResolve): Implement in terms of a helper function
24811         that allows static-references to be passed upstream to
24812         MemberAccess.
24813
24814         (Expression.ResolveWithSimpleName): Resolve specially simple
24815         names when called by MemberAccess to implement the special
24816         semantics. 
24817
24818         (Expression.ImplicitReferenceConversion): Handle conversions from
24819         Null to reference types before others, as Null's type is
24820         System.Object. 
24821
24822         * expression.cs (Invocation.EmitCall): Handle the special case of
24823         calling methods declared on a reference type from a ValueType
24824         (Base classes System.Object and System.Enum)
24825
24826         (MemberAccess.Resolve): Only perform lookups on Enumerations if
24827         the left hand side is a TypeExpr, not on every enumeration. 
24828
24829         (Binary.Resolve): If types are reference types, then do a cast to
24830         object on operators != and == of both arguments.
24831
24832         * typemanager.cs (FindMembers): Extract instance and static
24833         members if requested.
24834
24835         * interface.cs (PopulateProperty): Use void_type instead of null
24836         as the return type for the setter method.
24837
24838         (PopulateIndexer): ditto.
24839
24840 2001-12-27  Ravi Pratap  <ravi@ximian.com>
24841
24842         * support.cs (ReflectionParameters): Fix minor bug where we
24843         were examining the wrong parameter for the ParamArray attribute.
24844
24845         Cope with requests for the type of the parameter at position
24846         greater than the params parameter's. We now return the element
24847         type of the params array as that makes more sense.
24848
24849         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
24850         accordingly as we no longer have to extract the element type
24851         ourselves.
24852
24853         (Invocation.OverloadResolve): Update.
24854
24855 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
24856
24857         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
24858         against IEnumerator, test whether the return value is a descendant
24859         of the IEnumerator interface.
24860
24861         * class.cs (Indexer.Define): Use an auxiliary method to implement
24862         the other bits of the method definition.  Begin support for
24863         explicit interface implementation.
24864
24865         (Property.DefineMethod): Use TypeManager.void_type instead of null
24866         for an empty return value.
24867
24868 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
24869
24870         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
24871         dealing with a FieldExpr which is composed of a FieldBuilder, in
24872         the code path we did extract the constant, but we should have
24873         obtained the underlying value to be able to cast it (otherwise we
24874         end up in an infinite loop, this is what Ravi was running into).
24875
24876         (ArrayCreation.UpdateIndices): Arrays might be empty.
24877
24878         (MemberAccess.ResolveMemberAccess): Add support for section
24879         14.5.4.1 that deals with the special case of E.I when E is a type
24880         and something else, that I can be a reference to a static member.
24881
24882         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
24883         handle a particular array type to create byte blobs, it is just
24884         something we dont generate byteblobs for.
24885
24886         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
24887         arguments. 
24888
24889         * location.cs (Push): remove the key from the hashtable that we
24890         are about to add.   This happens for empty files.
24891
24892         * driver.cs: Dispose files after we have parsed them.
24893
24894         (tokenize): new function that only runs the tokenizer on its
24895         input, for speed testing.
24896
24897 2001-12-26  Ravi Pratap  <ravi@ximian.com>
24898
24899         * class.cs (Event.Define): Define the private field only if there
24900         are no accessors defined.
24901
24902         * expression.cs (ResolveMemberAccess): If there is no associated
24903         field with the event, that means we have an event defined with its
24904         own accessors and we should flag error cs0070 since transforming
24905         ourselves into a field is not valid in that case.
24906
24907         * ecore.cs (SimpleName.DoResolve): Same as above.
24908
24909         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
24910         and charset to sane values.
24911
24912 2001-12-25  Ravi Pratap  <ravi@ximian.com>
24913
24914         * assign.cs (DoResolve): Perform check on events only if they 
24915         are being accessed outside the declaring type.
24916
24917         * cs-parser.jay (event_declarations): Update rules to correctly
24918         set the type of the implicit parameter etc.
24919
24920         (add_accessor, remove_accessor): Set current local parameters.
24921
24922         * expression.cs (Binary): For delegate addition and subtraction,
24923         cast the return value from the method into the appropriate delegate
24924         type.
24925
24926 2001-12-24  Ravi Pratap  <ravi@ximian.com>
24927
24928         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
24929         of these as the workaround is unnecessary.
24930
24931         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
24932         delegate data - none of that is needed at all.
24933
24934         Re-write bits to extract the instance expression and the delegate method
24935         correctly.
24936
24937         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
24938         on delegates too.
24939
24940         * attribute.cs (ApplyAttributes): New method to take care of common tasks
24941         of attaching attributes instead of duplicating code everywhere.
24942
24943         * everywhere : Update code to do attribute emission using the above method.
24944
24945 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
24946
24947         * expression.cs (IsParamsMethodApplicable): if there are not
24948         parameters, return immediately.
24949
24950         * ecore.cs: The 0 literal can be implicity converted to an enum
24951         type. 
24952
24953         (SimpleName.DoResolve): First lookup the type, then lookup the
24954         members. 
24955
24956         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
24957         want to get its address.  If the InstanceExpression is not
24958         addressable, store the result in a temporary variable, then get
24959         the address of it.
24960
24961         * codegen.cs: Only display 219 errors on warning level or above. 
24962
24963         * expression.cs (ArrayAccess): Make it implement the
24964         IMemoryLocation interface.
24965
24966         (Binary.DoResolve): handle the operator == (object a, object b)
24967         and operator != (object a, object b) without incurring into a
24968         BoxedCast (because 5 != o should never be performed).
24969
24970         Handle binary enumerator operators.
24971
24972         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
24973         value type, otherwise use Ldelem_ref.
24974
24975         Use precomputed names;
24976
24977         (AddressOf): Implement address of
24978
24979         * cs-parser.jay (labeled_statement): Fix recursive block
24980         addition by reworking the production.
24981
24982         * expression.cs (New.DoEmit): New has a special case:
24983                 
24984                  If we are dealing with a ValueType, we have a few
24985                  situations to deal with:
24986                 
24987                     * The target of New is a ValueType variable, that is
24988                       easy, we just pass this as the variable reference
24989                 
24990                     * The target of New is being passed as an argument,
24991                       to a boxing operation or a function that takes a
24992                       ValueType.
24993                 
24994                       In this case, we need to create a temporary variable
24995                       that is the argument of New.
24996
24997
24998 2001-12-23  Ravi Pratap  <ravi@ximian.com>
24999
25000         * rootcontext.cs (LookupType): Check that current_type is not null before
25001         going about looking at nested types.
25002
25003         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
25004         not implement the IAssignMethod interface any more.
25005
25006         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
25007         where we tranform them into FieldExprs if they are being resolved from within
25008         the declaring type.
25009
25010         * ecore.cs (SimpleName.DoResolve): Do the same here.
25011
25012         * assign.cs (DoResolve, Emit): Clean up code considerably. 
25013
25014         * ../errors/bug10.cs : Add.
25015
25016         * ../errors/cs0070.cs : Add.
25017
25018         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
25019
25020         * assign.cs : Get rid of EventIsLocal everywhere.
25021
25022 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
25023
25024         * ecore.cs (ConvertIntLiteral): finished the implementation.
25025
25026         * statement.cs (SwitchLabel): Convert the value we are using as a
25027         key before looking up the table.
25028
25029 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
25030
25031         * codegen.cs (EmitTopBlock): Require a Location argument now.
25032
25033         * cs-parser.jay (constructor_declarator): We need to setup
25034         current_local_parameters before we parse the
25035         opt_constructor_initializer, to allow the variables to be bound
25036         to the constructor arguments.
25037
25038         * rootcontext.cs (LookupType): First lookup nested classes in our
25039         class and our parents before we go looking outside our class.
25040
25041         * expression.cs (ConstantFold): Extract/debox the values at the
25042         beginnning. 
25043
25044         * rootcontext.cs (EmitCode): Resolve the constants first before we
25045         resolve the types.  This is not really needed, but it helps debugging.
25046
25047         * statement.cs: report location.
25048
25049         * cs-parser.jay: pass location to throw statement.
25050
25051         * driver.cs: Small bug fix.
25052
25053         * report.cs: Updated format to be 4-zero filled digits.
25054
25055 2001-12-22  Ravi Pratap  <ravi@ximian.com>
25056
25057         * expression.cs (CheckIndices): Fix minor bug where the wrong
25058         variable was being referred to ;-)
25059
25060         (DoEmit): Do not call EmitStaticInitializers when the 
25061         underlying type is System.Object.
25062
25063 2001-12-21  Ravi Pratap  <ravi@ximian.com>
25064
25065         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
25066         and do the usual workaround for SRE.
25067
25068         * class.cs (MyEventBuilder.EventType): New member to get at the type
25069         of the event, quickly.
25070
25071         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
25072
25073         * assign.cs (Assign.DoResolve): Handle the case when the target
25074         is an EventExpr and perform the necessary checks.
25075
25076         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
25077         interface.
25078
25079         (SimpleName.MemberStaticCheck): Include check for EventExpr.
25080
25081         (EventExpr): Set the type in the constructor itself since we 
25082         are meant to be born fully resolved.
25083
25084         (EventExpr.Define): Revert code I wrote earlier.
25085                 
25086         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
25087         instance expression is null. The instance expression is a This in that case
25088         or a null, depending on whether it is a static method or not.
25089
25090         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
25091         refers to more than one method.
25092
25093         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
25094         and accordingly flag errors.
25095
25096 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
25097
25098         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
25099
25100 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
25101
25102         * location.cs (ToString): Provide useful rutine.
25103
25104 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
25105
25106         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
25107         objects, return the actual integral boxed.
25108
25109         * statement.cs (SwitchLabel): define an ILLabel for each
25110         SwitchLabel. 
25111
25112         (Switch.CheckSwitch): If the value is a Literal, extract
25113         the underlying literal.
25114
25115         Also in the unused hashtable we had, add the SwitchLabel so we can
25116         quickly look this value up.
25117
25118         * constant.cs: Implement a bunch of new constants.  Rewrite
25119         Literal based on this.  Made changes everywhere to adapt to this.
25120
25121         * expression.cs (Expression.MakeByteBlob): Optimize routine by
25122         dereferencing array only once, and also copes with enumrations.
25123
25124         bytes are two bytes wide, not one.
25125
25126         (Cast): Perform constant conversions.
25127
25128         * ecore.cs (TryImplicitIntConversion): Return literals instead of
25129         wrappers to the literals here.
25130
25131         * expression.cs (DoNumericPromotions): long literals can converted
25132         to ulong implicity (this is taken care of elsewhere, but I was
25133         missing this spot).
25134
25135         * ecore.cs (Expression.Literalize): Make the return type Literal,
25136         to improve type checking.
25137
25138         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
25139
25140 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
25141
25142         * literal.cs: Revert code from ravi that checked the bounds.  The
25143         bounds are sane by the definition of the type itself. 
25144
25145         * typemanager.cs: Fix implementation of ImplementsInterface.  We
25146         need to actually look up in our parent hierarchy for interfaces
25147         implemented. 
25148
25149         * const.cs: Use the underlying type for enumerations
25150
25151         * delegate.cs: Compute the basename for the delegate creation,
25152         that should fix the delegate test case, and restore the correct
25153         Type Lookup semantics in rootcontext
25154
25155         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
25156         referencing a nested type with the Reflection API is using the "+"
25157         sign. 
25158
25159         * cs-parser.jay: Do not require EOF token at the end.
25160
25161 2001-12-20  Ravi Pratap  <ravi@ximian.com>
25162
25163         * rootcontext.cs (LookupType): Concatenate type names with
25164         a '.' instead of a '+' The test suite passes again.
25165
25166         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
25167         field of the enumeration.
25168
25169         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
25170         the case when the member is an EventExpr.
25171
25172         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
25173         static has an associated instance expression.
25174
25175         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
25176
25177         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
25178
25179         * class.cs (Event.Define): Register event and perform appropriate checks
25180         for error #111.
25181
25182         We define the Add and Remove methods even if the use provides none because
25183         in that case, we provide default implementations ourselves.
25184
25185         Define a private field of the type of the event. This is done by the CSC compiler
25186         and we should be doing it too ;-)
25187
25188         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
25189         More methods we use in code we generate.
25190
25191         (multicast_delegate_type, delegate_type): Two separate types since the distinction
25192         is important.
25193
25194         (InitCoreTypes): Update accordingly for the above.
25195
25196         * class.cs (Event.Emit): Generate code for default accessors that we provide
25197
25198         (EmitDefaultMethod): Do the job in the above.
25199
25200         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
25201         appropriate place.
25202
25203 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
25204
25205         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
25206         builders even if we were missing one.
25207
25208         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
25209         pass the Basename as our class name instead of the Name.  The
25210         basename will be correctly composed for us.
25211
25212         * parameter.cs (Paramters): Now takes a Location argument.
25213
25214         * decl.cs (DeclSpace.LookupType): Removed convenience function and
25215         make all the code call directly LookupType in RootContext and take
25216         this chance to pass the Location information everywhere.
25217
25218         * Everywhere: pass Location information.
25219
25220 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
25221
25222         * class.cs (Constructor.Define): Updated way of detecting the
25223         length of the parameters.
25224
25225         (TypeContainer.DefineType): Use basename as the type name for
25226         nested types.
25227
25228         (TypeContainer.Define): Do not recursively define types here, as
25229         definition is taken care in order by the RootContext.
25230
25231         * tree.cs: Keep track of namespaces in a per-file basis.
25232
25233         * parameter.cs (Parameter.ComputeSignature): Update to use
25234         DeclSpace. 
25235
25236         (Parameters.GetSignature): ditto.
25237
25238         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
25239         instead of a TypeContainer.
25240
25241         (Interface.SemanticAnalysis): Use `this' instead of our parent to
25242         resolve names.  Because we need to be resolve in our context, not
25243         our parents.
25244
25245         * driver.cs: Implement response files.
25246
25247         * class.cs (TypeContainer.DefineType): If we are defined, do not
25248         redefine ourselves.
25249
25250         (Event.Emit): Emit the code for add/remove handlers.
25251         (Event.Define): Save the MethodBuilders for add/remove.
25252
25253         * typemanager.cs: Use pair here too.
25254
25255         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
25256         DictionaryEntry requires the first argument to be non-null.  
25257
25258         (enum_declaration): Compute full name for registering the
25259         enumeration.
25260
25261         (delegate_declaration): Instead of using
25262         formal_parameter_list, use opt_formal_parameter_list as the list
25263         can be empty.
25264
25265         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
25266         (EventParsing): New property that controls whether `add' and
25267         `remove' are returned as tokens or identifiers (for events);
25268
25269 2001-12-19  Ravi Pratap  <ravi@ximian.com>
25270
25271         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
25272         use MyEventBuilder only and let it wrap the real builder for us.
25273
25274         (MyEventBuilder): Revamp constructor etc.
25275
25276         Implement all operations that we perform on EventBuilder in precisely the same
25277         way here too.
25278
25279         (FindMembers): Update to use the EventBuilder member.
25280
25281         (Event.Emit): Update accordingly.
25282
25283 2001-12-18  Ravi Pratap  <ravi@ximian.com>
25284
25285         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
25286         by calling the appropriate methods.
25287
25288         (GetCustomAttributes): Make stubs as they cannot possibly do anything
25289         useful.
25290
25291         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
25292
25293 2001-12-17  Ravi Pratap  <ravi@ximian.com>
25294
25295         * delegate.cs (Delegate.Populate): Check that the return type
25296         and various parameters types are indeed accessible.
25297
25298         * class.cs (Constructor.Define): Same here.
25299
25300         (Field.Define): Ditto.
25301
25302         (Event.Define): Ditto.
25303
25304         (Operator.Define): Check that the underlying Method defined itself
25305         correctly - so it's MethodBuilder should not be null.
25306
25307         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
25308         expression happens to be null.
25309
25310         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
25311         members but as of now we don't seem to be able to do anything really useful with it.
25312
25313         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
25314         not the EventBuilder.
25315
25316 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
25317
25318         * cs-tokenizer.cs: Add support for defines.
25319         Add support for #if, #elif, #else, #endif
25320
25321         (eval_var): evaluates a variable.
25322         (eval): stubbed for evaluating functions.
25323
25324         * cs-parser.jay: Pass the defines information
25325
25326         * driver.cs: Add --define command line option.
25327
25328         * decl.cs: Move MemberCore here.
25329
25330         Make it the base class for DeclSpace.  This allows us to catch and
25331         report 108 and 109 for everything now.
25332
25333         * class.cs (TypeContainer.Define): Extract all the members
25334         before populating and emit the warning 108 (new keyword required
25335         to override) instead of having each member implement this.
25336
25337         (MemberCore.Define): New abstract method, we will be using this in
25338         the warning reporting engine in Populate.
25339
25340         (Operator.Define): Adjust to new MemberCore protocol. 
25341
25342         * const.cs (Const): This does not derive from Expression, it is a
25343         temporary object we use to create fields, it is a MemberCore. 
25344
25345         * class.cs (Method.Define): Allow the entry point to be in a
25346         specific class.
25347
25348         * driver.cs: Rewrite the argument handler to clean it up a bit.
25349
25350         * rootcontext.cs: Made it just an auxiliary namespace feature by
25351         making everything static.
25352
25353         * driver.cs: Adapt code to use RootContext type name instead of
25354         instance variable.
25355
25356         * delegate.cs: Remove RootContext argument.
25357
25358         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
25359         argument. 
25360
25361         * class.cs (Event.Define): The lookup can fail.
25362
25363         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
25364
25365         * expression.cs: Resolve the this instance before invoking the code.
25366
25367 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
25368
25369         * cs-parser.jay: Add a production in element_access that allows
25370         the thing to become a "type" reference.  This way we can parse
25371         things like "(string [])" as a type.
25372
25373         Note that this still does not handle the more complex rules of
25374         casts. 
25375
25376
25377         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
25378
25379         * ecore.cs: (CopyNewMethods): new utility function used to
25380         assemble the list of methods from running FindMembers.
25381
25382         (MemberLookup): Rework FindMembers so that 
25383
25384 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
25385
25386         * class.cs (TypeContainer): Remove Delegates who fail to be
25387         defined.
25388
25389         * delegate.cs (Populate): Verify that we dont get null return
25390         values.   TODO: Check for AsAccessible.
25391
25392         * cs-parser.jay: Use basename to emit error 574 (destructor should
25393         have the same name as container class), not the full name.
25394
25395         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
25396         possible representation.  
25397
25398         Also implements integer type suffixes U and L.
25399
25400 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
25401
25402         * expression.cs (ArrayCreation.DoResolve): We need to do the
25403         argument resolution *always*.
25404
25405         * decl.cs: Make this hold the namespace.  Hold the root context as
25406         well.
25407         (LookupType): Move here.
25408
25409         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
25410
25411         * location.cs (Row, Name): Fixed the code, it was always returning
25412         references to the first file.
25413
25414         * interface.cs: Register properties defined through interfaces.
25415
25416         * driver.cs: Add support for globbing on the command line
25417
25418         * class.cs (Field): Make it derive from MemberCore as well.
25419         (Event): ditto.
25420
25421 2001-12-15  Ravi Pratap  <ravi@ximian.com>
25422
25423         * class.cs (Event::Define): Check that the type of the event is a delegate
25424         type else flag error #66.
25425
25426         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
25427         same.
25428
25429         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
25430         values of EntryPoint, CharSet etc etc.
25431
25432         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
25433
25434         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
25435         be null and we should ignore this. I am not sure if this is really clean. Apparently,
25436         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
25437         which needs this to do its work.
25438
25439         * ../errors/cs0066.cs : Add.
25440
25441 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
25442
25443         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
25444         helper functions.
25445
25446         * class.cs: (MethodSignature.MethodSignature): Removed hack that
25447         clears out the parameters field.
25448         (MemberSignatureCompare): Cleanup
25449
25450         (MemberCore): New base class used to share code between MethodCore
25451         and Property.
25452
25453         (RegisterRequiredImplementations) BindingFlags.Public requires
25454         either BindingFlags.Instace or Static.  Use instance here.
25455
25456         (Property): Refactored code to cope better with the full spec.
25457
25458         * parameter.cs (GetParameterInfo): Return an empty array instead
25459         of null on error.
25460
25461         * class.cs (Property): Abstract or extern properties have no bodies.
25462
25463         * parameter.cs (GetParameterInfo): return a zero-sized array.
25464
25465         * class.cs (TypeContainer.MethodModifiersValid): Move all the
25466         method modifier validation to the typecontainer so we can reuse
25467         this on properties.
25468
25469         (MethodCore.ParameterTypes): return an empty sized array of types.
25470
25471         (Property.Define): Test property modifier validity.
25472
25473         Add tests for sealed/override too.
25474
25475         (Method.Emit): abstract or extern methods have no bodies.
25476
25477 2001-12-14  Ravi Pratap  <ravi@ximian.com>
25478
25479         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
25480         thing.
25481
25482         (Method::Define, ::Emit): Modify accordingly.
25483
25484         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
25485
25486         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
25487
25488         * makefile: Pass in /unsafe.
25489
25490 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
25491
25492         * class.cs (MakeKey): Kill routine.
25493
25494         * class.cs (TypeContainer.Define): Correctly define explicit
25495         method implementations (they require the full interface name plus
25496         the method name).
25497
25498         * typemanager.cs: Deply the PtrHashtable here and stop using the
25499         lame keys.  Things work so much better.
25500
25501         This of course broke everyone who depended on `RegisterMethod' to
25502         do the `test for existance' test.  This has to be done elsewhere.
25503
25504         * support.cs (PtrHashtable): A hashtable that avoid comparing with
25505         the object stupid Equals method (because, that like fails all over
25506         the place).  We still do not use it.
25507
25508         * class.cs (TypeContainer.SetRequiredInterface,
25509         TypeContainer.RequireMethods): Killed these two routines and moved
25510         all the functionality to RegisterRequiredImplementations.
25511
25512         (TypeContainer.RegisterRequiredImplementations): This routine now
25513         registers all the implementations required in an array for the
25514         interfaces and abstract methods.  We use an array of structures
25515         which can be computed ahead of time to reduce memory usage and we
25516         also assume that lookups are cheap as most classes will not
25517         implement too many interfaces.
25518
25519         We also avoid creating too many MethodSignatures.
25520
25521         (TypeContainer.IsInterfaceMethod): Update and optionally does not
25522         clear the "pending" bit if we find that there are problems with
25523         the declaration.
25524
25525         (TypeContainer.VerifyPendingMethods): Update to report errors of
25526         methods that look like implementations but are not.
25527
25528         (TypeContainer.Define): Add support for explicit interface method
25529         implementation. 
25530
25531 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
25532
25533         * typemanager.cs: Keep track of the parameters here instead of
25534         being a feature of the TypeContainer.
25535
25536         * class.cs: Drop the registration of parameters here, as
25537         InterfaceMethods are also interface declarations.
25538
25539         * delegate.cs: Register methods with the TypeManager not only with
25540         the TypeContainer.  This code was buggy.
25541
25542         * interface.cs: Full registation here.
25543
25544 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
25545
25546         * expression.cs: Remove reducer for binary expressions, it can not
25547         be done this way.
25548
25549         * const.cs: Put here the code that used to go into constant.cs
25550
25551         * constant.cs: Put here the code for constants, this is a new base
25552         class for Literals.
25553
25554         * literal.cs: Make Literal derive from Constant.
25555
25556 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
25557
25558         * statement.cs (Return.Emit): Report error 157 if the user
25559         attempts to return from a finally block.
25560
25561         (Return.Emit): Instead of emitting a return, jump to the end of
25562         the function.
25563
25564         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
25565         LocalBuilder to store the result of the function.  ReturnLabel is
25566         the target where we jump.
25567
25568
25569 2001-12-09  Radek Doulik  <rodo@ximian.com>
25570
25571         * cs-parser.jay: remember alias in current namespace
25572
25573         * ecore.cs (SimpleName::DoResolve): use aliases for types or
25574         namespaces
25575
25576         * class.cs (LookupAlias): lookup alias in my_namespace
25577
25578         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
25579         aliases hashtable
25580         (LookupAlias): lookup alias in this and if needed in parent
25581         namespaces
25582
25583 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
25584
25585         * support.cs: 
25586
25587         * rootcontext.cs: (ModuleBuilder) Made static, first step into
25588         making things static.  I need this to avoid passing the
25589         TypeContainer when calling ParameterType.
25590
25591         * support.cs (InternalParameters.ParameterType): Remove ugly hack
25592         that did string manipulation to compute the type and then call
25593         GetType.  Use Parameter.ParameterType instead.
25594
25595         * cs-tokenizer.cs: Consume the suffix for floating values.
25596
25597         * expression.cs (ParameterReference): figure out whether this is a
25598         reference parameter or not.  Kill an extra variable by computing
25599         the arg_idx during emission.
25600
25601         * parameter.cs (Parameters.GetParameterInfo): New overloaded
25602         function that returns whether a parameter is an out/ref value or not.
25603
25604         (Parameter.ParameterType): The type of the parameter (base,
25605         without ref/out applied).
25606
25607         (Parameter.Resolve): Perform resolution here.
25608         (Parameter.ExternalType): The full type (with ref/out applied).
25609
25610         * statement.cs (Using.Emit, Using.EmitExpression): Implement
25611         support for expressions on the using statement.
25612
25613 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
25614
25615         * statement.cs (Using.EmitLocalVariableDecls): Split the
25616         localvariable handling of the using statement.
25617
25618         (Block.EmitMeta): Keep track of variable count across blocks.  We
25619         were reusing slots on separate branches of blocks.
25620
25621         (Try.Emit): Emit the general code block, we were not emitting it. 
25622
25623         Check the type of the declaration to be an IDisposable or
25624         something that can be implicity converted to it. 
25625
25626         Emit conversions if required.
25627
25628         * ecore.cs (EmptyExpression): New utility class.
25629         (Expression.ImplicitConversionExists): New utility function.
25630
25631 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
25632
25633         * statement.cs (Using): Implement.
25634
25635         * expression.cs (LocalVariableReference): Support read only variables.
25636
25637         * statement.cs: Remove the explicit emit for the Leave opcode.
25638         (VariableInfo): Add a readonly field.
25639
25640 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
25641
25642         * ecore.cs (ConvCast): new class used to encapsulate the various
25643         explicit integer conversions that works in both checked and
25644         unchecked contexts.
25645
25646         (Expression.ConvertNumericExplicit): Use new ConvCast class to
25647         properly generate the overflow opcodes.
25648
25649 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
25650
25651         * statement.cs: The correct type for the EmptyExpression is the
25652         element_type, not the variable type.  Ravi pointed this out.
25653
25654 2001-12-04  Ravi Pratap  <ravi@ximian.com>
25655
25656         * class.cs (Method::Define): Handle PInvoke methods specially
25657         by using DefinePInvokeMethod instead of the usual one.
25658
25659         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
25660         above to do the task of extracting information and defining the method.
25661
25662 2001-12-04  Ravi Pratap  <ravi@ximian.com>
25663
25664         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
25665         of the condition for string type.
25666
25667         (Emit): Move that here. 
25668
25669         (ArrayCreation::CheckIndices): Keep string literals in their expression
25670         form.
25671
25672         (EmitDynamicInitializers): Handle strings appropriately.
25673
25674 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
25675
25676         * codegen.cs (EmitContext): Replace multiple variables with a
25677         single pointer to the current Switch statement.
25678
25679         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
25680         EmitContext.
25681
25682 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
25683
25684         * statement.cs 
25685
25686         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
25687         default'.
25688
25689         (Foreach.Emit): Foreach on arrays was not setting
25690         up the loop variables (for break/continue).
25691
25692         (GotoCase): Semi-implented.
25693
25694 2001-12-03  Ravi Pratap  <ravi@ximian.com>
25695
25696         * attribute.cs (CheckAttribute): Handle system attributes by using
25697         Attribute.GetAttributes to examine information we need.
25698
25699         (GetValidPlaces): Same here.
25700
25701         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
25702
25703         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
25704
25705         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
25706
25707         (Method::Define): Set appropriate flags if we have a DllImport attribute.
25708
25709         (Method::Emit): Handle the case when we are a PInvoke method.
25710
25711 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
25712
25713         * expression.cs: Use ResolveWithSimpleName on compound names.
25714
25715 2001-12-02  Ravi Pratap  <ravi@ximian.com>
25716
25717         * constant.cs (EmitConstant): Make sure we resolve the associated expression
25718         before trying to reduce it.
25719
25720         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
25721
25722         * constant.cs (LookupConstantValue): Implement.
25723
25724         (EmitConstant): Use the above in emitting the constant.
25725
25726         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
25727         that are user-defined by doing a LookupConstantValue on them.
25728
25729         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
25730         too, like above.
25731
25732 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
25733
25734         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
25735
25736         (BaseAccess.DoResolve): Implement.
25737
25738         (MemberAccess.DoResolve): Split this routine into a
25739         ResolveMemberAccess routine that can be used independently
25740
25741 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
25742
25743         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
25744         As that share bits of the implementation.  Is returns a boolean,
25745         while As returns the Type that is being probed.
25746
25747 2001-12-01  Ravi Pratap  <ravi@ximian.com>
25748
25749         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
25750         instead of a Literal - much easier.
25751
25752         (EnumInTransit): Remove - utterly useless :-)
25753
25754         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
25755
25756         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
25757
25758         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
25759         chain when we have no associated expression.
25760
25761 2001-11-30  Ravi Pratap  <ravi@ximian.com>
25762
25763         * constant.cs (Define): Use Location while reporting the errror.
25764
25765         Also emit a warning when 'new' is used and there is no inherited
25766         member to hide.
25767
25768         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
25769         populated.
25770
25771         (LookupEnumValue): Implement to lookup an enum member's value and define it
25772         if necessary.
25773
25774         (Populate): Re-write accordingly to use the above routine.
25775
25776 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
25777
25778         * expression.cs (This): Fix prototype for DoResolveLValue to
25779         override the base class DoResolveLValue.
25780
25781         * cs-parser.cs: Report errors cs574 and cs575 (destructor
25782         declarations) 
25783
25784         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
25785         (we need to load the address of the field here).  This fixes
25786         test-22. 
25787
25788         (FieldExpr.DoResolveLValue): Call the DoResolve
25789         function to initialize the Instance expression.
25790
25791         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
25792         correctly the GetEnumerator operation on a value type.
25793
25794         * cs-parser.jay: Add more simple parsing error catches.
25795
25796         * statement.cs (Switch): Add support for string switches.
25797         Handle null specially.
25798
25799         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
25800
25801 2001-11-28  Ravi Pratap  <ravi@ximian.com>
25802
25803         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
25804
25805         (declare_local_constant): New helper function.
25806
25807         * statement.cs (AddConstant): Keep a separate record of constants
25808
25809         (IsConstant): Implement to determine if a variable is a constant.
25810
25811         (GetConstantExpression): Implement.
25812
25813         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
25814
25815         * statement.cs (IsVariableDefined): Re-write.
25816
25817 2001-11-27  Ravi Pratap  <ravi@ximian.com>
25818
25819         * class.cs (TypeContainer::FindMembers): Look for constants
25820         in the case when we are looking for MemberTypes.Field
25821
25822         * expression.cs (MemberAccess::DoResolve): Check that in the
25823         case we are a FieldExpr and a Literal, we are not being accessed
25824         by an instance reference.
25825
25826         * cs-parser.jay (local_constant_declaration): Implement.
25827
25828         (declaration_statement): Implement for constant declarations.
25829
25830 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
25831
25832         * statement.cs (Switch): Catch double defaults.
25833
25834         (Switch): More work on the switch() statement
25835         implementation.  It works for integral values now, need to finish
25836         string support.
25837
25838
25839 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
25840
25841         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
25842         integer literals into other integer literals.  To be used by
25843         switch. 
25844
25845 2001-11-24  Ravi Pratap  <ravi@ximian.com>
25846
25847         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
25848         some memory.
25849
25850         (EmitDynamicInitializers): Cope with the above since we extract data
25851         directly from ArrayData now.
25852
25853         (ExpectInitializers): Keep track of whether initializers are mandatory
25854         or not.
25855
25856         (Bounds): Make it a hashtable to prevent the same dimension being 
25857         recorded for every element in that dimension.
25858
25859         (EmitDynamicInitializers): Fix bug which prevented the Set array method
25860         from being found.
25861
25862         Also fix bug which was causing the indices to be emitted in the reverse
25863         order.
25864
25865 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
25866
25867         * expression.cs (ArrayCreation): Implement the bits that Ravi left
25868         unfinished.  They do not work, because the underlying code is
25869         sloppy.
25870
25871 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
25872
25873         * cs-parser.jay: Remove bogus fixme.
25874
25875         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
25876         on Switch statement.
25877
25878 2001-11-23  Ravi Pratap  <ravi@ximian.com>
25879
25880         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
25881         the same. 
25882
25883         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
25884         parameter. Apparently, any expression is allowed. 
25885
25886         (ValidateInitializers): Update accordingly.
25887
25888         (CheckIndices): Fix some tricky bugs thanks to recursion.
25889
25890         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
25891         I was being completely brain-dead.
25892
25893         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
25894         and re-write acordingly.
25895
25896         (DelegateInvocation): Re-write accordingly.
25897
25898         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
25899
25900         (MakeByteBlob): Handle types more correctly.
25901
25902         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
25903         initialization from expressions but it is incomplete because I am a complete
25904         Dodo :-|
25905
25906 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
25907
25908         * statement.cs (If.Emit): Fix a bug that generated incorrect code
25909         on If.  Basically, we have to return `true' (ie, we do return to
25910         our caller) only if both branches of the if return.
25911
25912         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
25913         short-circuit operators, handle them as short circuit operators. 
25914
25915         (Cast.DoResolve): Resolve type.
25916         (Cast.Cast): Take an expression as the target type.
25917
25918         * cs-parser.jay (cast_expression): Remove old hack that only
25919         allowed a limited set of types to be handled.  Now we take a
25920         unary_expression and we resolve to a type during semantic
25921         analysis.
25922
25923         Use the grammar productions from Rhys to handle casts (this is
25924         not complete like Rhys syntax yet, we fail to handle that corner
25925         case that C# has regarding (-x), but we will get there.
25926
25927 2001-11-22  Ravi Pratap  <ravi@ximian.com>
25928
25929         * class.cs (EmitFieldInitializer): Take care of the case when we have a
25930         field which is an array type.
25931
25932         * cs-parser.jay (declare_local_variables): Support array initialization too.
25933
25934         * typemanager.cs (MakeKey): Implement.
25935
25936         (everywhere): Use the above appropriately.
25937
25938         * cs-parser.jay (for_statement): Update for array initialization while
25939         declaring variables.
25940
25941         * ecore.cs : The error message was correct, it's the variable's names that
25942         were misleading ;-) Make the code more readable.
25943
25944         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
25945         the correct type etc.
25946
25947         (ConvertExplicit): Handle Enum types by examining the underlying type.
25948
25949 2001-11-21  Ravi Pratap  <ravi@ximian.com>
25950
25951         * parameter.cs (GetCallingConvention): Always return
25952         CallingConventions.Standard for now.
25953
25954 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
25955
25956         * expression.cs (Binary.ResolveOperator): Update the values of `l'
25957         and `r' after calling DoNumericPromotions.
25958
25959         * ecore.cs: Fix error message (the types were in the wrong order).
25960
25961         * statement.cs (Foreach.ProbeCollectionType): Need to pass
25962         BindingFlags.Instance as well 
25963
25964         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
25965         implicit int literal conversion in an empty cast so that we
25966         propagate the right type upstream.
25967
25968         (UnboxCast): new class used to unbox value types.
25969         (Expression.ConvertExplicit): Add explicit type conversions done
25970         by unboxing.
25971
25972         (Expression.ImplicitNumericConversion): Oops, forgot to test for
25973         the target type before applying the implicit LongLiterals to ULong
25974         literal cast.
25975
25976 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
25977
25978         * cs-parser.jay (for_statement): Reworked the way For works: now
25979         we declare manually any variables that are introduced in
25980         for_initializer to solve the problem of having out-of-band code
25981         emition (that is what got for broken).
25982
25983         (declaration_statement): Perform the actual variable declaration
25984         that used to be done in local_variable_declaration here.
25985
25986         (local_variable_declaration): Do not declare anything, just pass
25987         the information on a DictionaryEntry
25988
25989 2001-11-20  Ravi Pratap  <ravi@ximian.com>
25990
25991         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
25992         re-write of the logic to now make it recursive.
25993
25994         (UpdateIndices): Re-write accordingly.
25995
25996         Store element data in a separate ArrayData list in the above methods.
25997
25998         (MakeByteBlob): Implement to dump the array data into a byte array.
25999
26000 2001-11-19  Ravi Pratap  <ravi@ximian.com>
26001
26002         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
26003         into CheckIndices.
26004
26005         * constant.cs (Define): Implement.
26006
26007         (EmitConstant): Re-write fully.
26008
26009         Pass in location info.
26010
26011         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
26012         respectively.
26013
26014         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
26015         DictionaryEntry since we need location info too.
26016
26017         (constant_declaration): Update accordingly.
26018
26019         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
26020         code into another method : UpdateIndices.
26021
26022 2001-11-18  Ravi Pratap  <ravi@ximian.com>
26023
26024         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
26025         some type checking etc.
26026
26027 2001-11-17  Ravi Pratap  <ravi@ximian.com>
26028
26029         * expression.cs (ArrayCreation::ValidateInitializers): Implement
26030         bits to provide dimension info if the user skips doing that.
26031
26032         Update second constructor to store the rank correctly.
26033
26034 2001-11-16  Ravi Pratap  <ravi@ximian.com>
26035
26036         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
26037         and try to implement.
26038
26039         * ../errors/cs0150.cs : Add.
26040
26041         * ../errors/cs0178.cs : Add.
26042
26043 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
26044
26045         * statement.cs: Implement foreach on multi-dimensional arrays. 
26046
26047         * parameter.cs (Parameters.GetParameterByName): Also lookup the
26048         name of the params argument.
26049
26050         * expression.cs: Use EmitStoreOpcode to get the right opcode while
26051         initializing the array.
26052
26053         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
26054         we can use this elsewhere.
26055
26056         * statement.cs: Finish implementation of foreach for single
26057         dimension arrays.
26058
26059         * cs-parser.jay: Use an out-of-band stack to pass information
26060         around, I wonder why I need this.
26061
26062         foreach_block: Make the new foreach_block the current_block.
26063
26064         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
26065         function used to return a static Parameters structure.  Used for
26066         empty parameters, as those are created very frequently.
26067
26068         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
26069
26070 2001-11-15  Ravi Pratap  <ravi@ximian.com>
26071
26072         * interface.cs : Default modifier is private, not public. The
26073         make verify test passes again.
26074
26075 2001-11-15  Ravi Pratap  <ravi@ximian.com>
26076
26077         * support.cs (ReflectionParameters): Fix logic to determine
26078         whether the last parameter is a params one. Test 9 passes again.
26079
26080         * delegate.cs (Populate): Register the builders we define with
26081         RegisterParameterForBuilder. Test 19 passes again.
26082
26083         * cs-parser.jay (property_declaration): Reference $6 instead
26084         of $$ to get at the location.
26085
26086         (indexer_declaration): Similar stuff.
26087
26088         (attribute): Ditto.
26089
26090         * class.cs (Property): Register parameters for the Get and Set methods
26091         if they exist. Test 23 passes again.
26092
26093         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
26094         call to EmitArguments as we are sure there aren't any params arguments. 
26095         Test 32 passes again.
26096
26097         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
26098         IndexOutOfRangeException. 
26099
26100         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
26101         Test 33 now passes again.
26102
26103 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
26104
26105         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
26106         broke a bunch of things.  Will have to come up with a better way
26107         of tracking locations.
26108
26109         * statement.cs: Implemented foreach for single dimension arrays.
26110
26111 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
26112
26113         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
26114         an error.  This removes the lookup from the critical path.
26115
26116         * cs-parser.jay: Removed use of temporary_loc, which is completely
26117         broken. 
26118
26119 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
26120
26121         * support.cs (ReflectionParameters.ParameterModifier): Report
26122         whether the argument is a PARAMS argument or not.
26123
26124         * class.cs: Set the attribute `ParamArrayAttribute' on the
26125         parameter argument.
26126
26127         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
26128         and cons_param_array_attribute (ConstructorInfo for
26129         ParamArrayAttribute)., 
26130
26131         * codegen.cs: Emit the return using the `Return' statement, that
26132         way we can report the error correctly for missing return values. 
26133
26134         * class.cs (Method.Emit): Clean up.
26135
26136         * expression.cs (Argument.Resolve): Take another argument: the
26137         location where this argument is used.  Notice that this is not
26138         part of the "Argument" class as to reduce the size of the
26139         structure (we know the approximate location anyways).
26140
26141         Test if the argument is a variable-reference, if not, then
26142         complain with a 206.
26143
26144         (Argument.Emit): Emit addresses of variables.
26145
26146         (Argument.FullDesc): Simplify.
26147
26148         (Invocation.DoResolve): Update for Argument.Resolve.
26149
26150         (ElementAccess.DoResolve): ditto.
26151
26152         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
26153         method should be virtual, as this method is always virtual.
26154
26155         (NewDelegate.DoResolve): Update for Argument.Resolve.
26156
26157         * class.cs (ConstructorInitializer.DoResolve): ditto.
26158
26159         * attribute.cs (Attribute.Resolve): ditto.
26160
26161 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
26162
26163         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
26164
26165         * expression.cs (ParameterReference): Drop IStackStorage and implement
26166         IAssignMethod instead. 
26167
26168         (LocalVariableReference): ditto.
26169
26170         * ecore.cs (FieldExpr): Drop IStackStorage and implement
26171         IAssignMethod instead. 
26172
26173 2001-11-13  Miguel de Icaza <miguel@ximian.com>
26174
26175         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
26176         enumerations that are used in heavily used structures derive from
26177         byte in a laughable and pathetic attempt to reduce memory usage.
26178         This is the kind of pre-optimzations that you should not do at
26179         home without adult supervision.
26180
26181         * expression.cs (UnaryMutator): New class, used to handle ++ and
26182         -- separatedly from the other unary operators.  Cleans up the
26183         code, and kills the ExpressionStatement dependency in Unary.
26184
26185         (Unary): Removed `method' and `Arguments' from this class, making
26186         it smaller, and moving it all to SimpleCall, so I can reuse this
26187         code in other locations and avoid creating a lot of transient data
26188         strucutres when not required.
26189
26190         * cs-parser.jay: Adjust for new changes.
26191
26192 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
26193
26194         * enum.cs (Enum.Populate): If there is a failure during
26195         definition, return
26196
26197         * cs-parser.jay (opt_enum_base): we used to catch type errors
26198         here, but this is really incorrect.  The type error should be
26199         catched during semantic analysis.
26200
26201 2001-12-11  Ravi Pratap  <ravi@ximian.com>
26202
26203         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
26204         current_local_parameters as expected since I, in my stupidity, had forgotten
26205         to do this :-)
26206
26207         * attribute.cs (GetValidPlaces): Fix stupid bug.
26208
26209         * class.cs (Method::Emit): Perform check on applicability of attributes.
26210
26211         (Constructor::Emit): Ditto.
26212
26213         (Field::Emit): Ditto.
26214
26215         (Field.Location): Store location information.
26216
26217         (Property, Event, Indexer, Operator): Ditto.
26218
26219         * cs-parser.jay (field_declaration): Pass in location for each field.
26220
26221         * ../errors/cs0592.cs : Add.
26222
26223 2001-11-12  Ravi Pratap  <ravi@ximian.com>
26224
26225         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
26226
26227         (InitCoreTypes): Update accordingly.
26228
26229         (RegisterAttrType, LookupAttr): Implement.
26230
26231         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
26232         info about the same.
26233
26234         (Resolve): Update to populate the above as necessary.
26235
26236         (Error592): Helper.
26237
26238         (GetValidPlaces): Helper to the above.
26239
26240         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
26241
26242         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
26243
26244 2001-11-12  Ravi Pratap  <ravi@ximian.com>
26245
26246         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
26247
26248         * ../errors/cs0617.cs : Add.
26249
26250 2001-11-11  Ravi Pratap  <ravi@ximian.com>
26251
26252         * enum.cs (Emit): Rename to Populate to be more consistent with what
26253         we expect it to do and when exactly it is called.
26254
26255         * class.cs, rootcontext.cs : Update accordingly.
26256
26257         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
26258         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
26259
26260         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
26261
26262         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
26263         of a fieldinfo using the above, when dealing with a FieldBuilder.
26264
26265 2001-11-10  Ravi Pratap  <ravi@ximian.com>
26266
26267         * ../errors/cs0031.cs : Add.
26268
26269         * ../errors/cs1008.cs : Add.
26270
26271         * ../errrors/cs0543.cs : Add.
26272
26273         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
26274         enum type.
26275
26276         (FindMembers): Implement.
26277
26278         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
26279         enums and delegates too.
26280
26281         (enum_types): Rename to builder_to_enum.
26282
26283         (delegate_types): Rename to builder_to_delegate.
26284
26285         * delegate.cs (FindMembers): Implement.
26286
26287 2001-11-09  Ravi Pratap  <ravi@ximian.com>
26288
26289         * typemanager.cs (IsEnumType): Implement.
26290
26291         * enum.cs (Emit): Re-write parts to account for the underlying type
26292         better and perform checking etc.
26293
26294         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
26295         of the underlying type.
26296
26297         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
26298         value
26299
26300         * enum.cs (error31): Helper to report error #31.
26301
26302         * cs-parser.jay (enum_declaration): Store location of each member too.
26303
26304         * enum.cs (member_to_location): New hashtable. 
26305
26306         (AddEnumMember): Update location hashtable.
26307
26308         (Emit): Use the location of each member while reporting errors.
26309
26310 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
26311
26312         * cs-parser.jay: A for_initializer if is a
26313         local_variable_declaration really ammount to have an implicit
26314         block with the variable declaration and no initializer for for.
26315
26316         * statement.cs (For.Emit): Cope with null initializers.
26317
26318         This fixes the infinite loop on for initializers.
26319
26320 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
26321
26322         * enum.cs: More cleanup.
26323
26324         * ecore.cs: Remove dead code.
26325
26326         * class.cs (Property.Emit): More simplification.
26327         (Event.Emit): ditto.
26328
26329         Reworked to have less levels of indentation.
26330
26331 2001-11-08  Ravi Pratap  <ravi@ximian.com>
26332
26333         * class.cs (Property): Emit attributes.
26334
26335         (Field): Ditto.
26336
26337         (Event): Ditto.
26338
26339         (Indexer): Ditto.
26340
26341         (Operator): Ditto.
26342
26343         * enum.cs (Emit): Ditto.
26344
26345         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
26346         Enums too.
26347
26348         * class.cs (Field, Event, etc.): Move attribute generation into the
26349         Emit method everywhere.
26350
26351         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
26352         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
26353         as we had no way of defining nested enums !
26354
26355         * rootcontext.cs : Adjust code accordingly.
26356
26357         * typemanager.cs (AddEnumType): To keep track of enum types separately.
26358
26359 2001-11-07  Ravi Pratap  <ravi@ximian.com>
26360
26361         * expression.cs (EvalConstantExpression): Move into ecore.cs
26362
26363         * enum.cs (Enum): Rename some members and make them public and readonly
26364         according to our convention.
26365
26366         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
26367         nothing else.
26368
26369         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
26370
26371         (Enum::Emit): Write a simple version for now which doesn't try to compute
26372         expressions. I shall modify this to be more robust in just a while.
26373
26374         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
26375
26376         (TypeContainer::CloseType): Create the Enum types too.
26377
26378         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
26379
26380         * expression.cs (EvalConstantExpression): Get rid of completely.
26381
26382         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
26383         user-defined values and other cases.
26384
26385         (IsValidEnumLiteral): Helper function.
26386
26387         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
26388         out there in the case we had a literal FieldExpr.
26389
26390         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
26391
26392         (Literalize): Revamp a bit to take two arguments.
26393
26394         (EnumLiteral): New class which derives from Literal to wrap enum literals.
26395
26396 2001-11-06  Ravi Pratap  <ravi@ximian.com>
26397
26398         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
26399
26400         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
26401
26402         (Resolve): Use the above to ensure we have proper initializers.
26403
26404 2001-11-05  Ravi Pratap  <ravi@ximian.com>
26405
26406         * expression.cs (Expression::EvalConstantExpression): New method to 
26407         evaluate constant expressions.
26408
26409         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
26410
26411 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
26412
26413         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
26414         in an array.
26415
26416         (Binary.ResolveOperator): Handle operator != (object a, object b)
26417         and operator == (object a, object b);
26418
26419         (Binary.DoNumericPromotions): Indicate whether the numeric
26420         promotion was possible.
26421
26422         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
26423         Implement.  
26424
26425         Made the ArrayAccess implement interface IAssignMethod instead of
26426         IStackStore as the order in which arguments are passed reflects
26427         this.
26428
26429         * assign.cs: Instead of using expr.ExprClass to select the way of
26430         assinging, probe for the IStackStore/IAssignMethod interfaces.
26431
26432         * typemanager.cs: Load InitializeArray definition.
26433
26434         * rootcontext.cs (RootContext.MakeStaticData): Used to define
26435         static data that can be used to initialize arrays. 
26436
26437 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
26438
26439         * expression.cs: Handle operator== and operator!= for booleans.
26440
26441         (Conditioal.Reduce): Implement reducer for the ?: operator.
26442
26443         (Conditional.Resolve): Implement dead code elimination.
26444
26445         (Binary.Resolve): Catch string literals and return a new
26446         concatenated string.
26447
26448         (Unary.Reduce): Implement reduction of unary expressions.
26449
26450         * ecore.cs: Split out the expression core handling here.
26451
26452         (Expression.Reduce): New method used to perform constant folding
26453         and CSE.  This is needed to support constant-expressions. 
26454
26455         * statement.cs (Statement.EmitBoolExpression): Pass true and false
26456         targets, and optimize for !x.
26457
26458 2001-11-04  Ravi Pratap  <ravi@ximian.com>
26459
26460         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
26461         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
26462         set custom atttributes.
26463
26464         * literal.cs (Literal::GetValue): New abstract method to return the actual
26465         value of the literal, cast as an object.
26466
26467         (*Literal): Implement GetValue method.
26468
26469         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
26470         expressions to the arraylist but objects of type Argument.
26471
26472         * class.cs (TypeContainer::Emit): Emit our attributes too.
26473
26474         (Method::Emit, Constructor::Emit): Ditto.
26475
26476         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
26477         to be ignoring earlier.
26478
26479 2001-11-03  Ravi Pratap  <ravi@ximian.com>
26480
26481         * attribute.cs (AttributeSection::Define): Implement to do the business
26482         of constructing a CustomAttributeBuilder.
26483
26484         (Attribute): New trivial class. Increases readability of code.  
26485
26486         * cs-parser.jay : Update accordingly.
26487
26488         (positional_argument_list, named_argument_list, named_argument): New rules
26489
26490         (attribute_arguments): Use the above so that we are more correct.
26491
26492 2001-11-02  Ravi Pratap  <ravi@ximian.com>
26493
26494         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
26495         to perform all checks for a method with a params parameter.
26496
26497         (Invocation::OverloadResolve): Update to use the above method and therefore
26498         cope correctly with params method invocations.
26499
26500         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
26501         params too.
26502
26503         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
26504         constructors in our parent too because we can't afford to miss out on 
26505         protected ones ;-)
26506
26507         * attribute.cs (AttributeSection): New name for the class Attribute
26508
26509         Other trivial changes to improve readability.
26510
26511         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
26512         use the new class names.
26513
26514 2001-11-01  Ravi Pratap  <ravi@ximian.com>
26515
26516         * class.cs (Method::Define): Complete definition for params types too
26517
26518         (Indexer::Define): Ditto.
26519
26520         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
26521         Cope everywhere with a request for info about the array parameter.
26522
26523 2001-11-01  Ravi Pratap  <ravi@ximian.com>
26524
26525         * tree.cs (RecordNamespace): Fix up to check for the correct key.
26526
26527         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
26528         local_variable_type to extract the string corresponding to the type.
26529
26530         (local_variable_type): Fixup the action to use the new helper method.
26531
26532         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
26533         go.
26534
26535         * expression.cs : Clean out code which uses the above.
26536
26537 2001-10-31  Ravi Pratap  <ravi@ximian.com>
26538
26539         * typemanager.cs (RegisterMethod): Check if we already have an existing key
26540         and bale out if necessary by returning a false.
26541
26542         (RegisterProperty): Ditto.
26543
26544         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
26545         and print out appropriate error messages.
26546
26547         * interface.cs (everywhere): Ditto.
26548
26549         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
26550         location to constructor.
26551
26552         * class.cs (Property, Event, Indexer): Update accordingly.
26553
26554         * ../errors/cs111.cs : Added.
26555
26556         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
26557         of a method, as laid down by the spec.
26558
26559         (Invocation::OverloadResolve): Use the above method.
26560
26561 2001-10-31  Ravi Pratap  <ravi@ximian.com>
26562
26563         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
26564         now take a TypeContainer and a Parameters object.
26565
26566         (ParameterData): Modify return type of ParameterModifier method to be 
26567         Parameter.Modifier and not a string.
26568
26569         (ReflectionParameters, InternalParameters): Update accordingly.
26570
26571         * expression.cs (Argument::GetParameterModifier): Same here.
26572
26573         * support.cs (InternalParameters::ParameterType): Find a better way of determining
26574         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
26575         symbol in it at all so maybe this is only for now.
26576
26577 2001-10-30  Ravi Pratap  <ravi@ximian.com>
26578
26579         * support.cs (InternalParameters): Constructor now takes an extra argument 
26580         which is the actual Parameters class.
26581
26582         (ParameterDesc): Update to provide info on ref/out modifiers.
26583
26584         * class.cs (everywhere): Update call to InternalParameters to pass in
26585         the second argument too.
26586
26587         * support.cs (ParameterData): Add ParameterModifier, which is a method 
26588         to return the modifier info [ref/out etc]
26589
26590         (InternalParameters, ReflectionParameters): Implement the above.
26591
26592         * expression.cs (Argument::ParameterModifier): Similar function to return
26593         info about the argument's modifiers.
26594
26595         (Invocation::OverloadResolve): Update to take into account matching modifiers 
26596         too.
26597
26598         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
26599         a new SetFormalParameters object which we pass to InternalParameters.
26600
26601 2001-10-30  Ravi Pratap  <ravi@ximian.com>
26602
26603         * expression.cs (NewArray): Merge into the ArrayCreation class.
26604
26605 2001-10-29  Ravi Pratap  <ravi@ximian.com>
26606
26607         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
26608         NewUserdefinedArray into one as there wasn't much of a use in having
26609         two separate ones.
26610
26611         * expression.cs (Argument): Change field's name to ArgType from Type.
26612
26613         (Type): New readonly property which returns the proper type, taking into 
26614         account ref/out modifiers.
26615
26616         (everywhere): Adjust code accordingly for the above.
26617
26618         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
26619         whether we are emitting for a ref or out parameter.
26620
26621         * expression.cs (Argument::Emit): Use the above field to set the state.
26622
26623         (LocalVariableReference::Emit): Update to honour the flag and emit the
26624         right stuff.
26625
26626         * parameter.cs (Attributes): Set the correct flags for ref parameters.
26627
26628         * expression.cs (Argument::FullDesc): New function to provide a full desc.
26629
26630         * support.cs (ParameterData): Add method ParameterDesc to the interface.
26631
26632         (ReflectionParameters, InternalParameters): Implement the above method.
26633
26634         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
26635         reporting errors.
26636
26637         (Invocation::FullMethodDesc): Ditto. 
26638
26639 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
26640
26641         * cs-parser.jay: Add extra production for the second form of array
26642         creation. 
26643
26644         * expression.cs (ArrayCreation): Update to reflect the above
26645         change. 
26646
26647         * Small changes to prepare for Array initialization.
26648
26649 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
26650
26651         * typemanager.cs (ImplementsInterface): interface might be null;
26652         Deal with this problem;
26653
26654         Also, we do store negative hits on the cache (null values), so use
26655         this instead of calling t.GetInterfaces on the type everytime.
26656
26657 2001-10-28  Ravi Pratap  <ravi@ximian.com>
26658
26659         * typemanager.cs (IsBuiltinType): New method to help determine the same.
26660
26661         * expression.cs (New::DoResolve): Get rid of array creation code and instead
26662         split functionality out into different classes.
26663
26664         (New::FormArrayType): Move into NewBuiltinArray.
26665
26666         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
26667         quite useless.
26668
26669         (NewBuiltinArray): New class to handle creation of built-in arrays.
26670
26671         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
26672         account creation of one-dimensional arrays.
26673
26674         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
26675
26676         (NewUserdefinedArray::DoResolve): Implement.
26677
26678         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
26679
26680         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
26681         we maintain inside the TypeManager. This is necessary to perform lookups on the
26682         module builder.
26683
26684         (LookupType): Update to perform GetType on the module builders too.     
26685
26686         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
26687
26688         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
26689
26690 2001-10-23  Ravi Pratap  <ravi@ximian.com>
26691
26692         * expression.cs (New::DoResolve): Implement guts of array creation.
26693
26694         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
26695
26696 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
26697
26698         * expression.cs: Fix bug I introduced lsat night that broke
26699         Delegates. 
26700
26701         (Expression.Resolve): Report a 246 error (can not resolve name)
26702         if we find a SimpleName in the stream.
26703
26704         (Expression.ResolveLValue): Ditto.
26705
26706         (Expression.ResolveWithSimpleName): This function is a variant of
26707         ResolveName, this one allows SimpleNames to be returned without a
26708         warning.  The only consumer of SimpleNames is MemberAccess
26709
26710 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
26711
26712         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
26713         might arrive here.  I have my doubts that this is correct.
26714
26715         * statement.cs (Lock): Implement lock statement.
26716
26717         * cs-parser.jay: Small fixes to support `lock' and `using'
26718
26719         * cs-tokenizer.cs: Remove extra space
26720
26721         * driver.cs: New flag --checked, allows to turn on integer math
26722         checking. 
26723
26724         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
26725         Threading.Monitor.Exit 
26726
26727 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
26728
26729         * expression.cs (IndexerAccess::DoResolveLValue): Set the
26730         Expression Class to be IndexerAccess.
26731
26732         Notice that Indexer::DoResolve sets the eclass to Value.
26733
26734 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
26735
26736         * class.cs (TypeContainer::Emit): Emit code for indexers.
26737
26738         * assign.cs (IAssignMethod): New interface implemented by Indexers
26739         and Properties for handling assignment.
26740
26741         (Assign::Emit): Simplify and reuse code. 
26742
26743         * expression.cs (IndexerAccess, PropertyExpr): Implement
26744         IAssignMethod, clean up old code. 
26745
26746 2001-10-22  Ravi Pratap  <ravi@ximian.com>
26747
26748         * typemanager.cs (ImplementsInterface): New method to determine if a type
26749         implements a given interface. Provides a nice cache too.
26750
26751         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
26752         method.
26753
26754         (ConvertReferenceExplicit): Ditto.
26755
26756         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
26757         various methods, with correct names etc.
26758
26759         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
26760         Operator.UnaryNegation.
26761
26762         * cs-parser.jay (operator_declarator): Be a little clever in the case where
26763         we have a unary plus or minus operator.
26764
26765         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
26766         UnaryMinus.
26767
26768         * everywhere : update accordingly.
26769
26770         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
26771         respectively.
26772
26773         * class.cs (Method::Define): For the case where we are implementing a method
26774         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
26775         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
26776
26777 2001-10-21  Ravi Pratap  <ravi@ximian.com>
26778
26779         * interface.cs (FindMembers): Implement to work around S.R.E
26780         lameness.
26781
26782         * typemanager.cs (IsInterfaceType): Implement.
26783
26784         (FindMembers): Update to handle interface types too.
26785
26786         * expression.cs (ImplicitReferenceConversion): Re-write bits which
26787         use IsAssignableFrom as that is not correct - it doesn't work.
26788
26789         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
26790         and accordingly override EmitStatement.
26791
26792         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
26793         using the correct logic :-)
26794
26795 2001-10-19  Ravi Pratap  <ravi@ximian.com>
26796
26797         * ../errors/cs-11.cs : Add to demonstrate error -11 
26798
26799 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
26800
26801         * assign.cs (Assign::Resolve): Resolve right hand side first, and
26802         then pass this as a hint to ResolveLValue.
26803
26804         * expression.cs (FieldExpr): Add Location information
26805
26806         (FieldExpr::LValueResolve): Report assignment to readonly
26807         variable. 
26808
26809         (Expression::ExprClassFromMemberInfo): Pass location information.
26810
26811         (Expression::ResolveLValue): Add new method that resolves an
26812         LValue. 
26813
26814         (Expression::DoResolveLValue): Default invocation calls
26815         DoResolve. 
26816
26817         (Indexers): New class used to keep track of indexers in a given
26818         Type. 
26819
26820         (IStackStore): Renamed from LValue, as it did not really describe
26821         what this did.  Also ResolveLValue is gone from this interface and
26822         now is part of Expression.
26823
26824         (ElementAccess): Depending on the element access type
26825
26826         * typemanager.cs: Add `indexer_name_type' as a Core type
26827         (System.Runtime.CompilerServices.IndexerNameAttribute)
26828
26829         * statement.cs (Goto): Take a location.
26830
26831 2001-10-18  Ravi Pratap  <ravi@ximian.com>
26832
26833         * delegate.cs (Delegate::VerifyDelegate): New method to verify
26834         if two delegates are compatible.
26835
26836         (NewDelegate::DoResolve): Update to take care of the case when
26837         we instantiate a delegate from another delegate.
26838
26839         * typemanager.cs (FindMembers): Don't even try to look up members
26840         of Delegate types for now.
26841
26842 2001-10-18  Ravi Pratap  <ravi@ximian.com>
26843
26844         * delegate.cs (NewDelegate): New class to take care of delegate
26845         instantiation.
26846
26847         * expression.cs (New): Split the delegate related code out into 
26848         the NewDelegate class.
26849
26850         * delegate.cs (DelegateInvocation): New class to handle delegate 
26851         invocation.
26852
26853         * expression.cs (Invocation): Split out delegate related code into
26854         the DelegateInvocation class.
26855
26856 2001-10-17  Ravi Pratap  <ravi@ximian.com>
26857
26858         * expression.cs (New::DoResolve): Implement delegate creation fully
26859         and according to the spec.
26860
26861         (New::DoEmit): Update to handle delegates differently.
26862
26863         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
26864         because of which we were printing out arguments in reverse order !
26865
26866         * delegate.cs (VerifyMethod): Implement to check if the given method
26867         matches the delegate.
26868
26869         (FullDelegateDesc): Implement.
26870
26871         (VerifyApplicability): Implement.
26872
26873         * expression.cs (Invocation::DoResolve): Update to accordingly handle
26874         delegate invocations too.
26875
26876         (Invocation::Emit): Ditto.
26877
26878         * ../errors/cs1593.cs : Added.
26879
26880         * ../errors/cs1594.cs : Added.
26881
26882         * delegate.cs (InstanceExpression, TargetMethod): New properties.
26883
26884 2001-10-16  Ravi Pratap  <ravi@ximian.com>
26885
26886         * typemanager.cs (intptr_type): Core type for System.IntPtr
26887
26888         (InitCoreTypes): Update for the same.
26889
26890         (iasyncresult_type, asynccallback_type): Ditto.
26891
26892         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
26893         correct.
26894
26895         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
26896         too.
26897
26898         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
26899         the builders for the 4 members of a delegate type :-)
26900
26901         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
26902         type.
26903
26904         * expression.cs (New::DoResolve): Implement guts for delegate creation.
26905
26906         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
26907
26908 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
26909
26910         * statement.cs (Break::Emit): Implement.   
26911         (Continue::Emit): Implement.
26912
26913         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
26914         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
26915         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
26916         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
26917         end loop
26918
26919         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
26920         properties that track the label for the current loop (begin of the
26921         loop and end of the loop).
26922
26923 2001-10-15  Ravi Pratap  <ravi@ximian.com>
26924
26925         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
26926         use of emitting anything at all.
26927
26928         * class.cs, rootcontext.cs : Get rid of calls to the same.
26929
26930         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
26931
26932         (Populate): Define the constructor correctly and set the implementation
26933         attributes.
26934
26935         * typemanager.cs (delegate_types): New hashtable to hold delegates that
26936         have been defined.
26937
26938         (AddDelegateType): Implement.
26939
26940         (IsDelegateType): Implement helper method.
26941
26942         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
26943
26944         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
26945         and accordingly handle it.
26946
26947         * delegate.cs (Populate): Take TypeContainer argument.
26948         Implement bits to define the Invoke method. However, I still haven't figured out
26949         how to take care of the native int bit :-(
26950
26951         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
26952         Qualify the name of the delegate, not its return type !
26953
26954         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
26955         conversion.
26956
26957         (StandardConversionExists): Checking for array types turns out to be recursive.
26958
26959         (ConvertReferenceExplicit): Implement array conversion.
26960
26961         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
26962
26963 2001-10-12  Ravi Pratap  <ravi@ximian.com>
26964
26965         * cs-parser.jay (delegate_declaration): Store the fully qualified
26966         name as it is a type declaration.
26967
26968         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
26969         readonly.
26970
26971         (DefineDelegate): Renamed from Define. Does the same thing essentially,
26972         as TypeContainer::DefineType.
26973
26974         (Populate): Method in which all the definition of the various methods (Invoke)
26975         etc is done.
26976
26977         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
26978         see.
26979
26980         (CloseDelegate): Finally creates the delegate.
26981
26982         * class.cs (TypeContainer::DefineType): Update to define delegates.
26983         (Populate, Emit and CloseType): Do the same thing here too.
26984
26985         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
26986         delegates in all these operations.
26987
26988 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
26989
26990         * expression.cs: LocalTemporary: a new expression used to
26991         reference a temporary that has been created.
26992
26993         * assign.cs: Handle PropertyAccess back here, so that we can
26994         provide the proper semantic access to properties.
26995
26996         * expression.cs (Expression::ConvertReferenceExplicit): Implement
26997         a few more explicit conversions. 
26998
26999         * modifiers.cs: `NEW' modifier maps to HideBySig.
27000
27001         * expression.cs (PropertyExpr): Make this into an
27002         ExpressionStatement, and support the EmitStatement code path. 
27003
27004         Perform get/set error checking, clean up the interface.
27005
27006         * assign.cs: recognize PropertyExprs as targets, and if so, turn
27007         them into toplevel access objects.
27008
27009 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
27010
27011         * expression.cs: PropertyExpr::PropertyExpr: use work around the
27012         SRE.
27013
27014         * typemanager.cs: Keep track here of our PropertyBuilders again to
27015         work around lameness in SRE.
27016
27017 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
27018
27019         * expression.cs (LValue::LValueResolve): New method in the
27020         interface, used to perform a second resolution pass for LValues. 
27021
27022         (This::DoResolve): Catch the use of this in static methods.
27023
27024         (This::LValueResolve): Implement.
27025
27026         (This::Store): Remove warning, assigning to `this' in structures
27027         is 
27028
27029         (Invocation::Emit): Deal with invocation of
27030         methods on value types.  We need to pass the address to structure
27031         methods rather than the object itself.  (The equivalent code to
27032         emit "this" for structures leaves the entire structure on the
27033         stack instead of a pointer to it). 
27034
27035         (ParameterReference::DoResolve): Compute the real index for the
27036         argument based on whether the method takes or not a `this' pointer
27037         (ie, the method is static).
27038
27039         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
27040         value types returned from functions when we need to invoke a
27041         method on the sturcture.
27042
27043
27044 2001-10-11  Ravi Pratap  <ravi@ximian.com>
27045
27046         * class.cs (TypeContainer::DefineType): Method to actually do the business of
27047         defining the type in the Modulebuilder or Typebuilder. This is to take
27048         care of nested types which need to be defined on the TypeBuilder using
27049         DefineNestedMethod.
27050
27051         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
27052         methods in RootContext, only ported to be part of TypeContainer.
27053
27054         (TypeContainer::GetInterfaceOrClass): Ditto.
27055
27056         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
27057
27058         * interface.cs (Interface::DefineInterface): New method. Does exactly
27059         what RootContext.CreateInterface did earlier, only it takes care of nested types 
27060         too.
27061
27062         (Interface::GetInterfaces): Move from RootContext here and port.
27063
27064         (Interface::GetInterfaceByName): Same here.
27065
27066         * rootcontext.cs (ResolveTree): Re-write.
27067
27068         (PopulateTypes): Re-write.
27069
27070         * class.cs (TypeContainer::Populate): Populate nested types too.
27071         (TypeContainer::Emit): Emit nested members too.
27072
27073         * typemanager.cs (AddUserType): Do not make use of the FullName property,
27074         instead just use the name argument passed in as it is already fully
27075         qualified.
27076
27077         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
27078         to TypeContainer mapping to see if a type is user-defined.
27079
27080         * class.cs (TypeContainer::CloseType): Implement. 
27081
27082         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
27083         the default constructor.
27084
27085         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
27086         twice.
27087
27088         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
27089
27090         * interface.cs (CloseType): Create the type here.
27091
27092         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
27093         the hierarchy.
27094
27095         Remove all the methods which are now in TypeContainer.
27096
27097 2001-10-10  Ravi Pratap  <ravi@ximian.com>
27098
27099         * delegate.cs (Define): Re-write bits to define the delegate
27100         correctly.
27101
27102 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
27103
27104         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
27105
27106         * expression.cs (ImplicitReferenceConversion): handle null as well
27107         as a source to convert to any reference type.
27108
27109         * statement.cs (Return): Perform any implicit conversions to
27110         expected return type.  
27111
27112         Validate use of return statement.  
27113
27114         * codegen.cs (EmitContext): Pass the expected return type here.
27115
27116         * class.cs (Method, Constructor, Property): Pass expected return
27117         type to EmitContext.
27118
27119 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
27120
27121         * expression.cs: Make DoResolve take an EmitContext instead of a
27122         TypeContainer.
27123
27124         Replaced `l' and `location' for `loc', for consistency.
27125
27126         (Error, Warning): Remove unneeded Tc argument.
27127
27128         * assign.cs, literal.cs, constant.cs: Update to new calling
27129         convention. 
27130
27131         * codegen.cs: EmitContext now contains a flag indicating whether
27132         code is being generated in a static method or not.
27133
27134         * cs-parser.jay: DecomposeQI, new function that replaces the old
27135         QualifiedIdentifier.  Now we always decompose the assembled
27136         strings from qualified_identifier productions into a group of
27137         memberaccesses.
27138
27139 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
27140
27141         * rootcontext.cs: Deal with field-less struct types correctly now
27142         by passing the size option to Define Type.
27143
27144         * class.cs: Removed hack that created one static field. 
27145
27146 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
27147
27148         * statement.cs: Moved most of the code generation here. 
27149
27150 2001-10-09  Ravi Pratap  <ravi@ximian.com>
27151
27152         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
27153         seem very right.
27154
27155         (ElementAccess): Remove useless bits for now - keep checks as the spec
27156         says.
27157
27158 2001-10-08  Ravi Pratap  <ravi@ximian.com>
27159
27160         * expression.cs (ElementAccess::DoResolve): Remove my crap code
27161         and start performing checks according to the spec.
27162
27163 2001-10-07  Ravi Pratap  <ravi@ximian.com>
27164
27165         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
27166         rank_specifiers instead.
27167
27168         (rank_specifiers): Change the order in which the rank specifiers are stored
27169
27170         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
27171
27172         * expression.cs (ElementAccess): Implement the LValue interface too.
27173
27174 2001-10-06  Ravi Pratap  <ravi@ximian.com>
27175
27176         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
27177         except that user defined conversions are not included.
27178
27179         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
27180         perform the conversion of the return type, if necessary.
27181
27182         (New::DoResolve): Check whether we are creating an array or an object
27183         and accordingly do the needful.
27184
27185         (New::Emit): Same here.
27186
27187         (New::DoResolve): Implement guts of array creation.
27188
27189         (New::FormLookupType): Helper function.
27190
27191 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
27192
27193         * codegen.cs: Removed most of the code generation here, and move the
27194         corresponding code generation bits to the statement classes. 
27195
27196         Added support for try/catch/finalize and throw.
27197
27198         * cs-parser.jay: Added support for try/catch/finalize.
27199
27200         * class.cs: Catch static methods having the flags override,
27201         virtual or abstract.
27202
27203         * expression.cs (UserCast): This user cast was not really doing
27204         what it was supposed to do.  Which is to be born in fully resolved
27205         state.  Parts of the resolution were being performed at Emit time! 
27206
27207         Fixed this code.
27208
27209 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
27210
27211         * expression.cs: Implicity convert the result from UserCast.
27212
27213 2001-10-05  Ravi Pratap  <ravi@ximian.com>
27214
27215         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
27216         prevented it from working correctly. 
27217
27218         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
27219         merely ConvertImplicit.
27220
27221 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
27222
27223         * typemanager.cs: Make the LookupTypeContainer function static,
27224         and not per-instance.  
27225
27226         * class.cs: Make static FindMembers (the one that takes a Type
27227         argument). 
27228
27229         * codegen.cs: Add EmitForeach here.
27230
27231         * cs-parser.jay: Make foreach a toplevel object instead of the
27232         inline expansion, as we need to perform semantic analysis on it. 
27233
27234 2001-10-05  Ravi Pratap  <ravi@ximian.com>
27235
27236         * expression.cs (Expression::ImplicitUserConversion): Rename to
27237         UserDefinedConversion.
27238
27239         (Expression::UserDefinedConversion): Take an extra argument specifying 
27240         whether we look for explicit user conversions too.
27241
27242         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
27243
27244         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
27245
27246         (ExplicitUserConversion): Make it a call to UserDefinedConversion
27247         with the appropriate arguments.
27248
27249         * cs-parser.jay (cast_expression): Record location too.
27250
27251         * expression.cs (Cast): Record location info.
27252
27253         (Expression::ConvertExplicit): Take location argument.
27254
27255         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
27256         to determine if we are doing explicit conversions.
27257
27258         (UserCast::Emit): Update accordingly.
27259
27260         (Expression::ConvertExplicit): Report an error if everything fails.
27261
27262         * ../errors/cs0030.cs : Add.
27263
27264 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
27265
27266         * modifiers.cs: If the ABSTRACT keyword is present, also set the
27267         virtual and newslot bits. 
27268
27269         * class.cs (TypeContainer::RegisterRequiredImplementations):
27270         Record methods we need.
27271
27272         (TypeContainer::MakeKey): Helper function to make keys for
27273         MethodBases, since the Methodbase key is useless.
27274
27275         (TypeContainer::Populate): Call RegisterRequiredImplementations
27276         before defining the methods.   
27277
27278         Create a mapping for method_builders_to_methods ahead of time
27279         instead of inside a tight loop.
27280
27281         (::RequireMethods):  Accept an object as the data to set into the
27282         hashtable so we can report interface vs abstract method mismatch.
27283
27284 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
27285
27286         * report.cs: Make all of it static.
27287
27288         * rootcontext.cs: Drop object_type and value_type computations, as
27289         we have those in the TypeManager anyways.
27290
27291         Drop report instance variable too, now it is a global.
27292
27293         * driver.cs: Use try/catch on command line handling.
27294
27295         Add --probe option to debug the error reporting system with a test
27296         suite. 
27297
27298         * report.cs: Add support for exiting program when a probe
27299         condition is reached.
27300
27301 2001-10-03  Ravi Pratap  <ravi@ximian.com>
27302
27303         * expression.cs (Binary::DoNumericPromotions): Fix the case when
27304         we do a forcible conversion regardless of type, to check if 
27305         ForceConversion returns a null.
27306
27307         (Binary::error19): Use location to report error.
27308
27309         (Unary::error23): Use location here too.
27310
27311         * ../errors/cs0019.cs : Check in.
27312
27313         * ../errors/cs0023.cs : Check in.
27314
27315         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
27316         case of a non-null MethodInfo object with a length of 0 !
27317
27318         (Binary::ResolveOperator): Flag error if overload resolution fails to find
27319         an applicable member - according to the spec :-)
27320         Also fix logic to find members in base types.
27321
27322         (Unary::ResolveOperator): Same here.
27323
27324         (Unary::report23): Change name to error23 and make first argument a TypeContainer
27325         as I was getting thoroughly confused between this and error19 :-)
27326
27327         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
27328         (::FindMostEncompassedType): Implement.
27329         (::FindMostEncompassingType): Implement.
27330         (::StandardConversionExists): Implement.
27331
27332         (UserImplicitCast): Re-vamp. We now need info about most specific
27333         source and target types so that we can do the necessary conversions.
27334
27335         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
27336         mathematical union with no duplicates.
27337
27338 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
27339
27340         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
27341         in order from base classes to child classes, so that we can in
27342         child classes look up in our parent for method names and
27343         attributes (required for handling abstract, virtual, new, override
27344         constructs: we need to instrospect our base class, and if we dont
27345         populate the classes in order, the introspection might be
27346         incorrect.  For example, a method could query its parent before
27347         the parent has any methods and would determine that the parent has
27348         no abstract methods (while it could have had them)).
27349
27350         (RootContext::CreateType): Record the order in which we define the
27351         classes.
27352
27353 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
27354
27355         * class.cs (TypeContainer::Populate): Also method definitions can
27356         fail now, keep track of this.
27357
27358         (TypeContainer::FindMembers): Implement support for
27359         DeclaredOnly/noDeclaredOnly flag.
27360
27361         (Constructor::Emit) Return the ConstructorBuilder.
27362
27363         (Method::Emit) Return the MethodBuilder. 
27364         Check for abstract or virtual methods to be public.
27365
27366         * rootcontext.cs (RootContext::CreateType): Register all the
27367         abstract methods required for the class to be complete and the
27368         interface methods that must be implemented. 
27369
27370         * cs-parser.jay: Report error 501 (method requires body if it is
27371         not marked abstract or extern).
27372
27373         * expression.cs (TypeOf::Emit): Implement.
27374
27375         * typemanager.cs: runtime_handle_type, new global type.
27376
27377         * class.cs (Property::Emit): Generate code for properties.
27378
27379 2001-10-02  Ravi Pratap  <ravi@ximian.com>
27380
27381         * expression.cs (Unary::ResolveOperator): Find operators on base type
27382         too - we now conform exactly to the spec.
27383
27384         (Binary::ResolveOperator): Same here.
27385
27386         * class.cs (Operator::Define): Fix minor quirk in the tests.
27387
27388         * ../errors/cs0215.cs : Added.
27389
27390         * ../errors/cs0556.cs : Added.
27391
27392         * ../errors/cs0555.cs : Added.
27393
27394 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
27395
27396         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
27397         single integer which is really efficient
27398
27399 2001-10-01  Ravi Pratap  <ravi@ximian.com>
27400
27401         *  expression.cs (Expression::ImplicitUserConversion): Use location
27402         even in the case when we are examining True operators.
27403  
27404         * class.cs (Operator::Define): Perform extensive checks to conform
27405         with the rules for operator overloading in the spec.
27406
27407         * expression.cs (Expression::ImplicitReferenceConversion): Implement
27408         some of the other conversions mentioned in the spec.
27409
27410         * typemanager.cs (array_type): New static member for the System.Array built-in
27411         type.
27412
27413         (cloneable_interface): For System.ICloneable interface.
27414
27415         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
27416         we start resolving the tree and populating types.
27417
27418         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
27419  
27420 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
27421
27422         * expression.cs (Expression::ExprClassFromMemberInfo,
27423         Expression::Literalize): Create literal expressions from
27424         FieldInfos which are literals.
27425
27426         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
27427         type casts, because they were wrong.  The test suite in tests
27428         caught these ones.
27429
27430         (ImplicitNumericConversion): ushort to ulong requires a widening
27431         cast. 
27432
27433         Int32 constant to long requires widening cast as well.
27434
27435         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
27436         for integers because the type on the stack is not i4.
27437
27438 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
27439
27440         * expression.cs (report118): require location argument. 
27441
27442         * parameter.cs: Do not dereference potential null value.
27443
27444         * class.cs: Catch methods that lack the `new' keyword when
27445         overriding a name.  Report warnings when `new' is used without
27446         anything being there to override.
27447
27448         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
27449
27450         * class.cs: Only add constructor to hashtable if it is non-null
27451         (as now constructors can fail on define).
27452
27453         (TypeManager, Class, Struct): Take location arguments.
27454
27455         Catch field instance initialization in structs as errors.
27456
27457         accepting_filter: a new filter for FindMembers that is static so
27458         that we dont create an instance per invocation.
27459
27460         (Constructor::Define): Catch errors where a struct constructor is
27461         parameterless 
27462
27463         * cs-parser.jay: Pass location information for various new
27464         constructs. 
27465
27466         * delegate.cs (Delegate): take a location argument.
27467
27468         * driver.cs: Do not call EmitCode if there were problesm in the
27469         Definition of the types, as many Builders wont be there. 
27470
27471         * decl.cs (Decl::Decl): Require a location argument.
27472
27473         * cs-tokenizer.cs: Handle properly hex constants that can not fit
27474         into integers, and find the most appropiate integer for it.
27475
27476         * literal.cs: Implement ULongLiteral.
27477
27478         * rootcontext.cs: Provide better information about the location of
27479         failure when CreateType fails.
27480
27481 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
27482
27483         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
27484         as well.
27485
27486         * expression.cs (Binary::CheckShiftArguments): Add missing type
27487         computation.
27488         (Binary::ResolveOperator): Add type to the logical and and logical
27489         or, Bitwise And/Or and Exclusive Or code paths, it was missing
27490         before.
27491
27492         (Binary::DoNumericPromotions): In the case where either argument
27493         is ulong (and most signed types combined with ulong cause an
27494         error) perform implicit integer constant conversions as well.
27495
27496 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
27497
27498         * expression.cs (UserImplicitCast): Method should always be
27499         non-null. 
27500         (Invocation::BetterConversion): Simplified test for IntLiteral.
27501
27502         (Expression::ImplicitNumericConversion): Split this routine out.
27503         Put the code that performs implicit constant integer conversions
27504         here. 
27505
27506         (Expression::Resolve): Become a wrapper around DoResolve so we can
27507         check eclass and type being set after resolve.
27508
27509         (Invocation::Badness): Remove this dead function
27510
27511         (Binary::ResolveOperator): Do not compute the expensive argumnets
27512         unless we have a union for it.
27513
27514         (Probe::Emit): Is needs to do an isinst and then
27515         compare against null.
27516
27517         (::CanConvert): Added Location argument.  If the Location argument
27518         is null (Location.Null), then we do not report errors.  This is
27519         used by the `probe' mechanism of the Explicit conversion.  We do
27520         not want to generate an error for something that the user
27521         explicitly requested to be casted.  But the pipeline for an
27522         explicit cast first tests for potential implicit casts.
27523
27524         So for now, if the Location is null, it means `Probe only' to
27525         avoid adding another argument.   Might have to revise this
27526         strategy later.
27527
27528         (ClassCast): New class used to type cast objects into arbitrary
27529         classes (used in Explicit Reference Conversions).
27530
27531         Implement `as' as well.
27532
27533         Reverted all the patches from Ravi below: they were broken:
27534
27535                 * The use of `level' as a mechanism to stop recursive
27536                   invocations is wrong.  That was there just to catch the
27537                   bug with a strack trace but not as a way of addressing
27538                   the problem.
27539
27540                   To fix the problem we have to *understand* what is going
27541                   on and the interactions and come up with a plan, not
27542                   just get things going.
27543
27544                 * The use of the type conversion cache that I proposed
27545                   last night had an open topic: How does this work across
27546                   protection domains.  A user defined conversion might not
27547                   be public in the location where we are applying the
27548                   conversion, a different conversion might be selected
27549                   (ie, private A->B (better) but public B->A (worse),
27550                   inside A, A->B applies, but outside it, B->A will
27551                   apply).
27552
27553                 * On top of that (ie, even if the above is solved),
27554                   conversions in a cache need to be abstract.  Ie, `To
27555                   convert from an Int to a Short use an OpcodeCast', not
27556                   `To convert from an Int to a Short use the OpcodeCast on
27557                   the variable 5' (which is what this patch was doing).
27558
27559 2001-09-28  Ravi Pratap  <ravi@ximian.com>
27560
27561         * expression.cs (Invocation::ConversionExists): Re-write to use
27562         the conversion cache
27563
27564         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
27565         cache all conversions done, not just user-defined ones.
27566
27567         (Invocation::BetterConversion): The real culprit. Use ConversionExists
27568         to determine if a conversion exists instead of acutually trying to 
27569         perform the conversion. It's faster too.
27570
27571         (Expression::ConvertExplicit): Modify to use ConversionExists to check
27572         and only then attempt the implicit conversion.
27573
27574 2001-09-28  Ravi Pratap  <ravi@ximian.com>
27575
27576         * expression.cs (ConvertImplicit): Use a cache for conversions
27577         already found. Check level of recursion and bail out if necessary.
27578
27579 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
27580
27581         * typemanager.cs (string_concat_string_string, string_concat_object_object):
27582         Export standard methods that we expect for string operations.
27583
27584         * statement.cs (Block::UsageWarning): Track usage of variables and
27585         report the errors for not used variables.
27586
27587         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
27588         operator. 
27589
27590 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
27591
27592         * codegen.cs: remove unnneded code 
27593
27594         * expression.cs: Removed BuiltinTypeAccess class
27595
27596         Fix the order in which implicit conversions are
27597         done.  
27598
27599         The previous fixed dropped support for boxed conversions (adding a
27600         test to the test suite now)
27601
27602         (UserImplicitCast::CanConvert): Remove test for source being null,
27603         that code is broken.  We should not feed a null to begin with, if
27604         we do, then we should track the bug where the problem originates
27605         and not try to cover it up here.
27606
27607         Return a resolved expression of type UserImplicitCast on success
27608         rather than true/false.  Ravi: this is what I was talking about,
27609         the pattern is to use a static method as a "constructor" for
27610         objects. 
27611
27612         Also, do not create arguments until the very last minute,
27613         otherwise we always create the arguments even for lookups that
27614         will never be performed. 
27615
27616         (UserImplicitCast::Resolve): Eliminate, objects of type
27617         UserImplicitCast are born in a fully resolved state. 
27618
27619         * typemanager.cs (InitCoreTypes): Init also value_type
27620         (System.ValueType). 
27621
27622         * expression.cs (Cast::Resolve): First resolve the child expression.
27623
27624         (LValue): Add new method AddressOf to be used by
27625         the `&' operator.  
27626
27627         Change the argument of Store to take an EmitContext instead of an
27628         ILGenerator, because things like FieldExpr need to be able to call
27629         their children expression to generate the instance code. 
27630
27631         (Expression::Error, Expression::Warning): Sugar functions for
27632         reporting errors.
27633
27634         (Expression::MemberLookup): Accept a TypeContainer instead of a
27635         Report as the first argument.
27636
27637         (Expression::ResolvePrimary): Killed.  I still want to improve
27638         this as currently the code is just not right.
27639
27640         (Expression::ResolveMemberAccess): Simplify, but it is still
27641         wrong. 
27642
27643         (Unary::Resolve): Catch errors in AddressOf operators.
27644
27645         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
27646         index to a byte for the short-version, or the compiler will choose
27647         the wrong Emit call, which generates the wrong data.
27648
27649         (ParameterReference::Emit, ::Store): same.
27650
27651         (FieldExpr::AddressOf): Implement.
27652
27653         * typemanager.cs: TypeManager: made public variable instead of
27654         property.
27655
27656         * driver.cs: document --fatal.
27657
27658         * report.cs (ErrorMessage, WarningMessage): new names for the old
27659         Error and Warning classes.
27660
27661         * cs-parser.jay (member_access): Turn built-in access to types
27662         into a normal simplename
27663
27664 2001-09-27  Ravi Pratap  <ravi@ximian.com>
27665
27666         * expression.cs (Invocation::BetterConversion): Fix to cope
27667         with q being null, since this was introducing a bug.
27668
27669         * expression.cs (ConvertImplicit): Do built-in conversions first.
27670
27671 2001-09-27  Ravi Pratap  <ravi@ximian.com>
27672
27673         * expression.cs (UserImplicitCast::Resolve): Fix bug.
27674
27675 2001-09-27  Ravi Pratap  <ravi@ximian.com>
27676
27677         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
27678         I had introduced long ago (what's new ?).
27679
27680         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
27681         the work of all the checking. 
27682         (ConvertImplicit): Call CanConvert and only then create object if necessary.
27683         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
27684
27685         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
27686         that is the right way. 
27687
27688         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
27689         overloading resolution. Use everywhere instead of cutting and pasting code.
27690
27691         (Binary::ResolveOperator): Use MakeUnionSet.
27692
27693         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
27694         we have to convert to bool types. Not complete yet.
27695
27696 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
27697
27698         * typemanager.cs (TypeManager::CSharpName): support ushort.
27699
27700         * expression.cs (Expression::TryImplicitIntConversion): Attempts
27701         to provide an expression that performsn an implicit constant int
27702         conversion (section 6.1.6).
27703         (Expression::ConvertImplicitRequired): Reworked to include
27704         implicit constant expression conversions.
27705
27706         (Expression::ConvertNumericExplicit): Finished.
27707
27708         (Invocation::Emit): If InstanceExpression is null, then it means
27709         that we perform a call on this.
27710
27711 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
27712
27713         * expression.cs (Unary::Emit): Remove some dead code.
27714         (Probe): Implement Resolve and Emit for `is'.
27715         (Expression::ConvertImplicitRequired): Attempt to do constant
27716         expression conversions here.  Maybe should be moved to
27717         ConvertImplicit, but I am not sure.
27718         (Expression::ImplicitLongConstantConversionPossible,
27719         Expression::ImplicitIntConstantConversionPossible): New functions
27720         that tell whether is it possible to apply an implicit constant
27721         expression conversion.
27722
27723         (ConvertNumericExplicit): Started work on explicit numeric
27724         conversions.
27725
27726         * cs-parser.jay: Update operator constants.
27727
27728         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
27729         (Parameters::GetSignature): Hook up VerifyArgs here.
27730         (Parameters::VerifyArgs): Verifies that no two arguments have the
27731         same name. 
27732
27733         * class.cs (Operator): Update the operator names to reflect the
27734         ones that the spec expects (as we are just stringizing the
27735         operator names).
27736
27737         * expression.cs (Unary::ResolveOperator): Fix bug: Use
27738         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
27739         previous usage did only work for our methods.
27740         (Expression::ConvertImplicit): Handle decimal implicit numeric
27741         conversions as well.
27742         (Expression::InternalTypeConstructor): Used to invoke constructors
27743         on internal types for default promotions.
27744
27745         (Unary::Emit): Implement special handling for the pre/post
27746         increment/decrement for overloaded operators, as they need to have
27747         the same semantics as the other operators.
27748
27749         (Binary::ResolveOperator): ditto.
27750         (Invocation::ConversionExists): ditto.
27751         (UserImplicitCast::Resolve): ditto.
27752
27753 2001-09-26  Ravi Pratap  <ravi@ximian.com>
27754
27755         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
27756         operator, return after emitting body. Regression tests pass again !
27757
27758         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
27759         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
27760         (Invocation::OverloadResolve): Ditto.
27761         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
27762
27763         * everywhere : update calls to the above methods accordingly.
27764
27765 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
27766
27767         * assign.cs (Assign): Make it inherit from ExpressionStatement.
27768
27769         * expression.cs (ExpressionStatement): New base class used for
27770         expressions that can appear in statements, so that we can provide
27771         an alternate path to generate expression that do not leave a value
27772         on the stack.
27773
27774         (Expression::Emit, and all the derivatives): We no longer return
27775         whether a value is left on the stack or not.  Every expression
27776         after being emitted leaves a single value on the stack.
27777
27778         * codegen.cs (EmitContext::EmitStatementExpression): Use the
27779         facilties of ExpressionStatement if possible.
27780
27781         * cs-parser.jay: Update statement_expression.
27782
27783 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
27784
27785         * driver.cs: Change the wording of message
27786
27787 2001-09-25  Ravi Pratap  <ravi@ximian.com>
27788
27789         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
27790         the type of the expression to the return type of the method if
27791         we have an overloaded operator match ! The regression tests pass again !
27792         (Unary::ResolveOperator): Ditto.
27793
27794         * expression.cs (Invocation::ConversionExists): Correct the member lookup
27795         to find "op_Implicit", not "implicit" ;-)
27796         (UserImplicitCast): New class to take care of user-defined implicit conversions.
27797         (ConvertImplicit, ForceConversion): Take TypeContainer argument
27798
27799         * everywhere : Correct calls to the above accordingly.
27800
27801         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
27802         (ConvertImplicit): Do user-defined conversion if it exists.
27803
27804 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
27805
27806         * assign.cs: track location.
27807         (Resolve): Use implicit conversions on assignment.
27808
27809         * literal.cs: Oops.  Not good, Emit of short access values should
27810         pass (Bytes) or the wrong argument will be selected.
27811
27812         * expression.cs (Unary::Emit): Emit code for -expr.
27813
27814         (Unary::ResolveOperator): Handle `Substract' for non-constants
27815         (substract from zero from the non-constants).
27816         Deal with Doubles as well. 
27817
27818         (Expression::ConvertImplicitRequired): New routine that reports an
27819         error if no implicit conversion exists. 
27820
27821         (Invocation::OverloadResolve): Store the converted implicit
27822         expressions if we make them
27823
27824 2001-09-24  Ravi Pratap  <ravi@ximian.com>
27825
27826         * class.cs (ConstructorInitializer): Take a Location argument.
27827         (ConstructorBaseInitializer): Same here.
27828         (ConstructorThisInitializer): Same here.
27829
27830         * cs-parser.jay : Update all calls accordingly.
27831
27832         * expression.cs (Unary, Binary, New): Take location argument.
27833         Update accordingly everywhere.
27834
27835         * cs-parser.jay : Update all calls to the above to take a location
27836         argument.
27837
27838         * class.cs : Ditto.
27839
27840 2001-09-24  Ravi Pratap  <ravi@ximian.com>
27841
27842         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
27843         (Invocation::BetterConversion): Same here
27844         (Invocation::ConversionExists): Ditto.
27845
27846         (Invocation::ConversionExists): Implement.
27847
27848 2001-09-22  Ravi Pratap  <ravi@ximian.com>
27849
27850         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
27851         Also take an additional TypeContainer argument.
27852
27853         * All over : Pass in TypeContainer as argument to OverloadResolve.
27854
27855         * typemanager.cs (CSharpName): Update to check for the string type and return
27856         that too.
27857
27858         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
27859         a given method.
27860
27861 2001-09-21  Ravi Pratap  <ravi@ximian.com>
27862
27863         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
27864         (Invocation::BetterFunction): Implement.
27865         (Invocation::BetterConversion): Implement.
27866         (Invocation::ConversionExists): Skeleton, no implementation yet.
27867
27868         Okay, things work fine !
27869
27870 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
27871
27872         * typemanager.cs: declare and load enum_type, delegate_type and
27873         void_type. 
27874
27875         * expression.cs (Expression::Emit): Now emit returns a value that
27876         tells whether a value is left on the stack or not.  This strategy
27877         might be reveted tomorrow with a mechanism that would address
27878         multiple assignments.
27879         (Expression::report118): Utility routine to report mismatches on
27880         the ExprClass.
27881
27882         (Unary::Report23): Report impossible type/operator combination
27883         utility function.
27884
27885         (Unary::IsIncrementableNumber): Whether the type can be
27886         incremented or decremented with add.
27887         (Unary::ResolveOperator): Also allow enumerations to be bitwise
27888         complemented. 
27889         (Unary::ResolveOperator): Implement ++, !, ~,
27890
27891         (Invocation::Emit): Deal with new Emit convetion.
27892
27893         * All Expression derivatives: Updated their Emit method to return
27894         whether they leave values on the stack or not.
27895
27896         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
27897         stack for expressions that are statements. 
27898
27899 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
27900
27901         * expression.cs (LValue): New interface.  Must be implemented by
27902         LValue objects.
27903         (LocalVariableReference, ParameterReference, FieldExpr): Implement
27904         LValue interface.
27905
27906         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
27907         interface for generating code, simplifies the code.
27908
27909 2001-09-20  Ravi Pratap  <ravi@ximian.com>
27910
27911         * expression.cs (everywhere): Comment out return statements in ::Resolve
27912         methods to avoid the warnings.
27913
27914 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
27915
27916         * driver.cs (parse): Report error 2001 if we can not open the
27917         source file.
27918
27919         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
27920         not resolve it.
27921
27922         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
27923         object. 
27924
27925         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
27926         otherwise nested blocks end up with the same index.
27927
27928         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
27929
27930         * expression.cs:  Instead of having FIXMEs in the Resolve
27931         functions, throw exceptions so it is obvious that we are facing a
27932         bug. 
27933
27934         * cs-parser.jay (invocation_expression): Pass Location information.
27935
27936         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
27937         Use a basename for those routines because .NET does not like paths
27938         on them. 
27939
27940         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
27941         already defined.
27942
27943 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
27944
27945         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
27946         are loading the correct data types (throws an exception if not).
27947         (TypeManager::InitCoreTypes): Use CoreLookupType
27948
27949         * expression.cs (Unary::ResolveOperator): return the child
27950         expression for expressions which are just +expr.
27951         (Unary::ResolveOperator): Return negative literals for -LITERAL
27952         expressions (otherwise they are Unary {Literal}).
27953         (Invocation::Badness): Take into account `Implicit constant
27954         expression conversions'.
27955
27956         * literal.cs (LongLiteral): Implement long literal class.
27957         (IntLiteral): export the `Value' of the intliteral. 
27958
27959 2001-09-19  Ravi Pratap  <ravi@ximian.com>
27960
27961         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
27962
27963         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
27964         instead of 'Operator'
27965
27966         * expression.cs (Binary::ResolveOperator): Update accordingly.
27967         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
27968         and 'Minus'
27969
27970         * cs-parser.jay (unary_expression): Update to use the new names.
27971
27972         * gen-treedump.cs (GetUnary): Same here.
27973
27974         * expression.cs (Unary::Resolve): Implement.
27975         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
27976         operators are found instead of making noise ;-)
27977         (Unary::ResolveOperator): New method to do precisely the same thing which
27978         Binary::ResolveOperator does for Binary expressions.
27979         (Unary.method, .Arguments): Add.
27980         (Unary::OperName): Implement.   
27981         (Unary::ForceConversion): Copy and Paste !
27982
27983         * class.cs (Operator::Define): Fix a small bug for the case when we have 
27984         a unary operator.
27985
27986         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
27987         for the inbuilt operators. Only overloading works for now ;-)
27988
27989 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
27990
27991         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
27992         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
27993
27994         * expression.cs (This::Emit): Implement. 
27995         (This::Resolve): Implement.
27996         (TypeOf:Resolve): Implement.
27997         (Expression::ResolveSimpleName): Add an implicit this to instance
27998         field references. 
27999         (MemberAccess::Resolve): Deal with Parameters and Fields. 
28000         Bind instance variable to Field expressions.
28001         (FieldExpr::Instance): New field used to track the expression that
28002         represents the object instance.
28003         (FieldExpr::Resolve): Track potential errors from MemberLookup not
28004         binding 
28005         (FieldExpr::Emit): Implement.
28006
28007         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
28008         the last instruction contains a return opcode to avoid generating
28009         the last `ret' instruction (this generates correct code, and it is
28010         nice to pass the peverify output).
28011
28012         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
28013         initializer for static and instance variables.
28014         (Constructor::Emit): Allow initializer to be null in the case of
28015         static constructors.  Only emit initializer for instance
28016         constructors. 
28017
28018         (TypeContainer::FindMembers): Return a null array if there are no
28019         matches.
28020
28021         Also fix the code for the MemberTypes.Method branch, as it was not
28022         scanning that for operators (or tried to access null variables before).
28023
28024         * assign.cs (Assign::Emit): Handle instance and static fields. 
28025
28026         * TODO: Updated.
28027
28028         * driver.cs: Stop compilation if there are parse errors.
28029
28030         * cs-parser.jay (constructor_declaration): Provide default base
28031         initializer for non-static constructors.
28032         (constructor_declarator): Do not provide a default base
28033         initializers if none was specified.
28034         Catch the fact that constructors should not have parameters.
28035
28036         * class.cs: Do not emit parent class initializers for static
28037         constructors, that should be flagged as an error.
28038
28039 2001-09-18  Ravi Pratap  <ravi@ximian.com>
28040
28041         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
28042         Move back code into TypeContainer::Populate.
28043
28044 2001-09-18  Ravi Pratap  <ravi@ximian.com>
28045
28046         * class.cs (TypeContainer::AddConstructor): Fix the check to
28047         compare against Name, not Basename. 
28048         (Operator::OpType): Change Plus and Minus to Add and Subtract.
28049
28050         * cs-parser.jay : Update accordingly.
28051
28052         * class.cs (TypeContainer::FindMembers): For the case where we are searching
28053         for methods, don't forget to look into the operators too.
28054         (RegisterMethodBuilder): Helper method to take care of this for
28055         methods, constructors and operators.
28056         (Operator::Define): Completely revamp.
28057         (Operator.OperatorMethod, MethodName): New fields.
28058         (TypeContainer::Populate): Move the registering of builders into
28059         RegisterMethodBuilder.
28060         (Operator::Emit): Re-write.
28061
28062         * expression.cs (Binary::Emit): Comment out code path to emit method
28063         invocation stuff for the case when we have a user defined operator. I am
28064         just not able to get it right !
28065
28066 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
28067
28068         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
28069         argument. 
28070
28071         (Expression::MemberLookup): Provide a version that allows to
28072         specify the MemberTypes and BindingFlags. 
28073
28074         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
28075         so it was not fetching variable information from outer blocks.
28076
28077         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
28078         Beforefieldinit as it was buggy.
28079
28080         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
28081         that Ravi put here.  
28082
28083         * class.cs (Constructor::Emit): Only emit if block is not null.
28084         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
28085         deal with this by semantically definining it as if the user had
28086         done it.
28087
28088         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
28089         constructors as we now "emit" them at a higher level.
28090
28091         (TypeContainer::DefineDefaultConstructor): Used to define the
28092         default constructors if none was provided.
28093
28094         (ConstructorInitializer): Add methods Resolve and Emit. 
28095
28096         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
28097
28098 2001-09-17  Ravi Pratap  <ravi@ximian.com>
28099
28100         * class.cs (TypeContainer::EmitDefaultConstructor): Register
28101         the default constructor builder with our hashtable for methodbuilders
28102         to methodcores.
28103
28104         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
28105         and argument_count is 0 in which case we have a match.
28106         (Binary::ResolveOperator): More null checking and miscellaneous coding
28107         style cleanup.
28108
28109 2001-09-17  Ravi Pratap  <ravi@ximian.com>
28110
28111         * rootcontext.cs (IsNameSpace): Compare against null.
28112
28113         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
28114
28115         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
28116         and Unary::Operator.
28117
28118         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
28119         accordingly.
28120
28121         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
28122         we have overloaded operators.
28123         (Binary::ResolveOperator): Implement the part which does the operator overload
28124         resolution.
28125
28126         * class.cs (Operator::Emit): Implement.
28127         (TypeContainer::Emit): Emit the operators we have too.
28128
28129         * expression.cs (Binary::Emit): Update to emit the appropriate code for
28130         the case when we have a user-defined operator.
28131
28132 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
28133
28134         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
28135
28136 2001-09-16  Ravi Pratap  <ravi@ximian.com>
28137
28138         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
28139         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
28140         (Constructor::Emit): Implement.
28141         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
28142         if we have no work to do. 
28143         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
28144         Emit method.
28145
28146         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
28147         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
28148
28149         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
28150         of parent.parent.
28151
28152 2001-09-15  Ravi Pratap  <ravi@ximian.com>
28153
28154         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
28155         in the source.
28156         (Tree::RecordNamespace): Method to do what the name says ;-)
28157         (Tree::Namespaces): Property to get at the namespaces hashtable.
28158
28159         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
28160         keep track.
28161
28162         * rootcontext.cs (IsNamespace): Fixed it :-)
28163
28164 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
28165
28166         * class.cs (TypeContainer::FindMembers): Add support for
28167         constructors. 
28168         (MethodCore): New class that encapsulates both the shared aspects
28169         of a Constructor and a Method.  
28170         (Method, Constructor): Factored pieces into MethodCore.
28171
28172         * driver.cs: Added --fatal which makes errors throw exceptions.
28173         Load System assembly as well as part of the standard library.
28174
28175         * report.cs: Allow throwing exceptions on errors for debugging.
28176
28177         * modifiers.cs: Do not use `parent', instead use the real type
28178         container to evaluate permission settings.
28179
28180         * class.cs: Put Ravi's patch back in.  He is right, and we will
28181         have to cope with the
28182
28183 2001-09-14  Ravi Pratap  <ravi@ximian.com>
28184
28185         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
28186         FamORAssem, not FamANDAssem.
28187
28188 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
28189
28190         * driver.cs: Added --parse option that only parses its input files
28191         and terminates.
28192
28193         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
28194         incorrect.  IsTopLevel is not used to tell whether an object is
28195         root_types or not (that can be achieved by testing this ==
28196         root_types).  But to see if this is a top-level *class* (not
28197         necessarly our "toplevel" container). 
28198
28199 2001-09-14  Ravi Pratap  <ravi@ximian.com>
28200
28201         * enum.cs (Enum::Define): Modify to call the Lookup method on the
28202         parent instead of a direct call to GetType.
28203
28204 2001-09-14  Ravi Pratap  <ravi@ximian.com>
28205
28206         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
28207         Modifiers.TypeAttr. This should just be a call to that method.
28208
28209         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
28210         object so that we can determine if we are top-level or not.
28211
28212         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
28213         TypeContainer too.
28214
28215         * enum.cs (Enum::Define): Ditto.
28216
28217         * modifiers.cs (FieldAttr): Re-write.
28218
28219         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
28220         (TypeContainer::HaveStaticConstructor): New property to provide access
28221         to precisely that info.
28222
28223         * modifiers.cs (MethodAttr): Re-write.
28224         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
28225
28226         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
28227         of top-level types as claimed.
28228
28229 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
28230
28231         * expression.cs (MemberLookup): Fruitless attempt to lookup
28232         constructors.  Maybe I need to emit default constructors?  That
28233         might be it (currently .NET emits this for me automatically).
28234         (Invocation::OverloadResolve): Cope with Arguments == null.
28235         (Invocation::EmitArguments): new function, shared by the new
28236         constructor and us.
28237         (Invocation::Emit): Handle static and instance methods.  Emit
28238         proper call instruction for virtual or non-virtual invocations.
28239         (New::Emit): Implement.
28240         (New::Resolve): Implement.
28241         (MemberAccess:Resolve): Implement.
28242         (MethodGroupExpr::InstanceExpression): used conforming to the spec
28243         to track instances.
28244         (FieldExpr::Resolve): Set type.
28245
28246         * support.cs: Handle empty arguments.
28247                 
28248         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
28249         SimpleLookup): Auxiliary routines to help parse a qualifier
28250         identifier.  
28251
28252         Update qualifier_identifier rule.
28253
28254         * codegen.cs: Removed debugging messages.
28255
28256         * class.cs: Make this a global thing, this acts just as a "key" to
28257         objects that we might have around.
28258
28259         (Populate): Only initialize method_builders_to_methods once.
28260
28261         * expression.cs (PropertyExpr): Initialize type from the
28262         PropertyType. 
28263
28264         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
28265         Resolve pattern.  Attempt to implicitly convert value to boolean.
28266         Emit code.
28267
28268         * expression.cs: Set the type for the int32/int32 argument case.
28269         (Binary::ResolveOperator): Set the return type to boolean for
28270         comparission operators
28271
28272         * typemanager.cs: Remove debugging print code.
28273
28274         (Invocation::Resolve): resolve type.
28275
28276         * class.cs: Allocate a MemberInfo of the correct size, as the code
28277         elsewhere depends on the test to reflect the correct contents.
28278
28279         (Method::) Keep track of parameters, due to System.Reflection holes
28280
28281         (TypeContainer::Populate): Keep track of MethodBuilders to Method
28282         mapping here.
28283
28284         (TypeContainer::FindMembers): Use ArrayList and then copy an array
28285         of the exact size and return that.
28286
28287         (Class::LookupMethodByBuilder): New function that maps
28288         MethodBuilders to its methods.  Required to locate the information
28289         on methods because System.Reflection bit us again.
28290
28291         * support.cs: New file, contains an interface ParameterData and
28292         two implementations: ReflectionParameters and InternalParameters
28293         used to access Parameter information.  We will need to grow this
28294         as required.
28295
28296         * expression.cs (Invocation::GetParameterData): implement a cache
28297         and a wrapper around the ParameterData creation for methods. 
28298         (Invocation::OverloadResolve): Use new code.
28299
28300 2001-09-13  Ravi Pratap  <ravi@ximian.com>
28301
28302         * class.cs (TypeContainer::EmitField): Remove and move into 
28303         (Field::Define): here and modify accordingly.
28304         (Field.FieldBuilder): New member.
28305         (TypeContainer::Populate): Update accordingly.
28306         (TypeContainer::FindMembers): Implement.
28307
28308 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
28309
28310         * statement.cs: (VariableInfo::VariableType): New field to be
28311         initialized with the full type once it is resolved. 
28312
28313 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
28314
28315         * parameter.cs (GetParameterInfo): Use a type cache to compute
28316         things only once, and to reuse this information
28317
28318         * expression.cs (LocalVariableReference::Emit): Implement.
28319         (OpcodeCast::Emit): fix.
28320
28321         (ParameterReference::Resolve): Implement.
28322         (ParameterReference::Emit): Implement.
28323
28324         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
28325         that are expressions need to stay as Expressions.
28326
28327         * typemanager.cs (CSharpName): Returns the C# name of a type if
28328         possible. 
28329
28330         * expression.cs (Expression::ConvertImplicit): New function that
28331         implements implicit type conversions.
28332
28333         (Expression::ImplicitReferenceConversion): Implements implicit
28334         reference conversions.
28335
28336         (EmptyCast): New type for transparent casts.
28337
28338         (OpcodeCast): New type for casts of types that are performed with
28339         a sequence of bytecodes.
28340
28341         (BoxedCast): New type used for casting value types into reference
28342         types.  Emits a box opcode.
28343
28344         (Binary::DoNumericPromotions): Implements numeric promotions of
28345         and computation of the Binary::Type.
28346
28347         (Binary::EmitBranchable): Optimization.
28348
28349         (Binary::Emit): Implement code emission for expressions.
28350
28351         * typemanager.cs (TypeManager): Added two new core types: sbyte
28352         and byte.
28353
28354 2001-09-12  Ravi Pratap  <ravi@ximian.com>
28355
28356         * class.cs (TypeContainer::FindMembers): Method which does exactly
28357         what Type.FindMembers does, only we don't have to use reflection. No
28358         implementation yet.
28359
28360         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
28361         typecontainer objects as we need to get at them.
28362         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
28363
28364         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
28365         typecontainer object.
28366
28367         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
28368         of just a Report object.
28369
28370 2001-09-11  Ravi Pratap  <ravi@ximian.com>
28371
28372         * class.cs (Event::Define): Go back to using the prefixes "add_" and
28373         "remove_"
28374         (TypeContainer::Populate): Now define the delegates of the type too.
28375         (TypeContainer.Delegates): Property to access the list of delegates defined
28376         in the type.
28377
28378         * delegates.cs (Delegate::Define): Implement partially.
28379
28380         * modifiers.cs (TypeAttr): Handle more flags.
28381
28382 2001-09-11  Ravi Pratap  <ravi@ximian.com>
28383
28384         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
28385         and not <=
28386         (Operator::Define): Re-write logic to get types by using the LookupType method
28387         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
28388         (Indexer::Define): Ditto.
28389         (Event::Define): Ditto.
28390         (Property::Define): Ditto.
28391
28392 2001-09-10  Ravi Pratap  <ravi@ximian.com>
28393
28394         * class.cs (TypeContainer::Populate): Now define operators too. 
28395         (TypeContainer.Operators): New property to access the list of operators
28396         in a type.
28397         (Operator.OperatorMethodBuilder): New member to hold the method builder
28398         for the operator we are defining.
28399         (Operator::Define): Implement.
28400
28401 2001-09-10  Ravi Pratap  <ravi@ximian.com>
28402
28403         * class.cs (Event::Define): Make the prefixes of the accessor methods
28404         addOn_ and removeOn_ 
28405
28406         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
28407         of the location being passed in too. Ideally, this should go later since all
28408         error reporting should be done through the Report object.
28409
28410         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
28411         (Populate): Iterate thru the indexers we have and define them too.
28412         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
28413         for the get and set accessors.
28414         (Indexer::Define): Implement.
28415
28416 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
28417
28418         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
28419         my previous implementation, did not work.
28420
28421         * typemanager.cs: Add a couple of missing types (the longs).
28422
28423         * literal.cs: Use TypeManager.bool_type instead of getting it.
28424
28425         * expression.cs (EventExpr): New kind of expressions.
28426         (Expressio::ExprClassFromMemberInfo): finish
28427
28428 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
28429
28430         * assign.cs: Emit stores to static fields differently.
28431
28432 2001-09-08  Ravi Pratap  <ravi@ximian.com>
28433
28434         * Merge in changes and adjust code to tackle conflicts. Backed out my
28435         code in Assign::Resolve ;-) 
28436
28437 2001-09-08  Ravi Pratap  <ravi@ximian.com>
28438
28439         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
28440         instead Report.Error and also pass in the location.
28441         (CSharpParser::Lexer): New readonly property to return the reference
28442         to the Tokenizer object.
28443         (declare_local_variables): Use Report.Error with location instead of plain 
28444         old error.
28445         (CheckDef): Ditto.
28446
28447         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
28448         (Operator.CheckBinaryOperator): Ditto.
28449
28450         * cs-parser.jay (operator_declarator): Update accordingly.
28451
28452         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
28453         (CheckBinaryOperator): Same here.
28454
28455         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
28456         on the name without any prefixes of namespace names etc. This is because we
28457         already might have something already fully qualified like 
28458         'System.Console.WriteLine'
28459
28460         * assign.cs (Resolve): Begin implementation. Stuck ;-)
28461
28462 2001-09-07  Ravi Pratap  <ravi@ximian.com>
28463
28464         * cs-tokenizer.cs (location): Return a string which also contains
28465         the file name.
28466
28467         * expression.cs (ElementAccess): New class for expressions of the
28468         type 'element access.'
28469         (BaseAccess): New class for expressions of the type 'base access.'
28470         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
28471         respectively.
28472
28473         * cs-parser.jay (element_access): Implement action.
28474         (base_access): Implement actions.
28475         (checked_expression, unchecked_expression): Implement.
28476
28477         * cs-parser.jay (local_variable_type): Correct and implement.
28478         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
28479
28480         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
28481
28482         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
28483         name and the specifiers.
28484
28485         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
28486
28487         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
28488         making them all public ;-)
28489
28490         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
28491         class anyways.
28492
28493 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
28494
28495         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
28496         PropertyExprs.
28497         (FieldExpr, PropertyExprs): New resolved expressions.
28498         (SimpleName::MemberStaticCheck): Perform static checks for access
28499         to non-static fields on static methods. Maybe this should be
28500         generalized for MemberAccesses. 
28501         (SimpleName::ResolveSimpleName): More work on simple name
28502         resolution. 
28503
28504         * cs-parser.jay (primary_expression/qualified_identifier): track
28505         the parameter index.
28506
28507         * codegen.cs (CodeGen::Save): Catch save exception, report error.
28508         (EmitContext::EmitBoolExpression): Chain to expression generation
28509         instead of temporary hack.
28510         (::EmitStatementExpression): Put generic expression code generation.
28511
28512         * assign.cs (Assign::Emit): Implement variable assignments to
28513         local variables, parameters and fields.
28514
28515 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
28516
28517         * statement.cs (Block::GetVariableInfo): New method, returns the
28518         VariableInfo for a variable name in a block.
28519         (Block::GetVariableType): Implement in terms of GetVariableInfo
28520
28521         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
28522         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
28523
28524 2001-09-06  Ravi Pratap  <ravi@ximian.com>
28525
28526         * cs-parser.jay (operator_declaration): Continue on my quest : update
28527         to take attributes argument.
28528         (event_declaration): Ditto.
28529         (enum_declaration): Ditto.
28530         (indexer_declaration): Ditto.
28531
28532         * class.cs (Operator::Operator): Update constructor accordingly.
28533         (Event::Event): Ditto.
28534
28535         * delegate.cs (Delegate::Delegate): Same here.
28536
28537         * enum.cs (Enum::Enum): Same here.
28538
28539 2001-09-05  Ravi Pratap  <ravi@ximian.com>
28540
28541         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
28542
28543         * ../tests/cs0658.cs : New file to demonstrate error 0658.
28544
28545         * attribute.cs (Attributes): New class to encapsulate all attributes which were
28546         being passed around as an arraylist.
28547         (Attributes::AddAttribute): Method to add attribute sections.
28548
28549         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
28550         (struct_declaration): Update accordingly.
28551         (constant_declaration): Update.
28552         (field_declaration): Update.
28553         (method_header): Update.
28554         (fixed_parameter): Update.
28555         (parameter_array): Ditto.
28556         (property_declaration): Ditto.
28557         (destructor_declaration): Ditto.
28558
28559         * class.cs (Struct::Struct): Update constructors accordingly.
28560         (Class::Class): Ditto.
28561         (Field::Field): Ditto.
28562         (Method::Method): Ditto.
28563         (Property::Property): Ditto.
28564         (TypeContainer::OptAttribute): update property's return type.
28565
28566         * interface.cs (Interface.opt_attributes): New member.
28567         (Interface::Interface): Update to take the extra Attributes argument.
28568
28569         * parameter.cs (Parameter::Parameter): Ditto.
28570
28571         * constant.cs (Constant::Constant): Ditto.
28572
28573         * interface.cs (InterfaceMemberBase): New OptAttributes field.
28574         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
28575         the attributes as a parameter.
28576         (InterfaceProperty): Update constructor call.
28577         (InterfaceEvent): Ditto.
28578         (InterfaceMethod): Ditto.
28579         (InterfaceIndexer): Ditto.
28580
28581         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
28582         pass the attributes too.
28583         (interface_event_declaration): Ditto.
28584         (interface_property_declaration): Ditto.
28585         (interface_method_declaration): Ditto.
28586         (interface_declaration): Ditto.
28587
28588 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
28589
28590         * class.cs (Method::Define): Track the "static Main" definition to
28591         create an entry point. 
28592
28593         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
28594         EntryPoint if we find it. 
28595
28596         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
28597         (EmitContext::ig): Make this variable public.
28598
28599         * driver.cs: Make the default output file be the first file name
28600         with the .exe extension.  
28601
28602         Detect empty compilations
28603
28604         Handle various kinds of output targets.  Handle --target and
28605         rename -t to --dumper.
28606
28607         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
28608         methods inherited from Expression return now an Expression.  This
28609         will is used during the tree rewriting as we resolve them during
28610         semantic analysis.
28611
28612         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
28613         the spec.  Missing entirely is the information about
28614         accessability of elements of it.
28615
28616         (Expression::ExprClassFromMemberInfo): New constructor for
28617         Expressions that creates a fully initialized Expression based on
28618         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
28619         a Type.
28620
28621         (Invocation::Resolve): Begin implementing resolution of invocations.
28622
28623         * literal.cs (StringLiteral):  Implement Emit.
28624
28625 2001-09-05  Ravi Pratap  <ravi@ximian.com>
28626
28627         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
28628         member.
28629
28630 2001-09-04  Ravi Pratap  <ravi@ximian.com>
28631
28632         * cs-parser.jay (attribute_arguments): Implement actions.
28633         (attribute): Fix bug in production. Implement action.
28634         (attribute_list): Implement.
28635         (attribute_target): Implement.
28636         (attribute_target_specifier, opt_target_specifier): Implement
28637         (CheckAttributeTarget): New method to check if the attribute target
28638         is valid.
28639         (attribute_section): Implement.
28640         (opt_attributes): Implement.
28641
28642         * attribute.cs : New file to handle attributes.
28643         (Attribute): Class to hold attribute info.
28644
28645         * cs-parser.jay (opt_attribute_target_specifier): Remove production
28646         (attribute_section): Modify production to use 2 different rules to 
28647         achieve the same thing. 1 s/r conflict down !
28648         Clean out commented, useless, non-reducing dimension_separator rules.
28649
28650         * class.cs (TypeContainer.attributes): New member to hold list
28651         of attributes for a type.
28652         (Struct::Struct): Modify to take one more argument, the attribute list.
28653         (Class::Class): Ditto.
28654         (Field::Field): Ditto.
28655         (Method::Method): Ditto.
28656         (Property::Property): Ditto.
28657
28658         * cs-parser.jay (struct_declaration): Update constructor call to
28659         pass in the attributes too.
28660         (class_declaration): Ditto.
28661         (constant_declaration): Ditto.
28662         (field_declaration): Ditto.
28663         (method_header): Ditto.
28664         (fixed_parameter): Ditto.
28665         (parameter_array): Ditto.
28666         (property_declaration): Ditto.
28667
28668         * constant.cs (Constant::Constant): Update constructor similarly.
28669         Use System.Collections.
28670
28671         * parameter.cs (Parameter::Parameter): Update as above.
28672
28673 2001-09-02  Ravi Pratap  <ravi@ximian.com>
28674
28675         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
28676         (TypeContainer.delegates): New member to hold list of delegates.
28677
28678         * cs-parser.jay (delegate_declaration): Implement the action correctly 
28679         this time as I seem to be on crack ;-)
28680
28681 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
28682
28683         * rootcontext.cs (RootContext::IsNamespace): new function, used to
28684         tell whether an identifier represents a namespace.
28685
28686         * expression.cs (NamespaceExpr): A namespace expression, used only
28687         temporarly during expression resolution.
28688         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
28689         utility functions to resolve names on expressions.
28690
28691 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
28692
28693         * codegen.cs: Add hook for StatementExpressions. 
28694
28695         * class.cs: Fix inverted test for static flag in methods.
28696
28697 2001-09-02  Ravi Pratap  <ravi@ximian.com>
28698
28699         * class.cs (Operator::CheckUnaryOperator): Correct error number used
28700         to make it coincide with MS' number.
28701         (Operator::CheckBinaryOperator): Ditto.
28702
28703         * ../errors/errors.txt : Remove error numbers added earlier.
28704
28705         * ../errors/cs1019.cs : Test case for error # 1019
28706
28707         * ../errros/cs1020.cs : Test case for error # 1020
28708
28709         * cs-parser.jay : Clean out commented cruft.
28710         (dimension_separators, dimension_separator): Comment out. Ostensibly not
28711         used anywhere - non-reducing rule.
28712         (namespace_declarations): Non-reducing rule - comment out.
28713
28714         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
28715         with TypeContainer::AddEnum.
28716
28717         * delegate.cs : New file for delegate handling classes.
28718         (Delegate): Class for declaring delegates.
28719
28720         * makefile : Update.
28721
28722         * cs-parser.jay (delegate_declaration): Implement.
28723
28724 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
28725
28726         * class.cs (Event::Define): Implement.
28727         (Event.EventBuilder): New member.
28728
28729         * class.cs (TypeContainer::Populate): Update to define all enums and events
28730         we have.
28731         (Events): New property for the events arraylist we hold. Shouldn't we move to using
28732         readonly fields for all these cases ?
28733
28734 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
28735
28736         * class.cs (Property): Revamp to use the convention of making fields readonly.
28737         Accordingly modify code elsewhere.
28738
28739         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
28740         the Define method of the Property class.
28741
28742         * class.cs : Clean up applied patch and update references to variables etc. Fix 
28743         trivial bug.
28744         (TypeContainer::Populate): Update to define all the properties we have. Also
28745         define all enumerations.
28746
28747         * enum.cs (Define): Implement.
28748
28749 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
28750
28751         * cs-parser.jay (overloadable_operator): The semantic value is an
28752         enum of the Operator class.
28753         (operator_declarator): Implement actions.
28754         (operator_declaration): Implement.
28755
28756         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
28757         validity of definitions.
28758         (Operator::CheckBinaryOperator): Static method to check for binary operators
28759         (TypeContainer::AddOperator): New method to add an operator to a type.
28760
28761         * cs-parser.jay (indexer_declaration): Added line to actually call the
28762         AddIndexer method so it gets added ;-)
28763
28764         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
28765         already taken care of by the MS compiler ?  
28766
28767 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
28768
28769         * class.cs (Operator): New class for operator declarations.
28770         (Operator::OpType): Enum for the various operators.
28771
28772 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
28773
28774         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
28775         ostensibly handle this in semantic analysis.
28776
28777         * cs-parser.jay (general_catch_clause): Comment out
28778         (specific_catch_clauses, specific_catch_clause): Ditto.
28779         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
28780         (catch_args, opt_catch_args): New productions.
28781         (catch_clause): Rewrite to use the new productions above
28782         (catch_clauses): Modify accordingly.
28783         (opt_catch_clauses): New production to use in try_statement
28784         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
28785         and re-write the code in the actions to extract the specific and
28786         general catch clauses by being a little smart ;-)
28787
28788         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
28789         Hooray, try and catch statements parse fine !
28790
28791 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
28792
28793         * statement.cs (Block::GetVariableType): Fix logic to extract the type
28794         string from the hashtable of variables.
28795
28796         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
28797         I end up making that mistake ;-)
28798         (catch_clauses): Fixed gross error which made Key and Value of the 
28799         DictionaryEntry the same : $1 !!
28800
28801 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
28802
28803         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
28804
28805         * cs-parser.jay (event_declaration): Correct to remove the semicolon
28806         when the add and remove accessors are specified. 
28807
28808 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
28809
28810         * cs-parser.jay (IndexerDeclaration): New helper class to hold
28811         information about indexer_declarator.
28812         (indexer_declarator): Implement actions.
28813         (parsing_indexer): New local boolean used to keep track of whether
28814         we are parsing indexers or properties. This is necessary because 
28815         implicit_parameters come into picture even for the get accessor in the 
28816         case of an indexer.
28817         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
28818
28819         * class.cs (Indexer): New class for indexer declarations.
28820         (TypeContainer::AddIndexer): New method to add an indexer to a type.
28821         (TypeContainer::indexers): New member to hold list of indexers for the
28822         type.
28823
28824 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
28825
28826         * cs-parser.jay (add_accessor_declaration): Implement action.
28827         (remove_accessor_declaration): Implement action.
28828         (event_accessors_declaration): Implement
28829         (variable_declarators): swap statements for first rule - trivial.
28830
28831         * class.cs (Event): New class to hold information about event
28832         declarations.
28833         (TypeContainer::AddEvent): New method to add an event to a type
28834         (TypeContainer::events): New member to hold list of events.
28835
28836         * cs-parser.jay (event_declaration): Implement actions.
28837
28838 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
28839
28840         * cs-parser.jay (dim_separators): Implement. Make it a string
28841         concatenating all the commas together, just as they appear.
28842         (opt_dim_separators): Modify accordingly
28843         (rank_specifiers): Update accordingly. Basically do the same
28844         thing - instead, collect the brackets here.
28845         (opt_rank_sepcifiers): Modify accordingly.
28846         (array_type): Modify to actually return the complete type string
28847         instead of ignoring the rank_specifiers.
28848         (expression_list): Implement to collect the expressions
28849         (variable_initializer): Implement. We make it a list of expressions
28850         essentially so that we can handle the array_initializer case neatly too.
28851         (variable_initializer_list): Implement.
28852         (array_initializer): Make it a list of variable_initializers
28853         (opt_array_initializer): Modify accordingly.
28854
28855         * expression.cs (New::NType): Add enumeration to help us
28856         keep track of whether we have an object/delegate creation
28857         or an array creation.
28858         (New:NewType, New::Rank, New::Indices, New::Initializers): New
28859         members to hold data about array creation.
28860         (New:New): Modify to update NewType
28861         (New:New): New Overloaded contructor for the array creation
28862         case.
28863
28864         * cs-parser.jay (array_creation_expression): Implement to call
28865         the overloaded New constructor.
28866
28867 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
28868
28869         * class.cs (TypeContainer::Constructors): Return member
28870         constructors instead of returning null.
28871
28872 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
28873
28874         * typemanager.cs (InitCoreTypes): Initialize the various core
28875         types after we have populated the type manager with the user
28876         defined types (this distinction will be important later while
28877         compiling corlib.dll)
28878
28879         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
28880         on Expression Classification.  Now all expressions have a method
28881         `Resolve' and a method `Emit'.
28882
28883         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
28884         generation from working.     Also add some temporary debugging
28885         code. 
28886
28887 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
28888
28889         * codegen.cs: Lots of code generation pieces.  This is only the
28890         beginning, will continue tomorrow with more touches of polish.  We
28891         handle the fundamentals of if, while, do, for, return.  Others are
28892         trickier and I need to start working on invocations soon.
28893
28894         * gen-treedump.cs: Bug fix, use s.Increment here instead of
28895         s.InitStatement. 
28896
28897         * codegen.cs (EmitContext): New struct, used during code
28898         emission to keep a context.   Most of the code generation will be
28899         here. 
28900
28901         * cs-parser.jay: Add embedded blocks to the list of statements of
28902         this block.  So code generation proceeds in a top down fashion.
28903
28904 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
28905
28906         * statement.cs: Add support for multiple child blocks.
28907
28908 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
28909
28910         * codegen.cs (EmitCode): New function, will emit the code for a
28911         Block of code given a TypeContainer and its ILGenerator. 
28912
28913         * statement.cs (Block): Standard public readonly optimization.
28914         (Block::Block constructors): Link children. 
28915         (Block::Child): Child Linker.
28916         (Block::EmitVariables): Emits IL variable declarations.
28917
28918         * class.cs: Drop support for MethodGroups here, delay until
28919         Semantic Analysis.
28920         (Method::): Applied the same simplification that I did before, and
28921         move from Properties to public readonly fields.
28922         (Method::ParameterTypes): Returns the parameter types for the
28923         function, and implements a cache that will be useful later when I
28924         do error checking and the semantic analysis on the methods is
28925         performed.
28926         (Constructor::GetCallingConvention): Renamed from CallingConvetion
28927         and made a method, optional argument tells whether this is a class
28928         or a structure to apply the `has-this' bit.
28929         (Method::GetCallingConvention): Implement, returns the calling
28930         convention. 
28931         (Method::Define): Defines the type, a second pass is performed
28932         later to populate the methods.
28933
28934         (Constructor::ParameterTypes): implement a cache similar to the
28935         one on Method::ParameterTypes, useful later when we do semantic
28936         analysis. 
28937
28938         (TypeContainer::EmitMethod):  New method.  Emits methods.
28939
28940         * expression.cs: Removed MethodGroup class from here.
28941
28942         * parameter.cs (Parameters::GetCallingConvention): new method.
28943
28944 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
28945
28946         * class.cs (TypeContainer::Populate): Drop RootContext from the
28947         argument. 
28948
28949         (Constructor::CallingConvention): Returns the calling convention.
28950         (Constructor::ParameterTypes): Returns the constructor parameter
28951         types. 
28952
28953         (TypeContainer::AddConstructor): Keep track of default constructor
28954         and the default static constructor.
28955
28956         (Constructor::) Another class that starts using `public readonly'
28957         instead of properties. 
28958
28959         (Constructor::IsDefault): Whether this is a default constructor. 
28960
28961         (Field::) use readonly public fields instead of properties also.
28962
28963         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
28964         track of static constructors;  If none is used, turn on
28965         BeforeFieldInit in the TypeAttributes. 
28966
28967         * cs-parser.jay (opt_argument_list): now the return can be null
28968         for the cases where there are no arguments. 
28969
28970         (constructor_declarator): If there is no implicit `base' or
28971         `this', then invoke the default parent constructor. 
28972
28973         * modifiers.cs (MethodAttr): New static function maps a set of
28974         modifiers flags into a MethodAttributes enum
28975         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
28976         MethodAttr, TypeAttr to represent the various mappings where the
28977         modifiers are used.
28978         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
28979
28980 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
28981
28982         * parameter.cs (GetParameterInfo): Fix bug where there would be no
28983         method arguments.
28984
28985         * interface.cs (PopulateIndexer): Implemented the code generator
28986         for interface indexers.
28987
28988 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
28989
28990         * interface.cs (InterfaceMemberBase): Now we track the new status
28991         here.  
28992
28993         (PopulateProperty): Implement property population.  Woohoo!  Got
28994         Methods and Properties going today. 
28995
28996         Removed all the properties for interfaces, and replaced them with
28997         `public readonly' fields. 
28998
28999 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
29000
29001         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
29002         initialize their hashtables/arraylists only when they are needed
29003         instead of doing this always.
29004
29005         * parameter.cs: Handle refs and out parameters.
29006
29007         * cs-parser.jay: Use an ArrayList to construct the arguments
29008         instead of the ParameterCollection, and then cast that to a
29009         Parameter[] array.
29010
29011         * parameter.cs: Drop the use of ParameterCollection and use
29012         instead arrays of Parameters.
29013
29014         (GetParameterInfo): Use the Type, not the Name when resolving
29015         types. 
29016
29017 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
29018
29019         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
29020         and instead use public readonly fields.
29021
29022         * class.cs: Put back walking code for type containers.
29023
29024 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
29025
29026         * class.cs (MakeConstant): Code to define constants.
29027
29028         * rootcontext.cs (LookupType): New function.  Used to locate types 
29029
29030
29031 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
29032
29033         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
29034         this System.Reflection code is.  Kudos to Microsoft
29035
29036         * typemanager.cs: Implement a type cache and avoid loading all
29037         types at boot time.  Wrap in LookupType the internals.  This made
29038         the compiler so much faster.  Wow.  I rule!
29039
29040         * driver.cs: Make sure we always load mscorlib first (for
29041         debugging purposes, nothing really important).
29042
29043         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
29044         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
29045
29046         * rootcontext.cs: Lookup types on their namespace;  Lookup types
29047         on namespaces that have been imported using the `using' keyword.
29048
29049         * class.cs (TypeContainer::TypeAttr): Virtualize.
29050         (Class::TypeAttr): Return attributes suitable for this bad boy.
29051         (Struct::TypeAttr): ditto.
29052         Handle nested classes.
29053         (TypeContainer::) Remove all the type visiting code, it is now
29054         replaced with the rootcontext.cs code
29055
29056         * rootcontext.cs (GetClassBases): Added support for structs. 
29057
29058 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
29059
29060         * interface.cs, statement.cs, class.cs, parameter.cs,
29061         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
29062         Drop use of TypeRefs, and use strings instead.
29063
29064 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
29065
29066         * rootcontext.cs: 
29067
29068         * class.cs (Struct::Struct): set the SEALED flags after
29069         checking the modifiers.
29070         (TypeContainer::TypeAttr): new property, returns the
29071         TypeAttributes for a class.  
29072
29073         * cs-parser.jay (type_list): Oops, list production was creating a
29074         new list of base types.
29075
29076         * rootcontext.cs (StdLib): New property.
29077         (GetInterfaceTypeByName): returns an interface by type name, and
29078         encapsulates error handling here.
29079         (GetInterfaces): simplified.
29080         (ResolveTree): Encapsulated all the tree resolution here.
29081         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
29082         types. 
29083
29084         * driver.cs: Add support for --nostdlib, to avoid loading the
29085         default assemblies.
29086         (Main): Do not put tree resolution here. 
29087
29088         * rootcontext.cs: Beginning of the class resolution.
29089
29090 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
29091
29092         * rootcontext.cs: Provide better error reporting. 
29093
29094         * cs-parser.jay (interface_base): set our $$ to be interfaces.
29095
29096         * rootcontext.cs (CreateInterface): Handle the case where there
29097         are no parent interfaces.
29098
29099         (CloseTypes): Routine to flush types at the end.
29100         (CreateInterface): Track types.
29101         (GetInterfaces): Returns an array of Types from the list of
29102         defined interfaces.
29103
29104         * typemanager.c (AddUserType): Mechanism to track user types (puts
29105         the type on the global type hash, and allows us to close it at the
29106         end). 
29107
29108 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
29109
29110         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
29111         RecordInterface instead.
29112
29113         * cs-parser.jay: Updated to reflect changes above.
29114
29115         * decl.cs (Definition): Keep track of the TypeBuilder type that
29116         represents this type here.  Not sure we will use it in the long
29117         run, but wont hurt for now.
29118
29119         * driver.cs: Smaller changes to accomodate the new code.
29120
29121         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
29122         when done. 
29123
29124         * rootcontext.cs (CreateInterface):  New method, used to create
29125         the System.TypeBuilder type for interfaces.
29126         (ResolveInterfaces): new entry point to resolve the interface
29127         hierarchy. 
29128         (CodeGen): Property, used to keep track of the code generator.
29129
29130 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
29131
29132         * cs-parser.jay: Add a second production for delegate_declaration
29133         with `VOID'.
29134
29135         (enum_body): Put an opt_comma here instead of putting it on
29136         enum_body or enum_member_declarations so we can handle trailing
29137         commas on enumeration members.  Gets rid of a shift/reduce.
29138
29139         (type_list): Need a COMMA in the middle.
29140
29141         (indexer_declaration): Tell tokenizer to recognize get/set
29142
29143         * Remove old targets.
29144
29145         * Re-add the parser target.
29146
29147 2001-07-13  Simon Cozens <simon@simon-cozens.org>
29148
29149         * cs-parser.jay: Add precendence rules for a number of operators
29150         ot reduce the number of shift/reduce conflicts in the grammar.
29151
29152 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
29153
29154         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
29155         and put it here.
29156
29157         Get rid of old crufty code.
29158
29159         * rootcontext.cs: Use this to keep track of the parsed
29160         representation and the defined types available to the program. 
29161
29162         * gen-treedump.cs: adjust for new convention.
29163
29164         * type.cs: Split out the type manager, and the assembly builder
29165         from here. 
29166
29167         * typemanager.cs: the type manager will live here now.
29168
29169         * cil-codegen.cs: And the code generator here. 
29170
29171 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
29172
29173         * makefile: Fixed up for easy making.
29174
29175 2001-07-13  Simon Cozens <simon@simon-cozens.org>
29176
29177         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
29178         the 
29179
29180         (unary_expression): Expand pre_increment_expression and
29181         post_decrement_expression to reduce a shift/reduce.
29182
29183 2001-07-11  Simon Cozens
29184
29185         * cs-tokenizer.cs: Hex numbers should begin with a 0.
29186
29187         Improve allow_keyword_as_indent name.
29188
29189 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
29190
29191         * Adjustments for Beta2. 
29192
29193 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
29194
29195         * decl.cs: Added `Define' abstract method.
29196         (InTransit): new property, used to catch recursive definitions. 
29197
29198         * interface.cs: Implement `Define'. 
29199
29200         * modifiers.cs: Map Modifiers.constants to
29201         System.Reflection.TypeAttribute flags.
29202
29203         * class.cs: Keep track of types and user-defined types.
29204         (BuilderInit): New method for creating an assembly
29205         (ResolveType): New function to launch the resolution process, only
29206         used by interfaces for now.
29207
29208         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
29209         that are inserted into the name space. 
29210
29211 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
29212
29213         * ARGH.  I have screwed up my tree so many times due to the use of
29214         rsync rather than using CVS.  Going to fix this at once. 
29215
29216         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
29217         load types.
29218
29219 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
29220
29221         * Experiment successful: Use System.Type rather that our own
29222         version of Type.  
29223
29224 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
29225
29226         * cs-parser.jay: Removed nsAliases from here.
29227
29228         Use new namespaces, handle `using XXX;' 
29229
29230         * namespace.cs: Reimplemented namespace handling, use a recursive
29231         definition of the class.  Now we can keep track of using clauses
29232         and catch invalid using clauses.
29233
29234 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
29235
29236         * gen-treedump.cs: Adapted for all the renaming.
29237
29238         * expression.cs (Expression): this class now has a Type property
29239         which returns an expression Type.
29240
29241         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
29242         `Type', as this has a different meaning now in the base
29243
29244 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
29245
29246         * interface.cs, class.cs: Removed from all the sources the
29247         references to signature computation, as we can not do method
29248         signature computation during the parsing time, as we are not
29249         trying to solve at that point distinguishing:
29250
29251         class X {
29252                 void a (Blah x) {}
29253                 void a (NS.Blah x) {}
29254         }
29255
29256         Which depending on the context might be valid or not, as we do not
29257         know if Blah is the same thing as NS.Blah at that point.
29258
29259         * Redid everything so the code uses TypeRefs now instead of
29260         Types.  TypeRefs are just temporary type placeholders, that need
29261         to be resolved.  They initially have a pointer to a string and the
29262         current scope in which they are used.  This is used later by the
29263         compiler to resolve the reference to an actual Type. 
29264
29265         * DeclSpace is no longer a CIR.Type, and neither are
29266         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
29267         are all DeclSpaces, but no Types. 
29268
29269         * type.cs (TypeRefManager): This implements the TypeRef manager,
29270         which keeps track of all the types that need to be resolved after
29271         the parsing has finished. 
29272
29273 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
29274
29275         * ARGH.  We are going to have to store `foreach' as a class rather
29276         than resolving it, as we need to verify error 1579 after name
29277         resolution.   *OR* we could keep a flag that says `This request to
29278         IEnumerator comes from a foreach statement' which we can then use
29279         to generate the error.
29280
29281 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
29282
29283         * class.cs (TypeContainer.AddMethod): we now add methods to the
29284         MethodGroup instead of the method hashtable.  
29285
29286         * expression.cs: Add MethodGroup abstraction, which gets us one
29287         step closer to the specification in the way we handle method
29288         declarations.  
29289
29290         * cs-parser.jay (primary_expression): qualified_identifier now
29291         tried to match up an identifier to a local variable reference or
29292         to a parameter reference.
29293
29294         current_local_parameters is now a parser global variable that
29295         points to the current parameters for the block, used during name
29296         lookup.
29297
29298         (property_declaration): Now creates an implicit `value' argument to
29299         the set accessor.
29300
29301 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
29302
29303         * parameter.cs: Do not use `param' arguments as part of the
29304         signature, per the spec.
29305
29306 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
29307
29308         * decl.cs: Base class for classes, structs and interfaces.  This
29309         is the "Declaration Space" 
29310
29311         * cs-parser.jay: Use CheckDef for checking declaration errors
29312         instead of having one on each function.
29313
29314         * class.cs: Factor out some code for handling error handling in
29315         accordance to the "Declarations" section in the "Basic Concepts"
29316         chapter in the ECMA C# spec.
29317
29318         * interface.cs: Make all interface member classes derive from
29319         InterfaceMemberBase.
29320
29321 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
29322
29323         * Many things: all interfaces are parsed and generated in
29324         gen-treedump.  Support for member variables, constructors,
29325         destructors, properties, constants is there.
29326
29327         Beginning of the IL backend, but very little done, just there for
29328         testing purposes. 
29329
29330 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
29331
29332         * cs-parser.jay: Fix labeled statement.
29333
29334         * cs-tokenizer.cs (escape): Escape " and ' always.
29335         ref_line, ref_name: keep track of the line/filename as instructed
29336         by #line by the compiler.
29337         Parse #line.
29338
29339 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
29340
29341         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
29342         to match the values in System.CodeDOM.
29343
29344         Divid renamed to Divide.
29345
29346         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
29347         statements. 
29348         (Statements.set): remove.
29349
29350         * System.CodeDOM/CodeCatchClause.cs: always have a valid
29351         statements. 
29352
29353         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
29354         falseStatements always have valid values. 
29355
29356         * cs-parser.jay: Use System.CodeDOM now.
29357