2008-03-06 Jb Evain <jbevain@novell.com>
[mono.git] / mcs / class / System.Core / System.Linq.Expressions / ChangeLog
index 064c49a166a1c06ee7b9ef8276086530ba8b2039..8bf5f9cf2f535564cbc030a922fc9935ddbdc62c 100644 (file)
-2007-12-04  Marek Safar <marek.safar@gmail.com>
+2008-03-06  Jb Evain  <jbevain@novell.com>
 
-       * ElementInit.cs: New implementation.
-       
-       * Funclet.cs, FuncletExpression.cs, LiftExpression.cs: Removed.
-       * ListInitExpression.cs, MemberListBinding.cs, Expression.cs,
-         ExpressionType.cs, BinaryExpression.cs, NewExpression.cs: API update.
+       * EmitContext.cs: Lambda methods bypass JIT visibility checks.
 
-2007-08-17  Federico Di Gregorio <fog@initd.org>
+2008-03-06  Jb Evain  <jbevain@novell.com>
 
-       * Expression.cs: fixed Field() and Property() behaviour when accessing static
-       members (i.e., when expression is null). Also added the missing version for
-       Property().
+       * MethodCallExpression.cs, Expression.cs: refactor method calling
+       into a more sophisticated EmitCall in Expression.
+       * InvocationExpression.cs (Emit): implement using the previous EmitCall.
 
-       * MemberExpression.cs: added missing BuildString() method that differentiates
-       between static and instance methods.
+2008-03-06  Jb Evain  <jbevain@novell.com>
 
-       * Expression.cs: implemented Quote() and tests.
+       * Expression.cs: add a EmitCall helper.
+       * MemberExpression.cs: implement property access.
 
-       * Expression.cs: implemented RightShift(), added tests for it and for
-       LeftShift().
+2008-03-06  Jb Evain  <jbevain@novell.com>
 
-       * Expression.cs: checked TypeAs and added tests.
+       * MethodCallExpression.cs, Expression.cs: refactor a EmitLoad in Expression.
+       * MemberExpression.cs: use EmitLoad to load the instance field if needed.
 
-       * UnaryExpression.cs: added BuildString() case for TypeAs.
+2008-03-06  Jb Evain  <jbevain@novell.com>
 
-       * Expression.cs: added tests for TypeIs.
+       * BinaryExpression.cs, Expression.cs: move EmitStored from
+       BinaryExpression to Expression.
+       * MethodCallExpression.cs: allow method calls on structs.
 
-       * TypeBinaryExpression.cs: implemented BuildString().
+2008-03-05  Jb Evain  <jbevain@novell.com>
 
-       * Expression.cs: added three specific methods to determine when a type
-       is a number (IsNumeric), an integer (IsInteger) or an integer or a bool
-       (IsIntegerOrBool). Code taken and simplified from ExpressionUtil.
+       * Expression.cs: Fix the Call method which takes an array
+       of type arguments.
 
-       * Expression.cs: two less to do: Subtract() and SubtractChecked().
+2008-03-05  Jb Evain  <jbevain@novell.com>
 
-       * Expression.cs: implemented all versions of Or() and OrElse().
+       * Expression.cs: fix for a good chunk of lifted/liftToNull tests.
 
-       * BinaryExpression.cs: fixed OrElse case in BuildString().
+2008-02-26  Jb Evain  <jbevain@novell.com>
 
-       * Expression.cs: implemented all versions of Divide(), Modulo(),
-       Multiply(), MultiplyChecked() and tests. Call() works except for
-       generic types.
+       * Expression.cs (Call): Guess the parameters type from the argument
+       types if needed.
 
-2007-08-15  Federico Di Gregorio <fog@initd.org>
+2008-02-25  Jb Evain  <jbevain@novell.com>
 
-       * Expression.cs: implemented both versions of Bind() & tests. 
+       * NewExpression.cs (Emit): deal with value types construction.
 
-       * MemberBinding.cs: added missing override of ToString().
+2008-02-25  Jb Evain  <jbevain@novell.com>
 
-2007-08-14  Federico Di Gregorio <fog@initd.org>
+       * Expression.cs, NewExpression.cs: deal with the fact that value types
+       don't have a parameterless constructor.
 
-       * Expression.cs: implemented ArrayLength & tests.
+2008-02-24  Jb Evain  <jbevain@novell.com>
 
-       * Expression.cs: implemented all three versions of ArrayIndex method.
-
-       * MethodCallExpression.cs: implemented BuildString() method.
-
-2007-08-13  Federico Di Gregorio <fog@initd.org>
-
-       * ConstantExpression.cs: using multiple StringBuilder.Append() methods
-       instead of concatenating strings.
-
-       * Expression.cs: added AndAlso() method and validator for True and
-       False user-defined operators.
-
-       * Test: added unique IDs to all tests. 
-
-2007-08-12  Federico Di Gregorio <fog@initd.org>
-
-       * ConstantExpression.cs: fixed BuildString() to return "value(...)"
-       when the string representation of the value is equal to the type name.
-       Added appropriate checks.
-
-       * Expression.cs: fixed And() method.
-
-       * Expression.cs: Add() method uses new GetUserDefinedBinaryOperator()
-       and raise exactly the same exceptions (including exception text) as MS
-       one does.
-
-2007-07-24  Federico Di Gregorio <fog@initd.org>
-
-       * Expression.cs: modified Constant method to use "object" as the type if
-       just a null is given. Changed exception text when the passed type is not
-       nullable but value is.
-
-2007-07-13  Federico Di Gregorio <fog@initd.org>
-
-       * BinaryExpression.cs: implemented BuildString().
-
-2007-07-12  Federico Di Gregorio <fog@initd.org>
-
-    * Test/System.Linq.Expressions: added test directory and some tests.
-    
-       * Expression.cs:
-         - changed the exceptions raised on argument errors to match the ones in
-           found in the last system.core.dll (the one from SilverLight 1.1 alpha)
-         - removed the three very generic #regions and started replacing them with
-           specific ones, as found in other parts of classes code.
-
-2007-03-29  Antonello Provenzano  <antonello@deveel.com>\r
-\r
-       * ExpressionUtil.cs: \r
-               - Implemented method GetOperator for general pourposes, \r
-               moving some implementations from Expression.cs specific methods\r
-               - IsNumber now returns 'true' for sbyte and unsigned integers\r
-               - Implemented method IsInteger\r
-       * Expression.cs: Implementation of the method:\r
-               - AddChecked\r
-               - Call\r
-               - Condition\r
-               - Divide\r
-               - LeftShift\r
-               - Quote\r
-       * ExpressionType.cs: Applied Obsolete attributes\r
-       * LiftExpression.cs: New file\r
-       \r
-2007-03-27  Antonello Provenzano  <antonello@deveel.com>\r
-\r
-       * ExpressionUtil.cs: methods 'GetReadOnlyCollection' removed\r
-       to use internal extension 'ToReadOnlyCollection'.\r
-       * Expression: Removed unimplemented stubs.
-
-2007-03-27  Marek Safar  <marek.safar@gmail.com>\r
-\r
-       * InvocationExpression.cs,\r
-       * ExpressionType.cs,\r
-       * ParameterExpression.cs: Updated to match with the latest version.\r
-       \r
-2007-03-25  Antonello Provenzano  <antonello@deveel.com>\r
-\r
-       * ConstantExpression.cs: New file\r
-       * ConditionalExpression.cs: New file\r
-       * BinaryExpression.cs: New file\r
-       * ExecutionScope.cs: New file\r
-       * Expression.cs: New file\r
-       * Expression_T.cs: modified to support LambdaExpression .ctor\r
-       * ExpressionCompiler.cs: New file\r
-       * ExpressionType.cs: New file\r
-       * ExpressionUtil.cs: New file\r
-       * Funclet.cs: New file\r
-       * FuncletExpression.cs: New file\r
-       * InvocationExpression.cs: New file\r
-       * IStrongBox.cs: New file\r
-       * LambdaExpression.cs: implemented constructor and fields\r
-       * MemberAssignment.cs: New file\r
-       * MemberBinding.cs: New file\r
-       * MemberBindingType.cs: New file\r
-       * MemberListBinding.cs: New file\r
-       * MemberMemberBinding.cs: New file\r
-       * MethodCallExpression.cs: New file\r
-       * NewArrayExpression.cs: New file\r
-       * NewExpression.cs: New file\r
-       * ParameterExpression.cs: extended implementation\r
-       * StrongBox_T.cs: New file\r
-       * UnaryExpression.cs: New file\r
-       * TypeBinaryExpression.cs: New file\r
-       \r
-2007-02-16  Marek Safar  <marek.safar@gmail.com>\r
-\r
-       * Expression_T.cs: Derives from lambda.\r
-\r
-2007-02-03  Atsushi Enomoto  <atsushi@ximian.com>\r
-\r
-       * LambdaExpression.cs : new (stub) file.\r
-\r
-2007-01-19  Marek Safar  <marek.safar@gmail.com>\r
-\r
-       * Expression_T.cs: New file.\r
-\r
-2006-11-02  Marek Safar  <marek.safar@gmail.com>\r
-\r
-       * Initial checkin.\r
+       * LambdaExpression.cs, EmitContext.cs: make compilation
+       of delegate returning void work.
+
+2008-02-24  Jb Evain  <jbevain@novell.com>
+
+       * MethodCallExpression.cs: emit call or callvirt depending
+       on the virtuality of the method.
+
+2008-02-24  Jb Evain  <jbevain@novell.com>
+
+       * LambdaExpression.cs: properly format error message.
+
+2008-02-21  Jb Evain  <jbevain@novell.com>
+
+       * BinaryExpression.cs (EmitCoalesce): fix setup_null.
+
+2008-02-21  Jb Evain  <jbevain@novell.com>
+
+       * BinaryExpression.cs (Emit): fix the both_are_null case.
+
+2008-02-20  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs, ExpressionPrinter.cs: implement MemberBind.
+
+2008-02-20  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs, ExpressionPrinter.cs: implement ListInit.
+
+2008-02-19  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs, ExpressionPrinter.cs: implement MemberInit.
+
+2008-02-19  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs, ExpressionPrinter.cs: implement last New
+       overload for anonymous types.
+
+2008-02-08  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs, InvocationExpression.cs, ExpressionPrinter.cs
+               add support for Invoke.
+
+2008-02-04  Jb Evain  <jbevain@novell.com>
+
+       * ExpressionPrinter.cs: fix printing of MemberListBinding.
+
+2008-02-04  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs, NewExpression.cs: make New(Type) test pass.
+
+2008-02-04  Jb Evain  <jbevain@novell.com>
+
+       * ExpressionPrinter.cs: fix and clean printing of ElementInit.
+
+2008-02-02  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs: fix ListBind(MemberInfo,IEnumerable<ElementInit>).
+
+2008-02-02  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs: fix ListBind(MethodInfo,IEnumerable<ElementInit>).
+
+2008-02-01  Olivier Dufour  <olivier.duff@gmail.com>
+
+       * Expression.cs, ExpressionPrinter.cs:Add ListBind
+
+2008-02-01  Olivier Dufour  <olivier.duff@gmail.com>
+
+       * Expression.cs, ExpressionPrinter.cs:Add Elementinit
+
+2008-01-31  Jb Evain  <jbevain@novell.com>
+
+       * UnaryExpression.cs: emit array length.
+
+2008-01-31  Jb Evain  <jbevain@novell.com>
+
+       * MemberExpression.cs: Simple support for emitting fields.
+
+2008-01-30  Jb Evain  <jbevain@novell.com>
+
+       * MethodCallExpression.cs: very naive implementation of Emit.
+
+2008-01-30  Jb Evain  <jbevain@novell.com>
+
+       * NewExpression.cs: add Emit support for reference types.
+
+2008-01-30  Jb Evain  <jbevain@novell.com>
+
+       * LambdaExpression.cs, EmitContext.cs: small refactoring.
+       Extract the different EmitContexts to their own file.
+
+2008-01-29  Jb Evain  <jbevain@novell.com>
+
+       * MethodCallExpression.cs, Expression.cs: complete Calls.
+
+2008-01-29  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs, NewExpression.cs, ExpressionPrinter.cs:
+       implement the first flavors of New.
+
+2008-01-27  Jb Evain  <jbevain@novell.com>
+
+       * ConditionalExpression.cs: implement Emit.
+
+2008-01-27  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs: implement the last Lambda method.
+
+2008-01-27  Jb Evain  <jbevain@novell.com>
+
+       * LambdaExpression.cs: fix the Type of the LambdaExpressions.
+
+2008-01-27  Olivier Dufour  <olivier.duff@gmail.com>
+
+       * Expression.cs, InvocationExpession.cs,
+       ListInitExpression.cs, MemberInitExpression.cs
+       NewExpression.cs : Add all missing
+       constructor in Expressions and remove the base one
+
+2008-01-25  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs, ExpressionPrinter.cs: implement Bind.
+
+2008-01-25  Jb Evain  <jbevain@novell.com>
+
+       * MemberMemberBinding.cs, MemberListBinding.cs,
+       MemberAssignment.cs, MemberBinding.cs:
+       add constructors.
+
+2008-01-25  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs: implement PropertyOrField.
+
+2008-01-24  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs, MemberExpression.cs, ExpressionPrinter.cs:
+       implement Field and Property.
+
+2008-01-22  Miguel de Icaza  <miguel@novell.com>
+
+       * BinaryExpression.cs: Unleash the power of cut and paste.
+
+       Bring a bunch of operatros from mcs/expression.cs
+
+       * Expression.cs: There is no op_LogicalAnd or op_LogicalOr, I just
+       used those from mcs, that was wrong.   use the proper ones, clean
+       up the result.
+
+       * BinaryExpression.cs: Add method invocations for binary methods.
+
+2008-01-22  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs, ExpressionPrinter.cs: implement NewArrayList.
+
+2008-01-22  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs, ExpressionPrinter.cs, NewArrayExpression.cs:
+       implement Expression.NewArrayBounds.
+
+2008-01-22  Jb Evain  <jbevain@novell.com>
+
+       * ExpressionPrinter.cs: fix Lambda and Equal.
+
+2008-01-22  Miguel de Icaza  <miguel@novell.com>
+
+       * BinaryExpression.cs (EmitCoalesce): Add support for emitting
+       code for Coalesce.
+
+       TODO: this does not use the "Conversion" Lambda, which am not sure
+       who generates this or what it is used for.
+
+       (EmitLogical): Fix a couple of bugs in AndAlso, OrElse.
+
+       * Expression.cs: Add support for Coalesce.
+       (BinaryCoreCheck): Move more checking here, instead of the helper
+       routines, will remove them next.
+
+       * LambdaExpression.cs (Compile): Create the delegate last, so we
+       manage to save the assembly while debugging in case of error
+
+2008-01-21  Miguel de Icaza  <miguel@novell.com>
+
+       * Expression.cs (BinaryCoreCheck): Add checking for a few
+       operators here (to avoid doing a second pass, handles AndAlso and
+       OrElse).
+
+       (AndAlso, OrElse): Add some code.
+
+       * BinaryExpression.cs: Instead of using GetValueOrDefault use
+       get_Value, as we already probed for the lack of value.
+
+       Split out support for And/Or to a separate routine as the code is
+       not very easy to share with the arithmetics code.
+
+2008-01-21  Marek Safar  <marek.safar@gmail.com>
+
+       * BinaryExpression.cs: Fixed initobj initialization.
+
+2008-01-21  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs, UnaryExpression.cs, BinaryExpression.cs:
+       Move the IsUnsigned helper from BinaryExpression to Expression,
+       so it can be used in UnaryExpression.
+
+2008-01-21  Miguel de Icaza  <miguel@novell.com>
+
+       * Start code generation for nullables, currently this generates
+       incorrect code for things like:
+
+       Expression<Func<int?, int?, int?>> e2 = (a, b) => a + b;
+       e2.Compile ().Invoke (null, 3))
+
+       This should return null, but returns something else.
+
+       * Introduce LINQ_DBG env variable, which generates a linq file in
+       /tmp;   It currently does not work as well as it should, as the
+       Func<> parameters do not mwatch the generated method.
+       Investigate.
+
+
+2008-01-20  Miguel de Icaza  <miguel@novell.com>
+
+       Introduce support for Nullable arguments, no code is generated for
+       these yet, its only tests + node creation behavior at this point.
+
+       * Expression.cs (BinaryCoreCheck): Do not allow "int?" and "int"
+       as operators, they must both be nullable.
+
+       NullableTypes in the arguments are transformed into the underlying
+       values when doing the method validation.
+
+2008-01-18  Miguel de Icaza  <miguel@novell.com>
+
+       * ParameterExpression.cs: Add emit support.
+
+2008-01-18  Jb Evain  <jbevain@novell.com>
+
+       * Expression[Printer|Visitor].cs: implement UnaryPlus, Not, Negate.
+
+2008-01-18  Miguel de Icaza  <miguel@novell.com>
+
+       * BinaryExpression.cs: Add support for emitting code for some
+       operators (ported from the Mono C# compiler).
+
+       Add tests.
+
+2008-01-17  Miguel de Icaza  <miguel@novell.com>
+
+       Beginning of code generation framework for Linq.Expressions.
+       Some code was borrowed by from the C# compiler
+
+       * Expression_T.cs: Fill in the blanks.
+
+       * LambdaExpression.cs: Validation of parameters mostly, a tiny bit
+       of codegen.
+
+       * ConstantExpression.cs: Mostly done, need to write tests for
+       non-fundamental types and other ValueType initializations.
+
+2008-01-17  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs: implement MakeMemberAccess.
+
+2008-01-17  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs, ExpressionPrinter.cs, BinaryExpression.cs:
+       implement ArrayIndex.
+
+2008-01-17  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs: Use TypeCode for IsInt and IsNumber.
+
+2008-01-16  Miguel de Icaza  <miguel@novell.com>
+
+       * Expression.cs: Add support for user-defined operators.
+
+       Put back various binary operator tests.
+
+2008-01-16  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs, ExpressionPrinter.cs: fix call for static methods.
+
+2008-01-15  Miguel de Icaza  <miguel@novell.com>
+
+       * Expression.cs: Do validation on the method parameters and use
+       the return type if provided.
+
+2008-01-15  Jb Evain  <jbevain@novell.com>
+
+       * MethodCallExpression.cs, Expression.cs
+       ExpressionPrinter.cs: Implement Call (Expression, ...)
+
+2008-01-15  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs, ConditionalExpressionExpression.cs
+       ExpressionPrinter.cs : implement Expression.Condition.
+
+2008-01-15  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs,
+       ParameterExpression.cs,
+       ExpressionPrinter.cs: implement Expression.Parameter
+
+2008-01-15  Jb Evain  <jbevain@novell.com>
+
+       * ExpressionPrinter.cs (VisitBinaryExpression): simple
+       implementation (probably misses a few cases).
+
+2008-01-14  Miguel de Icaza  <miguel@novell.com>
+
+       * Expression.cs: Bring back the (most) of binary operators.  Added
+       type checking as well and reorganized the source file by topic
+       instead of alphabetical sorting.
+
+2008-01-14  Jb Evain  <jbevain@novell.com>
+
+       * ExpressionPrinter.cs: print ArrayLength.
+
+2008-01-14  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs: TypeAs can't take value types.
+       * ExpressionPrinter.cs: implement TypeAs.
+
+2008-01-14  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs: implement TypeIs.
+       * ExpressionPrinter.cs: implement VisitTypeBinaryExpression.
+       * TypeBinaryExpression.cs: add proper ctor.
+
+2008-01-14  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs, ExpressionPrinter.cs: fix for Quote's type.
+
+2008-01-14  Jb Evain  <jbevain@novell.com>
+
+       * BinaryExpression.cs,
+       * Expression.cs: revert part of Miguel's last patch.
+       MakeBinary is expected to call the appropriate factory
+       methods. Whose methods that are responsible for creating
+       the good BinaryExpression, wether they use a custom method
+       or not.
+
+2008-01-14  Jb Evain  <jbevain@novell.com>
+
+       * Expression.cs: MakeUnary is expected to call the appropriate
+       factory methods.
+
+2008-01-14  Miguel de Icaza  <miguel@novell.com>
+
+       * Expression.cs (Constant, MakeBinary and consumers of it): Some
+       more fill-up changes.
+
+       MakeBinary will need much more work to support user-provided
+       types.
+
+2008-01-13  Jb Evain  <jbevain@novell.com>
+
+       * *.cs: fresh implementation.