Skip to content

Instantly share code, notes, and snippets.

@baulig
Created March 11, 2013 07:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save baulig/5132414 to your computer and use it in GitHub Desktop.
Save baulig/5132414 to your computer and use it in GitHub Desktop.
public static void ComplexAST()
{
var a = Expression.Parameter(typeof(long), "a");
var b = Expression.Parameter(typeof(long), "b");
var test = Expression.Variable(typeof(long), "test");
var i = Expression.Variable(typeof(long), "i");
var start = Expression.Label();
var end = Expression.Label();
var check = Expression.GreaterThanOrEqual (i, Expression.Multiply (a, b));
var block = Expression.Block (
new ParameterExpression[] { test, i },
Expression.Assign (test, Expression.Constant (2L)),
Expression.Assign (i, Expression.Constant (1L)),
Expression.Label (start),
Expression.IfThen (check, Expression.Goto (end)),
Expression.MultiplyAssign (test, i),
Expression.PreIncrementAssign (i),
Expression.Goto (start),
Expression.Label(end),
test);
var lambda = Expression.Lambda<Func<long, long, long>>(block, new ParameterExpression[] { a, b });
var func = lambda.Compile();
var ret = func(3, 4);
Console.WriteLine(ret);
}
public static void Complex()
{
Func<int,int,long> lambda = (a,b) => {
long test = 2;
for (int i = 1; i < a * b; i++)
{
test *= i;
}
return test;
};
var ret = lambda(3, 4);
Console.WriteLine(ret);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment