private IEnumerable <Expression> Convert(IEnumerable <LinqExp.Expression> linqExpressions) { return(linqExpressions.Project(arg => (arg.NodeType == LinqExp.ExpressionType.Quote) ? Expression.Constant(((LinqExp.UnaryExpression)arg).Operand, arg.Type) : ConvertExp(arg))); }
public override Expression asCLRSetValueExpression(Expression newValue) { return(Expression.Condition( isMutable, Expression.Assign(Expression.ArrayAccess(namedSlots, slotIndex), newValue), Expression.Block( TypeGuru.objectType, Expression.Throw(Expression.Constant(new ImmutableObjectException())), newValue))); }
public override Expression Bind(Object[] args, ReadOnlyCollection <ParameterExpression> parameters, LabelTarget returnLabel) { Expression testRuleValidityExpression = null; Expression getVariableValueExpression = null; doAllButFinalBinding( args, (BindingHandle handle) => { testRuleValidityExpression = Expression.Constant(true); var handleConstant = Expression.Constant(handle); getVariableValueExpression = handle.IsDirect ? Expression.Field(handleConstant, TypeGuru.directBindingHandleType, "value") : Expression.Property(handleConstant, "Value"); }); return(Expression .IfThen( testRuleValidityExpression, Expression.Return(returnLabel, getVariableValueExpression))); }
public override Expression Bind(Object[] args, ReadOnlyCollection <ParameterExpression> parameters, LabelTarget returnLabel) { Expression testRuleValidityExpression = null; Expression setVariableValueExpression = null; ParameterExpression value = parameters[1]; doAllButFinalBinding( args, (BindingHandle handle) => { testRuleValidityExpression = Expression.Constant(true); setVariableValueExpression = Expression.Assign( Expression.Property(Expression.Constant(handle), "Value"), value); }); return(Expression .IfThen( testRuleValidityExpression, Expression.Return(returnLabel, setVariableValueExpression))); }
public override DynamicMetaObject BindUnaryOperation(UnaryOperationBinder binder) { DynamicMetaObject messageSendMO; Expression value; DynamicMetaObject arg; switch (binder.Operation) { case ExpressionType.Negate: if (createMetaObjectToSendMessage("negated", DynamicBindingGuru.emptyArgArray, out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.UnaryPlus: if (createMetaObjectToSendMessage("abs", DynamicBindingGuru.emptyArgArray, out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.Not: if (createMetaObjectToSendMessage("not", DynamicBindingGuru.emptyArgArray, out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.Decrement: if (createMetaObjectToSendMessage("decrement", DynamicBindingGuru.emptyArgArray, out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.Increment: if (createMetaObjectToSendMessage("increment", DynamicBindingGuru.emptyArgArray, out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.OnesComplement: if (createMetaObjectToSendMessage("bitInvert", DynamicBindingGuru.emptyArgArray, out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.IsTrue: value = Expression.Constant(true); arg = value.asDynamicMetaObject(BindingRestrictions.Empty, true); if (createMetaObjectToSendMessage("=", argArrayFor(arg), out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.IsFalse: value = Expression.Constant(false); arg = value.asDynamicMetaObject(BindingRestrictions.Empty, false); if (createMetaObjectToSendMessage("=", argArrayFor(arg), out messageSendMO)) { return(messageSendMO); } break; default: case ExpressionType.Extension: messageSendMO = null; break; } if (messageSendMO == null) { var esClass = ValueClass; var kernel = esClass.ObjectSpace; var selector = kernel.symbolFor("??"); messageSendMO = metaObjectToSendDoesNotUnderstand(selector, DynamicBindingGuru.emptyArgArray); } return(binder.FallbackUnaryOperation(this, messageSendMO)); }
public override DynamicMetaObject BindDeleteMember(DeleteMemberBinder binder) { DynamicMetaObject messageSendMO; var kernel = ValueClass.ObjectSpace; var memberName = kernel.symbolFor(binder.Name); if (createMetaObjectToSendMessage("removeKey:", DynamicBindingGuru.argArrayFor(Expression.Constant(memberName).asDynamicMetaObject(BindingRestrictions.Empty, memberName)), out messageSendMO)) { return(messageSendMO); } return(binder.FallbackDeleteMember(this, messageSendMO)); }
public override Expression asCLRSetValueExpression(Expression newValue) { return(Expression.Throw(Expression.Constant("Method and block parameters are not assignable (" + NameString + ")"), typeof(ImmutableBindingException))); }
public ConstantExpression messageSendCallSiteConstantFor(MessageReceiverKind receiverKind, BehavioralObject selfReceiverClass, ESSymbol messageSelector) { switch (receiverKind) { case MessageReceiverKind.General: logMessageSent(messageSelector); break; case MessageReceiverKind.Self: logMessageSentToSelf(messageSelector); break; case MessageReceiverKind.Super: logMessageSentToSuper(messageSelector); break; case MessageReceiverKind.ThisContext: logMessageSentToThisContext(messageSelector); break; } var binder = MessageSendBinderRegistry.canonicalBinderFor(receiverKind, selfReceiverClass, messageSelector); switch (messageSelector.NumArgs) { case 0: return(Expression.Constant(CallSite <Functor2 <Object, CallSite, Object> > .Create(binder))); case 1: return(Expression.Constant(CallSite <Functor3 <Object, CallSite, Object, Object> > .Create(binder))); case 2: return(Expression.Constant(CallSite <Functor4 <Object, CallSite, Object, Object, Object> > .Create(binder))); case 3: return(Expression.Constant(CallSite <Functor5 <Object, CallSite, Object, Object, Object, Object> > .Create(binder))); case 4: return(Expression.Constant(CallSite <Functor6 <Object, CallSite, Object, Object, Object, Object, Object> > .Create(binder))); case 5: return(Expression.Constant(CallSite <Functor7 <Object, CallSite, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 6: return(Expression.Constant(CallSite <Functor8 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 7: return(Expression.Constant(CallSite <Functor9 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 8: return(Expression.Constant(CallSite <Functor10 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 9: return(Expression.Constant(CallSite <Functor11 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 10: return(Expression.Constant(CallSite <Functor12 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 11: return(Expression.Constant(CallSite <Functor13 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 12: return(Expression.Constant(CallSite <Functor14 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 13: return(Expression.Constant(CallSite <Functor15 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 14: return(Expression.Constant(CallSite <Functor16 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 15: return(Expression.Constant(CallSite <Functor17 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 16: return(Expression.Constant(CallSite <Functor18 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 17: return(Expression.Constant(CallSite <Functor19 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 18: return(Expression.Constant(CallSite <Functor20 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 19: return(Expression.Constant(CallSite <Functor21 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 20: return(Expression.Constant(CallSite <Functor22 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 21: return(Expression.Constant(CallSite <Functor23 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 22: return(Expression.Constant(CallSite <Functor24 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 23: return(Expression.Constant(CallSite <Functor25 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 24: return(Expression.Constant(CallSite <Functor26 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 25: return(Expression.Constant(CallSite <Functor27 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 26: return(Expression.Constant(CallSite <Functor28 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 27: return(Expression.Constant(CallSite <Functor29 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 28: return(Expression.Constant(CallSite <Functor30 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 29: return(Expression.Constant(CallSite <Functor31 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 30: return(Expression.Constant(CallSite <Functor32 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 31: return(Expression.Constant(CallSite <Functor33 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); case 32: return(Expression.Constant(CallSite <Functor34 <Object, CallSite, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object> > .Create(binder))); default: return(null); } }
public ConstantExpression setVariableValueCallSiteConstantFor(NamespaceObject environment, ESSymbol variableName) { return(Expression.Constant(CallSite <Functor3 <Object, CallSite, Object, Object> > .Create(canonicalSetVariableBinderFor(environment, variableName)))); }
public CodeGenerationContext(ESCompiler compiler) { identityExpression = Expression.Constant(identity); objectSpace = compiler.ObjectSpace; bindToKernel(); }
private static Expression Convert(LinqExp.ConstantExpression linqConstant) => Expression.Constant(linqConstant.Value, linqConstant.Type);