Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        public NamedVariableBinder(DynamicBindingGuru dynamicBindingGuru, ESSymbol name, NamespaceObject environment)
        {
            this.dynamicBindingGuru = dynamicBindingGuru;
            objectSpace             = dynamicBindingGuru.ObjectSpace;
            this.name        = name;
            this.environment = environment;

            if (name != null)
            {
                nameString = name.PrimitiveValue;
            }
            addToUndeclared =
                () =>
            { var bindingRef = objectSpace.newBindingReference(NameString, new DirectBindingHandle((Object)null));
              objectSpace.UndeclaredNamespace.add(bindingRef);
              return(bindingRef); };
        }
Ejemplo n.º 3
0
        public bool createMetaObjectToSendMessage(String messageName, DynamicMetaObject[] args, out DynamicMetaObject messageSendMO)
        {
            var  esClass            = ValueClass;
            var  objectSpace        = esClass.ObjectSpace;
            var  dynamicBindingGuru = objectSpace.DynamicBindingGuru;
            long numArgs            = args.Length;
            var  method             = esClass.compiledMethodAtSystemSelector(messageName, numArgs);

            if (method == null)
            {
                ESSymbol   selector;
                SymbolType symbolType;
                long       syntacicalNumArgs;
                long       ignored;
                messageName = messageName.usingCapitalizationScheme(CapitalizationScheme.InitialLowerCase);
                messageName.classifySymbol(null, out symbolType, out syntacicalNumArgs, out ignored);
                switch (symbolType)
                {
                case SymbolType.Identifier:
                    switch (numArgs)
                    {
                    case 0:
                        selector = objectSpace.symbolFor(messageName);
                        break;

                    case 1:
                        selector = objectSpace.symbolFor(messageName + ":");
                        break;

                    default:
                        selector = null;
                        break;
                    }
                    break;

                case SymbolType.BinaryMessageSelector:
                    selector = numArgs == 1 ? objectSpace.symbolFor(messageName) : null;
                    break;

                case SymbolType.Keyword:
                    selector = syntacicalNumArgs == numArgs?objectSpace.symbolFor(messageName) : null;

                    break;

                default:
                case SymbolType.String:
                    selector = null;
                    break;
                }
                if (selector == null)
                {
                    messageSendMO = metaObjectToSendDoesNotUnderstand(objectSpace.symbolFor(messageName), args);
                    return(false);
                }
                else
                {
                    if (dynamicBindingGuru.getMethodOrElseTryGetMetaObjectToInvokeVirtualMethodOfESObject(this, esClass, selector, args, out method, out messageSendMO))
                    {
                        return(true);
                    }
                    if (method == null)
                    {
                        messageSendMO = null;
                        return(false);
                    }
                    else
                    {
                        messageSendMO = DynamicBindingGuru.metaObjectToSendMessage(this, objectSpace, esClass, selector, method, args, this.bindingRestrictionsForESObjectReceiver(esClass));
                        return(true);
                    }
                }
            }
            else
            {
                messageSendMO = DynamicBindingGuru.metaObjectToSendMessage(this, objectSpace, esClass, method.Selector, method, args, DefaultBindingRestrictions);
                return(true);
            }
        }
Ejemplo n.º 4
0
 public Registry(DynamicBindingGuru dynamicBindingGuru) : base(dynamicBindingGuru)
 {
 }
Ejemplo n.º 5
0
 protected SetVariableValueBinder(DynamicBindingGuru dynamicBindingGuru, ESSymbol name, NamespaceObject environment) : base(dynamicBindingGuru, name, environment)
 {
 }
Ejemplo n.º 6
0
 protected SetVariableValueBinder(DynamicBindingGuru dynamicBindingGuru, ESSymbol name) : base(dynamicBindingGuru, name)
 {
 }
Ejemplo n.º 7
0
 public NamedVariableBinder(DynamicBindingGuru dynamicBindingGuru, ESSymbol name) : this(dynamicBindingGuru, name, null)
 {
 }
Ejemplo n.º 8
0
 protected Registry(DynamicBindingGuru dynamicBindingGuru) : base(dynamicBindingGuru)
 {
     defaultNamespace = objectSpace.SmalltalkNamespace;
 }
Ejemplo n.º 9
0
 protected MessageSendBinder(DynamicBindingGuru dynamicBindingGuru, MessageReceiverKind receiverKind, BehavioralObject selfReceiverClass, ESSymbol selector)
     : this(dynamicBindingGuru, receiverKind, selector)
 {
     this.selfReceiverClass = selfReceiverClass;
 }
Ejemplo n.º 10
0
 protected MessageSendBinder(DynamicBindingGuru dynamicBindingGuru, MessageReceiverKind receiverKind, ESSymbol selector)
 {
     this.dynamicBindingGuru = dynamicBindingGuru;
     this.receiverKind       = receiverKind;
     this.selector           = selector;
 }