Ejemplo n.º 1
0
            public override IEnumerable <string> GetDynamicMemberNames()
            {
                var self = (IRubyObject)Value;
                RubyInstanceData instanceData = self.GetInstanceData();
                RubyModule       theClass     = (instanceData != null ? instanceData.ImmediateClass : null);

                theClass = theClass ?? self.Class;
                var names = new List <string>();

                theClass.ForEachMember(true, RubyMethodAttributes.DefaultVisibility, delegate(string /*!*/ name, RubyMemberInfo /*!*/ member) {
                    names.Add(name);
                });
                return(names);
            }
Ejemplo n.º 2
0
        public object Invoke <TScope>(CallSite /*!*/ callSite, TScope /*!*/ scope, object self)
        {
            IRubyObject obj = self as IRubyObject;

            if (obj != null && obj.ImmediateClass.Version.Method == Version)
            {
                // TODO: optimize
                RubyInstanceData data = obj.TryGetInstanceData();
                return((data != null) ? data.GetInstanceVariable(Name) : null);
            }
            else
            {
                return(((CallSite <Func <CallSite, TScope, object, object> >)callSite).Update(callSite, scope, self));
            }
        }
Ejemplo n.º 3
0
        private void CopyInstanceDataFrom(IRubyObject /*!*/ source, bool copyFrozenState)
        {
            // copy instance data, but not the state:
            var sourceData = source.TryGetInstanceData();

            if (sourceData != null)
            {
                _instanceData = new RubyInstanceData();
                sourceData.CopyInstanceVariablesTo(_instanceData);
            }

            // copy flags:
            SetTaint(this, IsTainted(source));
            if (copyFrozenState && IsFrozen(source))
            {
                Freeze(this);
            }
        }