1 2008-09-01 Jb Evain <jbevain@novell.com>
3 * Expression.cs: guard against null parameters passed to Lambda.
5 2008-08-30 Marek Safar <marek.safar@gmail.com>
7 * MemberBinding.cs: Made MemberBinding ctor public
9 2008-08-07 Jb Evain <jbevain@novell.com>
11 * Expression.cs (GetAssociatedProperty): strengthen accessors
14 2008-08-02 Zoltan Varga <vargaz@gmail.com>
16 * BinaryExpression.cs (EmitBinaryOperator): Mask out the upper bits of the
17 shift amount like mcs compiled code does.
19 2008-07-19 Jb Evain <jbevain@novell.com>
21 * Expression.cs (Call, Field, Property): disallow instance arguments
22 on static members. See ms connect #339351.
24 2008-07-18 Jb Evain <jbevain@novell.com>
26 * Expression.cs, BinaryExpression.cs: fix retrieval of true and false
29 2008-06-20 Jb Evain <jbevain@novell.com>
31 * LambdaExpression.cs, EmitContext.cs: refactor the emit context to
32 handle the fact that lambdas are compiled in a general context where
33 they share globals but are also able to use parameters from parent lambdas.
34 (Although parameter sharing is not implemented yet).
36 * BinaryExpression.cs (fix converted coalesce case to use the lambda
39 2008-06-09 Jb Evain <jbevain@novell.com>
41 * Extensions.cs (Type.IsExpression): add
42 * Expression.cs (CheckMethodArguments): modify the argument list
43 to quote arguments when if necessary.
46 2008-06-09 Jb Evain <jbevain@novell.com>
48 * Expression.cs (CheckLambda): quote body if required.
50 2008-06-07 Jb Evain <jbevain@novell.com>
52 * BinaryExpression.cs (EmitConvertedCoalesce): implement.
54 2008-06-05 Jb Evain <jbevain@novell.com>
56 * Expression.cs (GetUserConversionMethod): check for convertion
57 operators on both types.
59 2008-06-05 Jb Evain <jbevain@novell.com>
61 * Expression.cs (ConditionalBinaryCheck): if a method is passed,
62 checked that the operators true and false are also defined.
64 2008-06-05 Jb Evain <jbevain@novell.com>
66 * BinaryExpression.cs (Emit): deal with binary expressions
67 where only the left is lifted.
69 2008-06-05 Jb Evain <jbevain@novell.com>
71 * Extensions.cs: Add Type.MakeNullableType helper.
72 * Expression.cs (MakeSimpleBinary, MakeBoolBinar): Properly
73 creat lifted/lifted to null/not lifted
74 user defined binary expressions.
75 * BinaryExpression.cs (Emit): implement compilation of
76 lifted and lifted to null user defined binary operators.
78 2008-06-05 Jb Evain <jbevain@novell.com>
80 * Expression.cs (MakeSimpleUnary): properly create lifted/not lifted
81 unary expressions with user defined operators.
82 * UnaryExpression.cs (Emit): fix compilation of lifted user operators.
84 2008-05-30 Jb Evain <jbevain@novell.com>
86 * UnaryExpression.cs (Emit): fix convertion from nullable
89 2008-05-29 Jb Evain <jbevain@novell.com>
91 * Expression.cs (Power): allow bool?.
92 * BinaryExpression.cs: properly deal with lifted power expression.
94 2008-05-29 Jb Evain <jbevain@novell.com>
96 * BinaryExpression.cs (Emit): fix lifted andalso and orelse.
98 2008-05-29 Jb Evain <jbevain@novell.com>
100 * BinaryExpression.cs (Emit): properly emit lifted to null
101 relational binary expressions.
103 2008-05-28 Jb Evain <jbevain@novell.com>
105 * BinaryExpression.cs (Emit): rework compilation of
106 arithmetic and relational lifted binary expressions.
108 2008-05-28 Jb Evain <jbevain@novell.com>
110 * UnaryExpression.cs (Emit): implement support for compiling
111 lifted unary expressions.
113 2008-05-27 Jb Evain <jbevain@novell.com>
115 * UnaryExpression.cs (EmitConvert): implement nullable to nullable
118 2008-05-20 Roei Erez <roeie@mainsoft.com>
120 * Extensions.cs: Add 'IsGenericImplementationOf' extension method
122 2008-05-15 Jb Evain <jbevain@novell.com>
124 * UnaryExpression.cs, EmitContext.cs: emit convert from and
127 2008-05-15 Jb Evain <jbevain@novell.com>
129 * Extensions.cs: add a few useful extensions such as
130 IsGenericInstanceOf and MakeGenericFrom.
132 2008-05-15 Roei Erez <roeie@mainsoft.com>
134 * ExpressionTransformer.cs: Add a base class for transforming Expressions.
135 In use at AsQueryable() implementation.
137 2008-05-14 Jb Evain <jbevain@novell.com>
139 * EmitContext.cs: only generate a new lambda name if we're in
142 2008-05-14 Jb Evain <jbevain@novell.com>
144 * LambdaExpression.cs, EmitContext.cs: When encountering a lambda
145 inside an ET, compile it as a read of a global. Based on a patch
146 by Roei Erez <roeie@mainsoft.com>
148 2008-05-08 Jb Evain <jbevain@novell.com>
150 * Expression.cs, EmitContext.cs: deal with call to methods
151 with byref parameters.
153 2008-05-07 Roei Erez <roeie@mainsoft.com>
155 * Add ifdef TARGET_JVM
157 2008-05-03 Jb Evain <jbevain@novell.com>
159 * LambdaExpression.cs: move checks to Expression
160 * Expression.cs: apply check for both typed and untyped lambda
161 creation, so that the constructor does not throws exception.
162 Needed to create instances of Expression<> for untyped lambda
163 factory method. Fixes #386322.
165 2008-05-02 Jb Evain <jbevain@novell.com>
167 * Expression.cs: make Emit virtual instead of abstract,
168 to allow externals libraries to extend Expression.
169 Patch by Jan Oravec <jan.oravec@6com.sk>. Fixes #386097.
171 2008-04-29 Jb Evain <jbevain@novell.com>
173 * UnaryExpression.cs (EmitPrimitiveConversion): implement.
175 2008-04-28 Jb Evain <jbevain@novell.com>
177 * EmitContext.cs: deal with globals when encountering them while
178 compiling, and not ahead of time with a dedicated visitor.
180 2008-04-27 Jb Evain <jbevain@novell.com>
182 * ConstantExpression.cs (Emit): emit properly null nullable types.
184 2008-04-27 Jb Evain <jbevain@novell.com>
186 * Expression.cs: improve method finder.
188 2008-04-24 Jb Evain <jbevain@novell.com>
190 * UnaryExpression.cs, EmitContext.cs: implement compilation
191 of Quote as a global load.
193 2008-04-23 Jb Evain <jbevain@novell.com>
195 * UnaryExpression.cs: start implementing EmitConvert.
197 2008-04-23 Jb Evain <jbevain@novell.com>
199 * ConstantExpression.cs (Emit): properly Emit null constants.
201 2008-04-23 Jb Evain <jbevain@novell.com>
203 * Expression.cs (Constant): check for assignability, not for type
204 equality, when a type is passed.
206 2008-04-23 Jb Evain <jbevain@novell.com>
208 * ExpressionPrinter.cs: ToString convert properly.
210 2008-04-22 Jb Evain <jbevain@novell.com>
212 * UnaryExpression.cs: implement IsLiftedToNull properly.
213 * Expression.cs (Convert, ConvertChecked): implemented computing
214 of IsLifted and IsLiftedToNull for conversions.
216 2008-04-22 Jb Evain <jbevain@novell.com>
218 * Expression.cs (Convert, ConvertChecked): implement.
220 2008-04-21 Jb Evain <jbevain@novell.com>
222 * Expression.cs (Call): don't rely on the fact that if the
223 instance expression is null, then it's a static call. Explicitely
224 check on the MethodInfo for that.
225 * EmitContext.cs (EmitCall): same pattern.
227 2008-04-20 Jb Evain <jbevain@novell.com>
229 * MemberMemberBinding.cs (Emit): implement.
231 2008-04-19 Jb Evain <jbevain@novell.com>
233 * EmitContext.cs: infrastructure work to attach a compiled
234 lambda expression to an execution scope, and to detect and store
235 external globals in the scope.
236 * ConstantExpression.cs: load globals from the scope.
238 2008-04-19 Jb Evain <jbevain@novell.com>
240 * ExpressionVisitor.cs (Visit): don't die because of Power.
242 2008-04-09 Jb Evain <jbevain@novell.com>
244 * Expression.cs: check for illegal booleab unary expressions.
246 2008-04-09 Jb Evain <jbevain@novell.com>
248 * UnaryExpression.cs: implement compilation of negate.
250 2008-04-09 Jb Evain <jbevain@novell.com>
252 * UnaryExpression.cs, Expression.cs: implement IsLifted and IsLifted
253 to null for simple unary operators. Implement Not compilation.
255 2008-04-08 Jb Evain <jbevain@novell.com>
257 * ElementInit.cs: emit pop if the add method doesn't return void.
259 2008-03-20 Jb Evain <jbevain@novell.com>
261 * Expression.cs: use the new and more complete IsAssignableTo
262 instead of IsAssignableFrom.
264 2008-03-19 Jb Evain <jbevain@novell.com>
266 * LambdaExpression.cs: use the new standardified IsAssignableTo,
267 fixes ExpressionTest_NewArrayBounds.TestArrayAssignability.
269 2008-03-19 Jb Evain <jbevain@novell.com>
271 * Extensions.cs (Type.IsAssignableTo): deal with arrays.
273 2008-03-13 Jb Evain <jbevain@novell.com>
275 * NewArrayExpression.cs (EmitNewArrayBounds): implement.
277 2008-03-12 Jb Evain <jbevain@novell.com>
279 * NewArrayExpression.cs (Emit): naive implementation of emit support
280 for array initialization.
282 2008-03-11 Jb Evain <jbevain@novell.com>
284 * BinaryExpression.cs: very naive implementation of emitting
287 2008-03-11 Jb Evain <jbevain@novell.com>
289 * *.cs: Move the different Emit* helpers to EmitContext,
290 so that they get used more naturally by the non Expression
293 2008-03-10 Jb Evain <jbevain@novell.com>
295 * TypeBinaryExpression.cs, Expression.cs: refactor an EmitIsInst.
296 * UnaryExpression.cs: implement TypeAs using the EmitIsInst.
298 2008-03-10 Jb Evain <jbevain@novell.com>
300 * TypeBinaryExpression.cs (Emit): implement.
302 2008-03-08 Jb Evain <jbevain@novell.com>
304 * MemberListBinding.cs (Emit): implement.
305 * MemberBinding.cs (EmitLoadMember): add helper.
307 2008-03-08 Jb Evain <jbevain@novell.com>
309 * MemberAssignment.cs (Emit): implement.
311 2008-03-08 Jb Evain <jbevain@novell.com>
313 * ElementInit.cs (Emit): implement.
315 2008-03-06 Jb Evain <jbevain@novell.com>
317 * EmitContext.cs: the DebugContext delegate the CreateDelegate
318 to a DynamicContext to avoid visibility issues in debug mode.
320 2008-03-06 Jb Evain <jbevain@novell.com>
322 * EmitContext.cs: Lambda methods bypass JIT visibility checks.
324 2008-03-06 Jb Evain <jbevain@novell.com>
326 * MethodCallExpression.cs, Expression.cs: refactor method calling
327 into a more sophisticated EmitCall in Expression.
328 * InvocationExpression.cs (Emit): implement using the previous EmitCall.
330 2008-03-06 Jb Evain <jbevain@novell.com>
332 * Expression.cs: add a EmitCall helper.
333 * MemberExpression.cs: implement property access.
335 2008-03-06 Jb Evain <jbevain@novell.com>
337 * MethodCallExpression.cs, Expression.cs: refactor a EmitLoad in Expression.
338 * MemberExpression.cs: use EmitLoad to load the instance field if needed.
340 2008-03-06 Jb Evain <jbevain@novell.com>
342 * BinaryExpression.cs, Expression.cs: move EmitStored from
343 BinaryExpression to Expression.
344 * MethodCallExpression.cs: allow method calls on structs.
346 2008-03-05 Jb Evain <jbevain@novell.com>
348 * Expression.cs: Fix the Call method which takes an array
351 2008-03-05 Jb Evain <jbevain@novell.com>
353 * Expression.cs: fix for a good chunk of lifted/liftToNull tests.
355 2008-02-26 Jb Evain <jbevain@novell.com>
357 * Expression.cs (Call): Guess the parameters type from the argument
360 2008-02-25 Jb Evain <jbevain@novell.com>
362 * NewExpression.cs (Emit): deal with value types construction.
364 2008-02-25 Jb Evain <jbevain@novell.com>
366 * Expression.cs, NewExpression.cs: deal with the fact that value types
367 don't have a parameterless constructor.
369 2008-02-24 Jb Evain <jbevain@novell.com>
371 * LambdaExpression.cs, EmitContext.cs: make compilation
372 of delegate returning void work.
374 2008-02-24 Jb Evain <jbevain@novell.com>
376 * MethodCallExpression.cs: emit call or callvirt depending
377 on the virtuality of the method.
379 2008-02-24 Jb Evain <jbevain@novell.com>
381 * LambdaExpression.cs: properly format error message.
383 2008-02-21 Jb Evain <jbevain@novell.com>
385 * BinaryExpression.cs (EmitCoalesce): fix setup_null.
387 2008-02-21 Jb Evain <jbevain@novell.com>
389 * BinaryExpression.cs (Emit): fix the both_are_null case.
391 2008-02-20 Jb Evain <jbevain@novell.com>
393 * Expression.cs, ExpressionPrinter.cs: implement MemberBind.
395 2008-02-20 Jb Evain <jbevain@novell.com>
397 * Expression.cs, ExpressionPrinter.cs: implement ListInit.
399 2008-02-19 Jb Evain <jbevain@novell.com>
401 * Expression.cs, ExpressionPrinter.cs: implement MemberInit.
403 2008-02-19 Jb Evain <jbevain@novell.com>
405 * Expression.cs, ExpressionPrinter.cs: implement last New
406 overload for anonymous types.
408 2008-02-08 Jb Evain <jbevain@novell.com>
410 * Expression.cs, InvocationExpression.cs, ExpressionPrinter.cs
411 add support for Invoke.
413 2008-02-04 Jb Evain <jbevain@novell.com>
415 * ExpressionPrinter.cs: fix printing of MemberListBinding.
417 2008-02-04 Jb Evain <jbevain@novell.com>
419 * Expression.cs, NewExpression.cs: make New(Type) test pass.
421 2008-02-04 Jb Evain <jbevain@novell.com>
423 * ExpressionPrinter.cs: fix and clean printing of ElementInit.
425 2008-02-02 Jb Evain <jbevain@novell.com>
427 * Expression.cs: fix ListBind(MemberInfo,IEnumerable<ElementInit>).
429 2008-02-02 Jb Evain <jbevain@novell.com>
431 * Expression.cs: fix ListBind(MethodInfo,IEnumerable<ElementInit>).
433 2008-02-01 Olivier Dufour <olivier.duff@gmail.com>
435 * Expression.cs, ExpressionPrinter.cs:Add ListBind
437 2008-02-01 Olivier Dufour <olivier.duff@gmail.com>
439 * Expression.cs, ExpressionPrinter.cs:Add Elementinit
441 2008-01-31 Jb Evain <jbevain@novell.com>
443 * UnaryExpression.cs: emit array length.
445 2008-01-31 Jb Evain <jbevain@novell.com>
447 * MemberExpression.cs: Simple support for emitting fields.
449 2008-01-30 Jb Evain <jbevain@novell.com>
451 * MethodCallExpression.cs: very naive implementation of Emit.
453 2008-01-30 Jb Evain <jbevain@novell.com>
455 * NewExpression.cs: add Emit support for reference types.
457 2008-01-30 Jb Evain <jbevain@novell.com>
459 * LambdaExpression.cs, EmitContext.cs: small refactoring.
460 Extract the different EmitContexts to their own file.
462 2008-01-29 Jb Evain <jbevain@novell.com>
464 * MethodCallExpression.cs, Expression.cs: complete Calls.
466 2008-01-29 Jb Evain <jbevain@novell.com>
468 * Expression.cs, NewExpression.cs, ExpressionPrinter.cs:
469 implement the first flavors of New.
471 2008-01-27 Jb Evain <jbevain@novell.com>
473 * ConditionalExpression.cs: implement Emit.
475 2008-01-27 Jb Evain <jbevain@novell.com>
477 * Expression.cs: implement the last Lambda method.
479 2008-01-27 Jb Evain <jbevain@novell.com>
481 * LambdaExpression.cs: fix the Type of the LambdaExpressions.
483 2008-01-27 Olivier Dufour <olivier.duff@gmail.com>
485 * Expression.cs, InvocationExpession.cs,
486 ListInitExpression.cs, MemberInitExpression.cs
487 NewExpression.cs : Add all missing
488 constructor in Expressions and remove the base one
490 2008-01-25 Jb Evain <jbevain@novell.com>
492 * Expression.cs, ExpressionPrinter.cs: implement Bind.
494 2008-01-25 Jb Evain <jbevain@novell.com>
496 * MemberMemberBinding.cs, MemberListBinding.cs,
497 MemberAssignment.cs, MemberBinding.cs:
500 2008-01-25 Jb Evain <jbevain@novell.com>
502 * Expression.cs: implement PropertyOrField.
504 2008-01-24 Jb Evain <jbevain@novell.com>
506 * Expression.cs, MemberExpression.cs, ExpressionPrinter.cs:
507 implement Field and Property.
509 2008-01-22 Miguel de Icaza <miguel@novell.com>
511 * BinaryExpression.cs: Unleash the power of cut and paste.
513 Bring a bunch of operatros from mcs/expression.cs
515 * Expression.cs: There is no op_LogicalAnd or op_LogicalOr, I just
516 used those from mcs, that was wrong. use the proper ones, clean
519 * BinaryExpression.cs: Add method invocations for binary methods.
521 2008-01-22 Jb Evain <jbevain@novell.com>
523 * Expression.cs, ExpressionPrinter.cs: implement NewArrayList.
525 2008-01-22 Jb Evain <jbevain@novell.com>
527 * Expression.cs, ExpressionPrinter.cs, NewArrayExpression.cs:
528 implement Expression.NewArrayBounds.
530 2008-01-22 Jb Evain <jbevain@novell.com>
532 * ExpressionPrinter.cs: fix Lambda and Equal.
534 2008-01-22 Miguel de Icaza <miguel@novell.com>
536 * BinaryExpression.cs (EmitCoalesce): Add support for emitting
539 TODO: this does not use the "Conversion" Lambda, which am not sure
540 who generates this or what it is used for.
542 (EmitLogical): Fix a couple of bugs in AndAlso, OrElse.
544 * Expression.cs: Add support for Coalesce.
545 (BinaryCoreCheck): Move more checking here, instead of the helper
546 routines, will remove them next.
548 * LambdaExpression.cs (Compile): Create the delegate last, so we
549 manage to save the assembly while debugging in case of error
551 2008-01-21 Miguel de Icaza <miguel@novell.com>
553 * Expression.cs (BinaryCoreCheck): Add checking for a few
554 operators here (to avoid doing a second pass, handles AndAlso and
557 (AndAlso, OrElse): Add some code.
559 * BinaryExpression.cs: Instead of using GetValueOrDefault use
560 get_Value, as we already probed for the lack of value.
562 Split out support for And/Or to a separate routine as the code is
563 not very easy to share with the arithmetics code.
565 2008-01-21 Marek Safar <marek.safar@gmail.com>
567 * BinaryExpression.cs: Fixed initobj initialization.
569 2008-01-21 Jb Evain <jbevain@novell.com>
571 * Expression.cs, UnaryExpression.cs, BinaryExpression.cs:
572 Move the IsUnsigned helper from BinaryExpression to Expression,
573 so it can be used in UnaryExpression.
575 2008-01-21 Miguel de Icaza <miguel@novell.com>
577 * Start code generation for nullables, currently this generates
578 incorrect code for things like:
580 Expression<Func<int?, int?, int?>> e2 = (a, b) => a + b;
581 e2.Compile ().Invoke (null, 3))
583 This should return null, but returns something else.
585 * Introduce LINQ_DBG env variable, which generates a linq file in
586 /tmp; It currently does not work as well as it should, as the
587 Func<> parameters do not mwatch the generated method.
591 2008-01-20 Miguel de Icaza <miguel@novell.com>
593 Introduce support for Nullable arguments, no code is generated for
594 these yet, its only tests + node creation behavior at this point.
596 * Expression.cs (BinaryCoreCheck): Do not allow "int?" and "int"
597 as operators, they must both be nullable.
599 NullableTypes in the arguments are transformed into the underlying
600 values when doing the method validation.
602 2008-01-18 Miguel de Icaza <miguel@novell.com>
604 * ParameterExpression.cs: Add emit support.
606 2008-01-18 Jb Evain <jbevain@novell.com>
608 * Expression[Printer|Visitor].cs: implement UnaryPlus, Not, Negate.
610 2008-01-18 Miguel de Icaza <miguel@novell.com>
612 * BinaryExpression.cs: Add support for emitting code for some
613 operators (ported from the Mono C# compiler).
617 2008-01-17 Miguel de Icaza <miguel@novell.com>
619 Beginning of code generation framework for Linq.Expressions.
620 Some code was borrowed by from the C# compiler
622 * Expression_T.cs: Fill in the blanks.
624 * LambdaExpression.cs: Validation of parameters mostly, a tiny bit
627 * ConstantExpression.cs: Mostly done, need to write tests for
628 non-fundamental types and other ValueType initializations.
630 2008-01-17 Jb Evain <jbevain@novell.com>
632 * Expression.cs: implement MakeMemberAccess.
634 2008-01-17 Jb Evain <jbevain@novell.com>
636 * Expression.cs, ExpressionPrinter.cs, BinaryExpression.cs:
637 implement ArrayIndex.
639 2008-01-17 Jb Evain <jbevain@novell.com>
641 * Expression.cs: Use TypeCode for IsInt and IsNumber.
643 2008-01-16 Miguel de Icaza <miguel@novell.com>
645 * Expression.cs: Add support for user-defined operators.
647 Put back various binary operator tests.
649 2008-01-16 Jb Evain <jbevain@novell.com>
651 * Expression.cs, ExpressionPrinter.cs: fix call for static methods.
653 2008-01-15 Miguel de Icaza <miguel@novell.com>
655 * Expression.cs: Do validation on the method parameters and use
656 the return type if provided.
658 2008-01-15 Jb Evain <jbevain@novell.com>
660 * MethodCallExpression.cs, Expression.cs
661 ExpressionPrinter.cs: Implement Call (Expression, ...)
663 2008-01-15 Jb Evain <jbevain@novell.com>
665 * Expression.cs, ConditionalExpressionExpression.cs
666 ExpressionPrinter.cs : implement Expression.Condition.
668 2008-01-15 Jb Evain <jbevain@novell.com>
671 ParameterExpression.cs,
672 ExpressionPrinter.cs: implement Expression.Parameter
674 2008-01-15 Jb Evain <jbevain@novell.com>
676 * ExpressionPrinter.cs (VisitBinaryExpression): simple
677 implementation (probably misses a few cases).
679 2008-01-14 Miguel de Icaza <miguel@novell.com>
681 * Expression.cs: Bring back the (most) of binary operators. Added
682 type checking as well and reorganized the source file by topic
683 instead of alphabetical sorting.
685 2008-01-14 Jb Evain <jbevain@novell.com>
687 * ExpressionPrinter.cs: print ArrayLength.
689 2008-01-14 Jb Evain <jbevain@novell.com>
691 * Expression.cs: TypeAs can't take value types.
692 * ExpressionPrinter.cs: implement TypeAs.
694 2008-01-14 Jb Evain <jbevain@novell.com>
696 * Expression.cs: implement TypeIs.
697 * ExpressionPrinter.cs: implement VisitTypeBinaryExpression.
698 * TypeBinaryExpression.cs: add proper ctor.
700 2008-01-14 Jb Evain <jbevain@novell.com>
702 * Expression.cs, ExpressionPrinter.cs: fix for Quote's type.
704 2008-01-14 Jb Evain <jbevain@novell.com>
706 * BinaryExpression.cs,
707 * Expression.cs: revert part of Miguel's last patch.
708 MakeBinary is expected to call the appropriate factory
709 methods. Whose methods that are responsible for creating
710 the good BinaryExpression, wether they use a custom method
713 2008-01-14 Jb Evain <jbevain@novell.com>
715 * Expression.cs: MakeUnary is expected to call the appropriate
718 2008-01-14 Miguel de Icaza <miguel@novell.com>
720 * Expression.cs (Constant, MakeBinary and consumers of it): Some
721 more fill-up changes.
723 MakeBinary will need much more work to support user-provided
726 2008-01-13 Jb Evain <jbevain@novell.com>
728 * *.cs: fresh implementation.