protected internal override Expression Eval(Context scope) { return(Expression.Call( typeof(RuntimeHelpers).GetMethod("GetItem"), Expression.Convert(_target.Eval(scope), typeof(object)), Expression.Convert(_index.Eval(scope), typeof(object)) )); }
protected internal override Expression Eval(Context scope) { if (_type == MemberType.MethodCall) { return(_expr.Eval(scope)); } return(Expression.Dynamic( scope.GetRuntime().GetGetMemberBinder(_name), typeof(object), _expr.Eval(scope) )); }
protected internal override Expression Eval(Context context) { var fun = _methodName.Eval(context); var args = new List <Expression> { fun }; args.AddRange(_argumentList.Select(a => a.Eval(context))); if (_methodName.IsMember) { return(Expression.Dynamic( // Dotted exprs must be simple invoke members, a.b.(c ...) context.GetRuntime().GetInvokeMemberBinder( new InvokeMemberBinderKey( _methodName.Name, new CallInfo(_argumentList.ToArray().Length))), typeof(object), args )); } return(Expression.Dynamic( context.GetRuntime() .GetInvokeBinder(new CallInfo(_argumentList.ToArray().Length)), typeof(object), args )); }
private Expression MakeBody(Context context) { Expression body = _body.Eval(context); LabelTarget returnLabel = context.GetReturnLabel(); if (context.Variables.Count > 0) { if (returnLabel != null) { return(Expression.Block( context.Variables.Select(name => name.Value).ToArray(), body, Expression.Label(context.GetReturnLabel(), Expression.Constant(null)) )); } return(Expression.Block( context.Variables.Select(name => name.Value).ToArray(), body)); } if (returnLabel != null) { return(Expression.Block( body, Expression.Label(context.GetReturnLabel(), Expression.Constant(null)) )); } return(body); }
protected internal override Expression Eval(Context scope) { var variable = scope.GetOrMakeLocal(_name); if (_value != null) { return(Expression.Assign(variable, Expression.Convert(_value.Eval(scope), variable.Type))); } return(VoidInstance); }
protected internal override Expression Eval(Context scope) { var loopscope = new Context(scope, "loop") { IsLoop = true, LoopBreak = Expression.Label(typeof(object), "loop break") }; return(Expression.Loop(Expression.Block(typeof(object), _body.Eval(loopscope)), loopscope.LoopBreak)); }
protected internal override Expression Eval(Context scope) { var left = _left.Eval(scope); var right = _right.Eval(scope); ConvertIfNecessary(ref left, ref right); return(Expression.Dynamic( scope.GetRuntime().GetBinaryOperationBinder(_binaryOperator), typeof(object), left, right )); }
protected internal override Expression Eval(Context scope) { var args = new List <Expression> { _target.Eval(scope) }; args.AddRange(_arguments.Select(a => a.Eval(scope))); return(Expression.Dynamic( scope.GetRuntime().GetCreateInstanceBinder( new CallInfo(_arguments.Length)), typeof(object), args )); }
protected internal override Expression Eval(Context scope) { Expression result; result = _elseStatement != null?_elseStatement.Eval(scope) : Expression.Constant(false); int index = _tests.Count; while (index-- > 0) { IfStatementTest st = _tests[index]; result = Expression.Condition(WrapBooleanTest(st.Test.Eval(scope)), Expression.Convert(st.Body.Eval(scope), typeof(object)), Expression.Convert(result, typeof(object))); } return(result); }
protected internal override Expression Eval(Context scope) { Expression expression = _expression.Eval(scope); return(expression); }
protected internal override Expression Eval(Context scope) { return(_expression.Eval(scope)); }
protected internal override Expression Eval(Context scope) { scope.ReturnLabel = Expression.Label(typeof(object)); if (_returnExpression != null) { var ret = Expression.Return(scope.ReturnLabel, RuntimeHelpers.EnsureObjectResult(_returnExpression.Eval(scope)), typeof(object)); return(ret); } return(Expression.Return(scope.ReturnLabel, Expression.Constant(true))); }
protected internal override Expression Eval(Context scope) { return(_left.SetVariable(scope, _right.Eval(scope))); }