2009-12-02 Gonzalo Paniagua Javier * Expression.cs: expression can be null for static getters. Patch from Miguel de Icaza (miguel@novell.com). 2009-11-15 Jb Evain * Expression (Call): deal with lambda expression <> delegate comparison when filtering methods. Fixes #536637. 2009-11-15 Jb Evain * Expression (Call): better filtering of generic methods. Fixes #537768. 2009-11-14 Jb Evain * UnaryExpression.cs: isolate quoted expressions. * EmitContext.cs (ParameterReplacer): new helper type to replace the parameters of isolated expressions. Fix #550722. 2009-11-14 Jb Evain * ExpressionTransformer.cs: adjust return type of all tranformation methods to make the transformer actually useful. 2009-10-08 Jb Evain * LambdaExpression.cs (Compile): use the interpreter on MonoTouch. 2009-09-03 Jb Evain * ConstantExpression.cs (Emit): add support to emit DBNull values. 2009-09-03 Jb Evain * ConstantExpression.cs (Emit): add support for emitting DateTime constants. 2009-03-05 Jb Evain * EmitContext.cs * ParameterExpression.cs: add support for hoisted locals. 2009-02-24 Jb Evain * Expression.cs (BinaryCoreCheck): fix comparison of enums 2009-02-23 Jb Evain * Expression.cs (IsNumber): actually decimal is rather a special case, and not a primitive number. 2009-02-23 Jb Evain * Expression.cs (BinaryCoreCheck): add decimal operations are provided by custom operators. 2008-12-17 Jb Evain * ExpressionTransformer.cs: fix VisitList. 2008-11-19 Jb Evain * Expression.cs: protect against open generic methods. 2008-10-08 Atsushi Enomoto * Expression.cs : give us information about which type does not implement Emit(). 2008-10-03 Jb Evain * Expression.cs: make sure we properly test complex generic methods as a Call candidate. 2008-09-22 Jb Evain * TypeBinaryExpression.cs: protect against testing void expressions. Fixes bug #428309. 2008-09-01 Jb Evain * MemberBinding.cs: make .ctor protected instead of public. 2008-09-01 Jb Evain * Expression.cs: guard against null parameters passed to Lambda. 2008-08-30 Marek Safar * MemberBinding.cs: Made MemberBinding ctor public 2008-08-07 Jb Evain * Expression.cs (GetAssociatedProperty): strengthen accessors comparisons. 2008-08-02 Zoltan Varga * BinaryExpression.cs (EmitBinaryOperator): Mask out the upper bits of the shift amount like mcs compiled code does. 2008-07-19 Jb Evain * Expression.cs (Call, Field, Property): disallow instance arguments on static members. See ms connect #339351. 2008-07-18 Jb Evain * Expression.cs, BinaryExpression.cs: fix retrieval of true and false operators. 2008-06-20 Jb Evain * LambdaExpression.cs, EmitContext.cs: refactor the emit context to handle the fact that lambdas are compiled in a general context where they share globals but are also able to use parameters from parent lambdas. (Although parameter sharing is not implemented yet). * BinaryExpression.cs (fix converted coalesce case to use the lambda compilation code). 2008-06-09 Jb Evain * Extensions.cs (Type.IsExpression): add * Expression.cs (CheckMethodArguments): modify the argument list to quote arguments when if necessary. 2008-06-09 Jb Evain * Expression.cs (CheckLambda): quote body if required. 2008-06-07 Jb Evain * BinaryExpression.cs (EmitConvertedCoalesce): implement. 2008-06-05 Jb Evain * Expression.cs (GetUserConversionMethod): check for convertion operators on both types. 2008-06-05 Jb Evain * Expression.cs (ConditionalBinaryCheck): if a method is passed, checked that the operators true and false are also defined. 2008-06-05 Jb Evain * BinaryExpression.cs (Emit): deal with binary expressions where only the left is lifted. 2008-06-05 Jb Evain * Extensions.cs: Add Type.MakeNullableType helper. * Expression.cs (MakeSimpleBinary, MakeBoolBinar): Properly creat lifted/lifted to null/not lifted user defined binary expressions. * BinaryExpression.cs (Emit): implement compilation of lifted and lifted to null user defined binary operators. 2008-06-05 Jb Evain * Expression.cs (MakeSimpleUnary): properly create lifted/not lifted unary expressions with user defined operators. * UnaryExpression.cs (Emit): fix compilation of lifted user operators. 2008-05-30 Jb Evain * UnaryExpression.cs (Emit): fix convertion from nullable to nullable types. 2008-05-29 Jb Evain * Expression.cs (Power): allow bool?. * BinaryExpression.cs: properly deal with lifted power expression. 2008-05-29 Jb Evain * BinaryExpression.cs (Emit): fix lifted andalso and orelse. 2008-05-29 Jb Evain * BinaryExpression.cs (Emit): properly emit lifted to null relational binary expressions. 2008-05-28 Jb Evain * BinaryExpression.cs (Emit): rework compilation of arithmetic and relational lifted binary expressions. 2008-05-28 Jb Evain * UnaryExpression.cs (Emit): implement support for compiling lifted unary expressions. 2008-05-27 Jb Evain * UnaryExpression.cs (EmitConvert): implement nullable to nullable convert. 2008-05-20 Roei Erez * Extensions.cs: Add 'IsGenericImplementationOf' extension method 2008-05-15 Jb Evain * UnaryExpression.cs, EmitContext.cs: emit convert from and to nullable types. 2008-05-15 Jb Evain * Extensions.cs: add a few useful extensions such as IsGenericInstanceOf and MakeGenericFrom. 2008-05-15 Roei Erez * ExpressionTransformer.cs: Add a base class for transforming Expressions. In use at AsQueryable() implementation. 2008-05-14 Jb Evain * EmitContext.cs: only generate a new lambda name if we're in a debug context. 2008-05-14 Jb Evain * LambdaExpression.cs, EmitContext.cs: When encountering a lambda inside an ET, compile it as a read of a global. Based on a patch by Roei Erez 2008-05-08 Jb Evain * Expression.cs, EmitContext.cs: deal with call to methods with byref parameters. 2008-05-07 Roei Erez * Add ifdef TARGET_JVM 2008-05-03 Jb Evain * LambdaExpression.cs: move checks to Expression * Expression.cs: apply check for both typed and untyped lambda creation, so that the constructor does not throws exception. Needed to create instances of Expression<> for untyped lambda factory method. Fixes #386322. 2008-05-02 Jb Evain * Expression.cs: make Emit virtual instead of abstract, to allow externals libraries to extend Expression. Patch by Jan Oravec . Fixes #386097. 2008-04-29 Jb Evain * UnaryExpression.cs (EmitPrimitiveConversion): implement. 2008-04-28 Jb Evain * EmitContext.cs: deal with globals when encountering them while compiling, and not ahead of time with a dedicated visitor. 2008-04-27 Jb Evain * ConstantExpression.cs (Emit): emit properly null nullable types. 2008-04-27 Jb Evain * Expression.cs: improve method finder. 2008-04-24 Jb Evain * UnaryExpression.cs, EmitContext.cs: implement compilation of Quote as a global load. 2008-04-23 Jb Evain * UnaryExpression.cs: start implementing EmitConvert. 2008-04-23 Jb Evain * ConstantExpression.cs (Emit): properly Emit null constants. 2008-04-23 Jb Evain * Expression.cs (Constant): check for assignability, not for type equality, when a type is passed. 2008-04-23 Jb Evain * ExpressionPrinter.cs: ToString convert properly. 2008-04-22 Jb Evain * UnaryExpression.cs: implement IsLiftedToNull properly. * Expression.cs (Convert, ConvertChecked): implemented computing of IsLifted and IsLiftedToNull for conversions. 2008-04-22 Jb Evain * Expression.cs (Convert, ConvertChecked): implement. 2008-04-21 Jb Evain * Expression.cs (Call): don't rely on the fact that if the instance expression is null, then it's a static call. Explicitely check on the MethodInfo for that. * EmitContext.cs (EmitCall): same pattern. 2008-04-20 Jb Evain * MemberMemberBinding.cs (Emit): implement. 2008-04-19 Jb Evain * EmitContext.cs: infrastructure work to attach a compiled lambda expression to an execution scope, and to detect and store external globals in the scope. * ConstantExpression.cs: load globals from the scope. 2008-04-19 Jb Evain * ExpressionVisitor.cs (Visit): don't die because of Power. 2008-04-09 Jb Evain * Expression.cs: check for illegal booleab unary expressions. 2008-04-09 Jb Evain * UnaryExpression.cs: implement compilation of negate. 2008-04-09 Jb Evain * UnaryExpression.cs, Expression.cs: implement IsLifted and IsLifted to null for simple unary operators. Implement Not compilation. 2008-04-08 Jb Evain * ElementInit.cs: emit pop if the add method doesn't return void. 2008-03-20 Jb Evain * Expression.cs: use the new and more complete IsAssignableTo instead of IsAssignableFrom. 2008-03-19 Jb Evain * LambdaExpression.cs: use the new standardified IsAssignableTo, fixes ExpressionTest_NewArrayBounds.TestArrayAssignability. 2008-03-19 Jb Evain * Extensions.cs (Type.IsAssignableTo): deal with arrays. 2008-03-13 Jb Evain * NewArrayExpression.cs (EmitNewArrayBounds): implement. 2008-03-12 Jb Evain * NewArrayExpression.cs (Emit): naive implementation of emit support for array initialization. 2008-03-11 Jb Evain * BinaryExpression.cs: very naive implementation of emitting array accesses. 2008-03-11 Jb Evain * *.cs: Move the different Emit* helpers to EmitContext, so that they get used more naturally by the non Expression types. 2008-03-10 Jb Evain * TypeBinaryExpression.cs, Expression.cs: refactor an EmitIsInst. * UnaryExpression.cs: implement TypeAs using the EmitIsInst. 2008-03-10 Jb Evain * TypeBinaryExpression.cs (Emit): implement. 2008-03-08 Jb Evain * MemberListBinding.cs (Emit): implement. * MemberBinding.cs (EmitLoadMember): add helper. 2008-03-08 Jb Evain * MemberAssignment.cs (Emit): implement. 2008-03-08 Jb Evain * ElementInit.cs (Emit): implement. 2008-03-06 Jb Evain * EmitContext.cs: the DebugContext delegate the CreateDelegate to a DynamicContext to avoid visibility issues in debug mode. 2008-03-06 Jb Evain * EmitContext.cs: Lambda methods bypass JIT visibility checks. 2008-03-06 Jb Evain * MethodCallExpression.cs, Expression.cs: refactor method calling into a more sophisticated EmitCall in Expression. * InvocationExpression.cs (Emit): implement using the previous EmitCall. 2008-03-06 Jb Evain * Expression.cs: add a EmitCall helper. * MemberExpression.cs: implement property access. 2008-03-06 Jb Evain * MethodCallExpression.cs, Expression.cs: refactor a EmitLoad in Expression. * MemberExpression.cs: use EmitLoad to load the instance field if needed. 2008-03-06 Jb Evain * BinaryExpression.cs, Expression.cs: move EmitStored from BinaryExpression to Expression. * MethodCallExpression.cs: allow method calls on structs. 2008-03-05 Jb Evain * Expression.cs: Fix the Call method which takes an array of type arguments. 2008-03-05 Jb Evain * Expression.cs: fix for a good chunk of lifted/liftToNull tests. 2008-02-26 Jb Evain * Expression.cs (Call): Guess the parameters type from the argument types if needed. 2008-02-25 Jb Evain * NewExpression.cs (Emit): deal with value types construction. 2008-02-25 Jb Evain * Expression.cs, NewExpression.cs: deal with the fact that value types don't have a parameterless constructor. 2008-02-24 Jb Evain * LambdaExpression.cs, EmitContext.cs: make compilation of delegate returning void work. 2008-02-24 Jb Evain * MethodCallExpression.cs: emit call or callvirt depending on the virtuality of the method. 2008-02-24 Jb Evain * LambdaExpression.cs: properly format error message. 2008-02-21 Jb Evain * BinaryExpression.cs (EmitCoalesce): fix setup_null. 2008-02-21 Jb Evain * BinaryExpression.cs (Emit): fix the both_are_null case. 2008-02-20 Jb Evain * Expression.cs, ExpressionPrinter.cs: implement MemberBind. 2008-02-20 Jb Evain * Expression.cs, ExpressionPrinter.cs: implement ListInit. 2008-02-19 Jb Evain * Expression.cs, ExpressionPrinter.cs: implement MemberInit. 2008-02-19 Jb Evain * Expression.cs, ExpressionPrinter.cs: implement last New overload for anonymous types. 2008-02-08 Jb Evain * Expression.cs, InvocationExpression.cs, ExpressionPrinter.cs add support for Invoke. 2008-02-04 Jb Evain * ExpressionPrinter.cs: fix printing of MemberListBinding. 2008-02-04 Jb Evain * Expression.cs, NewExpression.cs: make New(Type) test pass. 2008-02-04 Jb Evain * ExpressionPrinter.cs: fix and clean printing of ElementInit. 2008-02-02 Jb Evain * Expression.cs: fix ListBind(MemberInfo,IEnumerable). 2008-02-02 Jb Evain * Expression.cs: fix ListBind(MethodInfo,IEnumerable). 2008-02-01 Olivier Dufour * Expression.cs, ExpressionPrinter.cs:Add ListBind 2008-02-01 Olivier Dufour * Expression.cs, ExpressionPrinter.cs:Add Elementinit 2008-01-31 Jb Evain * UnaryExpression.cs: emit array length. 2008-01-31 Jb Evain * MemberExpression.cs: Simple support for emitting fields. 2008-01-30 Jb Evain * MethodCallExpression.cs: very naive implementation of Emit. 2008-01-30 Jb Evain * NewExpression.cs: add Emit support for reference types. 2008-01-30 Jb Evain * LambdaExpression.cs, EmitContext.cs: small refactoring. Extract the different EmitContexts to their own file. 2008-01-29 Jb Evain * MethodCallExpression.cs, Expression.cs: complete Calls. 2008-01-29 Jb Evain * Expression.cs, NewExpression.cs, ExpressionPrinter.cs: implement the first flavors of New. 2008-01-27 Jb Evain * ConditionalExpression.cs: implement Emit. 2008-01-27 Jb Evain * Expression.cs: implement the last Lambda method. 2008-01-27 Jb Evain * LambdaExpression.cs: fix the Type of the LambdaExpressions. 2008-01-27 Olivier Dufour * 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 * Expression.cs, ExpressionPrinter.cs: implement Bind. 2008-01-25 Jb Evain * MemberMemberBinding.cs, MemberListBinding.cs, MemberAssignment.cs, MemberBinding.cs: add constructors. 2008-01-25 Jb Evain * Expression.cs: implement PropertyOrField. 2008-01-24 Jb Evain * Expression.cs, MemberExpression.cs, ExpressionPrinter.cs: implement Field and Property. 2008-01-22 Miguel de Icaza * 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 * Expression.cs, ExpressionPrinter.cs: implement NewArrayList. 2008-01-22 Jb Evain * Expression.cs, ExpressionPrinter.cs, NewArrayExpression.cs: implement Expression.NewArrayBounds. 2008-01-22 Jb Evain * ExpressionPrinter.cs: fix Lambda and Equal. 2008-01-22 Miguel de Icaza * 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 * 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 * BinaryExpression.cs: Fixed initobj initialization. 2008-01-21 Jb Evain * 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 * Start code generation for nullables, currently this generates incorrect code for things like: Expression> 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 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 * ParameterExpression.cs: Add emit support. 2008-01-18 Jb Evain * Expression[Printer|Visitor].cs: implement UnaryPlus, Not, Negate. 2008-01-18 Miguel de Icaza * BinaryExpression.cs: Add support for emitting code for some operators (ported from the Mono C# compiler). Add tests. 2008-01-17 Miguel de Icaza 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 * Expression.cs: implement MakeMemberAccess. 2008-01-17 Jb Evain * Expression.cs, ExpressionPrinter.cs, BinaryExpression.cs: implement ArrayIndex. 2008-01-17 Jb Evain * Expression.cs: Use TypeCode for IsInt and IsNumber. 2008-01-16 Miguel de Icaza * Expression.cs: Add support for user-defined operators. Put back various binary operator tests. 2008-01-16 Jb Evain * Expression.cs, ExpressionPrinter.cs: fix call for static methods. 2008-01-15 Miguel de Icaza * Expression.cs: Do validation on the method parameters and use the return type if provided. 2008-01-15 Jb Evain * MethodCallExpression.cs, Expression.cs ExpressionPrinter.cs: Implement Call (Expression, ...) 2008-01-15 Jb Evain * Expression.cs, ConditionalExpressionExpression.cs ExpressionPrinter.cs : implement Expression.Condition. 2008-01-15 Jb Evain * Expression.cs, ParameterExpression.cs, ExpressionPrinter.cs: implement Expression.Parameter 2008-01-15 Jb Evain * ExpressionPrinter.cs (VisitBinaryExpression): simple implementation (probably misses a few cases). 2008-01-14 Miguel de Icaza * 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 * ExpressionPrinter.cs: print ArrayLength. 2008-01-14 Jb Evain * Expression.cs: TypeAs can't take value types. * ExpressionPrinter.cs: implement TypeAs. 2008-01-14 Jb Evain * Expression.cs: implement TypeIs. * ExpressionPrinter.cs: implement VisitTypeBinaryExpression. * TypeBinaryExpression.cs: add proper ctor. 2008-01-14 Jb Evain * Expression.cs, ExpressionPrinter.cs: fix for Quote's type. 2008-01-14 Jb Evain * 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 * Expression.cs: MakeUnary is expected to call the appropriate factory methods. 2008-01-14 Miguel de Icaza * 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 * *.cs: fresh implementation.