2008-10-03  Jb Evain  <jbevain@novell.com>

	* Expression.cs: make sure we properly test complex generic methods
	as a Call candidate.

2008-09-22  Jb Evain  <jbevain@novell.com>

	* TypeBinaryExpression.cs: protect against testing void expressions.
	Fixes bug #428309.

2008-09-01  Jb Evain  <jbevain@novell.com>

	* MemberBinding.cs: make .ctor protected.

2008-09-01  Jb Evain  <jbevain@novell.com>

	* Expression.cs: guard against null parameters passed to Lambda.

2008-08-07  Jb Evain  <jbevain@novell.com>

	* Expression.cs (GetAssociatedProperty): strengthen accessors
	comparisons.

2008-08-02  Zoltan Varga  <vargaz@gmail.com>

	* BinaryExpression.cs (EmitBinaryOperator): Mask out the upper bits of the
	shift amount like mcs compiled code does.

2008-07-19  Jb Evain  <jbevain@novell.com>

	* Expression.cs (Call, Field, Property): disallow instance arguments
	on static members. See ms connect #339351.

2008-07-18  Jb Evain  <jbevain@novell.com>

	* Expression.cs, BinaryExpression.cs: fix retrieval of true and false
	operators.

2008-06-20  Jb Evain  <jbevain@novell.com>

	* 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  <jbevain@novell.com>

	* Extensions.cs (Type.IsExpression): add
	* Expression.cs (CheckMethodArguments): modify the argument list
	to quote arguments when if necessary.


2008-06-09  Jb Evain  <jbevain@novell.com>

	* Expression.cs (CheckLambda): quote body if required.

2008-06-07  Jb Evain  <jbevain@novell.com>

	* BinaryExpression.cs (EmitConvertedCoalesce): implement.

2008-06-05  Jb Evain  <jbevain@novell.com>

	* Expression.cs (GetUserConversionMethod): check for convertion
	operators on both types.

2008-06-05  Jb Evain  <jbevain@novell.com>

	* Expression.cs (ConditionalBinaryCheck): if a method is passed,
	checked that the operators true and false are also defined.

2008-06-05  Jb Evain  <jbevain@novell.com>

	* BinaryExpression.cs (Emit): deal with binary expressions
	where only the left is lifted.

2008-06-05  Jb Evain  <jbevain@novell.com>

	* 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  <jbevain@novell.com>

	* 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  <jbevain@novell.com>

	* UnaryExpression.cs (Emit): fix convertion from nullable
	to nullable types.

2008-05-29  Jb Evain  <jbevain@novell.com>

	* Expression.cs (Power): allow bool?.
	* BinaryExpression.cs: properly deal with lifted power expression.

2008-05-29  Jb Evain  <jbevain@novell.com>

	* BinaryExpression.cs (Emit): fix lifted andalso and orelse.

2008-05-29  Jb Evain  <jbevain@novell.com>

	* BinaryExpression.cs (Emit): properly emit lifted to null
	relational binary expressions.

2008-05-28  Jb Evain  <jbevain@novell.com>

	* BinaryExpression.cs (Emit): rework compilation of
	arithmetic and relational lifted binary expressions.

2008-05-28  Jb Evain  <jbevain@novell.com>

	* UnaryExpression.cs (Emit): implement support for compiling
	lifted unary expressions.

2008-05-27  Jb Evain  <jbevain@novell.com>

	* UnaryExpression.cs (EmitConvert): implement nullable to nullable
	convert.

2008-05-20  Roei Erez  <roeie@mainsoft.com>

	* Extensions.cs: Add 'IsGenericImplementationOf' extension method

2008-05-15  Jb Evain  <jbevain@novell.com>

	* UnaryExpression.cs, EmitContext.cs: emit convert from and
	to nullable types.

2008-05-15  Jb Evain  <jbevain@novell.com>

	* Extensions.cs: add a few useful extensions such as
	IsGenericInstanceOf and MakeGenericFrom.

2008-05-15  Roei Erez  <roeie@mainsoft.com>

	* ExpressionTransformer.cs: Add a base class for transforming Expressions.
	In use at AsQueryable() implementation.

2008-05-14  Jb Evain  <jbevain@novell.com>

	* EmitContext.cs: only generate a new lambda name if we're in
	a debug context.

2008-05-14  Jb Evain  <jbevain@novell.com>

	* 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 <roeie@mainsoft.com>

2008-05-08  Jb Evain  <jbevain@novell.com>

	* Expression.cs, EmitContext.cs: deal with call to methods
	with byref parameters.

2008-05-07  Roei Erez  <roeie@mainsoft.com>

	* Add ifdef TARGET_JVM

2008-05-03  Jb Evain  <jbevain@novell.com>

	* 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  <jbevain@novell.com>

	* Expression.cs: make Emit virtual instead of abstract,
	to allow externals libraries to extend Expression.
	Patch by Jan Oravec <jan.oravec@6com.sk>. Fixes #386097.

2008-04-29  Jb Evain  <jbevain@novell.com>

	* UnaryExpression.cs (EmitPrimitiveConversion): implement.

2008-04-28  Jb Evain  <jbevain@novell.com>

	* EmitContext.cs: deal with globals when encountering them while
	compiling, and not ahead of time with a dedicated visitor.

2008-04-27  Jb Evain  <jbevain@novell.com>

	* ConstantExpression.cs (Emit): emit properly null nullable types.

2008-04-27  Jb Evain  <jbevain@novell.com>

	* Expression.cs: improve method finder.

2008-04-24  Jb Evain  <jbevain@novell.com>

	* UnaryExpression.cs, EmitContext.cs: implement compilation
	of Quote as a global load.

2008-04-23  Jb Evain  <jbevain@novell.com>

	* UnaryExpression.cs: start implementing EmitConvert.

2008-04-23  Jb Evain  <jbevain@novell.com>

	* ConstantExpression.cs (Emit): properly Emit null constants.

2008-04-23  Jb Evain  <jbevain@novell.com>

	* Expression.cs (Constant): check for assignability, not for type
	equality, when a type is passed.

2008-04-23  Jb Evain  <jbevain@novell.com>

	* ExpressionPrinter.cs: ToString convert properly.

2008-04-22  Jb Evain  <jbevain@novell.com>

	* UnaryExpression.cs: implement IsLiftedToNull properly.
	* Expression.cs (Convert, ConvertChecked): implemented computing
	of IsLifted and IsLiftedToNull for conversions.

2008-04-22  Jb Evain  <jbevain@novell.com>

	* Expression.cs (Convert, ConvertChecked): implement.

2008-04-21  Jb Evain  <jbevain@novell.com>

	* 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  <jbevain@novell.com>

	* MemberMemberBinding.cs (Emit): implement.

2008-04-19  Jb Evain  <jbevain@novell.com>

	* 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  <jbevain@novell.com>

	* ExpressionVisitor.cs (Visit): don't die because of Power.

2008-04-09  Jb Evain  <jbevain@novell.com>

	* Expression.cs: check for illegal booleab unary expressions.

2008-04-09  Jb Evain  <jbevain@novell.com>

	* UnaryExpression.cs: implement compilation of negate.

2008-04-09  Jb Evain  <jbevain@novell.com>

	* UnaryExpression.cs, Expression.cs: implement IsLifted and IsLifted
	to null for simple unary operators. Implement Not compilation.

2008-04-08  Jb Evain  <jbevain@novell.com>

	* ElementInit.cs: emit pop if the add method doesn't return void.

2008-03-20  Jb Evain  <jbevain@novell.com>

	* Expression.cs: use the new and more complete IsAssignableTo
	instead of IsAssignableFrom.

2008-03-19  Jb Evain  <jbevain@novell.com>

	* LambdaExpression.cs: use the new standardified IsAssignableTo,
	fixes ExpressionTest_NewArrayBounds.TestArrayAssignability.

2008-03-19  Jb Evain  <jbevain@novell.com>

	* Extensions.cs (Type.IsAssignableTo): deal with arrays.

2008-03-13  Jb Evain  <jbevain@novell.com>

	* NewArrayExpression.cs (EmitNewArrayBounds): implement.

2008-03-12  Jb Evain  <jbevain@novell.com>

	* NewArrayExpression.cs (Emit): naive implementation of emit support
	for array initialization.

2008-03-11  Jb Evain  <jbevain@novell.com>

	* BinaryExpression.cs: very naive implementation of emitting
	array accesses.

2008-03-11  Jb Evain  <jbevain@novell.com>

	* *.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  <jbevain@novell.com>

	* TypeBinaryExpression.cs, Expression.cs: refactor an EmitIsInst.
	* UnaryExpression.cs: implement TypeAs using the EmitIsInst.

2008-03-10  Jb Evain  <jbevain@novell.com>

	* TypeBinaryExpression.cs (Emit): implement.

2008-03-08  Jb Evain  <jbevain@novell.com>

	* MemberListBinding.cs (Emit): implement.
	* MemberBinding.cs (EmitLoadMember): add helper.

2008-03-08  Jb Evain  <jbevain@novell.com>

	* MemberAssignment.cs (Emit): implement.

2008-03-08  Jb Evain  <jbevain@novell.com>

	* ElementInit.cs (Emit): implement.

2008-03-06  Jb Evain  <jbevain@novell.com>

	* EmitContext.cs: the DebugContext delegate the CreateDelegate
	to a DynamicContext to avoid visibility issues in debug mode.

2008-03-06  Jb Evain  <jbevain@novell.com>

	* EmitContext.cs: Lambda methods bypass JIT visibility checks.

2008-03-06  Jb Evain  <jbevain@novell.com>

	* 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  <jbevain@novell.com>

	* Expression.cs: add a EmitCall helper.
	* MemberExpression.cs: implement property access.

2008-03-06  Jb Evain  <jbevain@novell.com>

	* 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  <jbevain@novell.com>

	* BinaryExpression.cs, Expression.cs: move EmitStored from
	BinaryExpression to Expression.
	* MethodCallExpression.cs: allow method calls on structs.

2008-03-05  Jb Evain  <jbevain@novell.com>

	* Expression.cs: Fix the Call method which takes an array
	of type arguments.

2008-03-05  Jb Evain  <jbevain@novell.com>

	* Expression.cs: fix for a good chunk of lifted/liftToNull tests.

2008-02-26  Jb Evain  <jbevain@novell.com>

	* Expression.cs (Call): Guess the parameters type from the argument
	types if needed.

2008-02-25  Jb Evain  <jbevain@novell.com>

	* NewExpression.cs (Emit): deal with value types construction.

2008-02-25  Jb Evain  <jbevain@novell.com>

	* Expression.cs, NewExpression.cs: deal with the fact that value types
	don't have a parameterless constructor.

2008-02-24  Jb Evain  <jbevain@novell.com>

	* 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.
