コード例 #1
0
ファイル: ESDictionaries.cs プロジェクト: vlastik01/cSharp
 protected ESAbstractDictionary(ESBehavior esClass, AssociationType[] associations) : this(esClass, associations == null ? 3 : associations.Length * 2)
 {
     if (associations != null)
     {
         foreach (var a in associations)
         {
             add(a);
         }
     }
 }
コード例 #2
0
 public ESBehaviorDynamicMetaObject(Expression expression, BindingRestrictions restrictions, object value, ESBehavior valueClass) : base(expression, restrictions, value, valueClass)
 {
 }
コード例 #3
0
        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));
        }
コード例 #4
0
 public ESDynamicMetaObject(Expression expression, BindingRestrictions restrictions, Object value, ESBehavior valueClass) : base(expression, restrictions, value)
 {
     this.valueClass = valueClass;
 }
コード例 #5
0
ファイル: ESObjectVisitor.cs プロジェクト: vlastik01/cSharp
 public override T applyToBehavior(ESBehavior operand)
 {
     return(operation.applyToBehavior(operand));
 }
コード例 #6
0
ファイル: ESObjectVisitor.cs プロジェクト: vlastik01/cSharp
 public virtual T applyToBehavior(ESBehavior operand)
 {
     return(applyToESObject(operand));
 }
コード例 #7
0
ファイル: ESDictionaries.cs プロジェクト: vlastik01/cSharp
 public ESDictionary(ESBehavior esClass, ESAssociation[] associations) : base(esClass, associations)
 {
 }
コード例 #8
0
ファイル: ESDictionaries.cs プロジェクト: vlastik01/cSharp
 public ESAssociation(ESBehavior esClass, Object key, Object value) : base(esClass, key, value)
 {
 }
コード例 #9
0
ファイル: ESDictionaries.cs プロジェクト: vlastik01/cSharp
 public ESDictionary(ESBehavior esClass) : base(esClass)
 {
 }
コード例 #10
0
ファイル: ESDictionaries.cs プロジェクト: vlastik01/cSharp
 public ESIdentityDictionary(ESBehavior esClass) : base(esClass)
 {
 }
コード例 #11
0
ファイル: ESDictionaries.cs プロジェクト: vlastik01/cSharp
 protected ESAbstractAssociation(ESBehavior esClass, KeyType key, ValueType value) : base(esClass)
 {
     this.key   = key;
     this.value = value;
 }
コード例 #12
0
ファイル: ESDictionaries.cs プロジェクト: vlastik01/cSharp
 protected ESAbstractAssociation(ESBehavior esClass) : base(esClass)
 {
 }
コード例 #13
0
ファイル: ESDictionaries.cs プロジェクト: vlastik01/cSharp
 protected ESAbstractDictionary(ESBehavior esClass, long capacity) : base(esClass)
 {
     bindings = newBindings(capacity, null);
 }
コード例 #14
0
ファイル: ESDictionaries.cs プロジェクト: vlastik01/cSharp
 protected ESAbstractDictionary(ESBehavior esClass) : base(esClass)
 {
     bindings = newBindings(3, null);
 }
コード例 #15
0
 public ESMessage(ESBehavior esClass) : base(esClass)
 {
 }
コード例 #16
0
ファイル: ESDictionaries.cs プロジェクト: vlastik01/cSharp
 public ESDictionary(ESBehavior esClass, long capacity) : base(esClass, capacity)
 {
 }
コード例 #17
0
 public ESMessage(ESBehavior esClass, ESSymbol selector, Object[] arguments) : base(esClass)
 {
     setSelector(selector);
     this.arguments = arguments;
 }
コード例 #18
0
ファイル: ESDictionaries.cs プロジェクト: vlastik01/cSharp
 public ESAssociation(ESBehavior esClass) : base(esClass)
 {
 }