protected ESAbstractDictionary(ESBehavior esClass, AssociationType[] associations) : this(esClass, associations == null ? 3 : associations.Length * 2) { if (associations != null) { foreach (var a in associations) { add(a); } } }
public ESBehaviorDynamicMetaObject(Expression expression, BindingRestrictions restrictions, object value, ESBehavior valueClass) : base(expression, restrictions, value, valueClass) { }
public override DynamicMetaObject BindBinaryOperation(BinaryOperationBinder binder, DynamicMetaObject arg) { DynamicMetaObject messageSendMO = null; ESBehavior esClass = null; ESObjectSpace kernel; ESSymbol selector = null; switch (binder.Operation) { case ExpressionType.Add: if (createMetaObjectToSendMessage("+", argArrayFor(arg), out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.And: if (createMetaObjectToSendMessage("&", argArrayFor(arg), out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.Divide: if (createMetaObjectToSendMessage("/", argArrayFor(arg), out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.Equal: if (createMetaObjectToSendMessage("=", argArrayFor(arg), out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.ExclusiveOr: if (createMetaObjectToSendMessage("xor:", argArrayFor(arg), out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.GreaterThan: if (createMetaObjectToSendMessage(">", argArrayFor(arg), out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.GreaterThanOrEqual: if (createMetaObjectToSendMessage(">=", argArrayFor(arg), out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.LeftShift: if (createMetaObjectToSendMessage("<<", argArrayFor(arg), out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.LessThan: if (createMetaObjectToSendMessage("<", argArrayFor(arg), out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.LessThanOrEqual: if (createMetaObjectToSendMessage("<=", argArrayFor(arg), out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.Modulo: if (createMetaObjectToSendMessage("rem:", argArrayFor(arg), out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.Multiply: if (createMetaObjectToSendMessage("*", argArrayFor(arg), out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.NotEqual: if (createMetaObjectToSendMessage("~=", argArrayFor(arg), out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.Or: if (createMetaObjectToSendMessage("|", argArrayFor(arg), out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.Power: if (createMetaObjectToSendMessage("**", argArrayFor(arg), out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.RightShift: if (createMetaObjectToSendMessage(">>", argArrayFor(arg), out messageSendMO)) { return(messageSendMO); } break; case ExpressionType.Subtract: if (createMetaObjectToSendMessage("-", argArrayFor(arg), out messageSendMO)) { return(messageSendMO); } break; default: case ExpressionType.AddAssign: esClass = ValueClass; kernel = esClass.ObjectSpace; selector = kernel.symbolFor("+="); break; case ExpressionType.AndAssign: esClass = ValueClass; kernel = esClass.ObjectSpace; selector = kernel.symbolFor("&="); break; case ExpressionType.DivideAssign: esClass = ValueClass; kernel = esClass.ObjectSpace; selector = kernel.symbolFor("/="); break; case ExpressionType.ExclusiveOrAssign: esClass = ValueClass; kernel = esClass.ObjectSpace; selector = kernel.symbolFor("^="); break; case ExpressionType.LeftShiftAssign: esClass = ValueClass; kernel = esClass.ObjectSpace; selector = kernel.symbolFor("<<="); break; case ExpressionType.ModuloAssign: esClass = ValueClass; kernel = esClass.ObjectSpace; selector = kernel.symbolFor("%="); break; case ExpressionType.MultiplyAssign: esClass = ValueClass; kernel = esClass.ObjectSpace; selector = kernel.symbolFor("*="); break; case ExpressionType.OrAssign: esClass = ValueClass; kernel = esClass.ObjectSpace; selector = kernel.symbolFor("|="); break; case ExpressionType.PowerAssign: esClass = ValueClass; kernel = esClass.ObjectSpace; selector = kernel.symbolFor("**="); break; case ExpressionType.RightShiftAssign: esClass = ValueClass; kernel = esClass.ObjectSpace; selector = kernel.symbolFor(">>="); break; case ExpressionType.SubtractAssign: esClass = ValueClass; kernel = esClass.ObjectSpace; selector = kernel.symbolFor("-="); break; case ExpressionType.Extension: esClass = ValueClass; kernel = esClass.ObjectSpace; selector = kernel.symbolFor("??"); break; } if (messageSendMO == null) { messageSendMO = metaObjectToSendDoesNotUnderstand(selector, argArrayFor(arg)); } return(binder.FallbackBinaryOperation(this, arg, messageSendMO)); }
public ESDynamicMetaObject(Expression expression, BindingRestrictions restrictions, Object value, ESBehavior valueClass) : base(expression, restrictions, value) { this.valueClass = valueClass; }
public override T applyToBehavior(ESBehavior operand) { return(operation.applyToBehavior(operand)); }
public virtual T applyToBehavior(ESBehavior operand) { return(applyToESObject(operand)); }
public ESDictionary(ESBehavior esClass, ESAssociation[] associations) : base(esClass, associations) { }
public ESAssociation(ESBehavior esClass, Object key, Object value) : base(esClass, key, value) { }
public ESDictionary(ESBehavior esClass) : base(esClass) { }
public ESIdentityDictionary(ESBehavior esClass) : base(esClass) { }
protected ESAbstractAssociation(ESBehavior esClass, KeyType key, ValueType value) : base(esClass) { this.key = key; this.value = value; }
protected ESAbstractAssociation(ESBehavior esClass) : base(esClass) { }
protected ESAbstractDictionary(ESBehavior esClass, long capacity) : base(esClass) { bindings = newBindings(capacity, null); }
protected ESAbstractDictionary(ESBehavior esClass) : base(esClass) { bindings = newBindings(3, null); }
public ESMessage(ESBehavior esClass) : base(esClass) { }
public ESDictionary(ESBehavior esClass, long capacity) : base(esClass, capacity) { }
public ESMessage(ESBehavior esClass, ESSymbol selector, Object[] arguments) : base(esClass) { setSelector(selector); this.arguments = arguments; }
public ESAssociation(ESBehavior esClass) : base(esClass) { }