localsPerformOn() public method

public localsPerformOn ( IoObject target, IoObject locals ) : IoObject
target IoObject
locals IoObject
return IoObject
Example #1
0
        public IoObject onDoCStringWithLabel(IoObject target, string code, string label)
        {
            IoMessage msg = new IoMessage();

            msg = msg.clone(this) as IoMessage;
            msg = msg.newFromTextLabel(this, code, label);
            return(msg.localsPerformOn(target, target));
        }
Example #2
0
        public static IoObject slotDo(IoObject target, IoObject locals, IoObject message)
        {
            IoMessage m = message as IoMessage;

            if (m.args.Count != 0)
            {
                IoMessage argMessage = m.rawArgAt(0);
                argMessage.localsPerformOn(target, target);
            }
            return(target);
        }
Example #3
0
        public static IoObject slotDoMessage(IoObject self, IoObject locals, IoObject m)
        {
            IoMessage msg      = m as IoMessage;
            IoMessage aMessage = msg.localsMessageArgAt(locals, 0) as IoMessage;
            IoObject  context  = self;

            if (msg.args.Count >= 2)
            {
                context = msg.localsValueArgAt(locals, 1);
            }
            return(aMessage.localsPerformOn(context, self));
        }
Example #4
0
File: IoMessage.cs Project: ypyf/io
        public IoObject localsValueArgAt(IoObject locals, int i)
        {
            IoMessage m = i < args.Count ? args[i] as IoMessage : null;

            //m.async = async;
            if (m != null)
            {
                if (m.cachedResult != null && m.next == null)
                {
                    return(m.cachedResult);
                }

                return(m.localsPerformOn(locals, locals));
            }
            return(this.state.ioNil);
        }
Example #5
0
        public static IoObject slotAsyncCall(IoObject target, IoObject locals, IoObject message)
        {
            IoMessage msg      = message as IoMessage;
            IoMessage aMessage = msg.rawArgAt(0);
            IoObject  context  = target;

            if (msg.args.Count >= 2)
            {
                context = msg.localsValueArgAt(locals, 1);
            }

            IoBlock o = target.rawGetSlot(aMessage.messageName) as IoBlock;

            if (o != null)
            {
                IoMessage mmm = o.containedMessage;
                mmm.async = true;


                IoContext ctx = new IoContext();
                ctx.target  = context;
                ctx.locals  = target;
                ctx.message = mmm;
                mmm.async   = true;
                IoState  state           = target.state;
                IoObject future          = IoObject.createObject(state);
                IEnumerator <IoObject> e = IoMessage.asyncCall(ctx, future);
                state.contextList.Add(e);
                return(future);
            }
            else
            {
                IoCFunction cf = target.rawGetSlot(aMessage.messageName) as IoCFunction;
                if (cf != null)
                {
                    cf.async = true;
                    return(cf.activate(target, locals, aMessage, null));
                }
            }
            return(aMessage.localsPerformOn(target, locals));
        }
Example #6
0
 public IoObject onDoCStringWithLabel(IoObject target, string code, string label)
 {
     IoMessage msg = new IoMessage();
     msg = msg.clone(this) as IoMessage;
     msg = msg.newFromTextLabel(this, code, label);
     return msg.localsPerformOn(target, target);
 }