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); }
// Published Slots public new static IoObject slotMethod(IoObject target, IoObject locals, IoObject message) { IoState state = target.state; IoBlock self = IoBlock.createObject(state); IoMessage m = message as IoMessage; int nargs = m.args.Count; IoMessage lastArgAsMessage = (nargs > 0) ? m.rawArgAt(nargs - 1) : state.nilMessage; int i; self.containedMessage = lastArgAsMessage; self.isActivatable = true; for (i = 0; i < nargs - 1; i++) { IoMessage argMessage = m.rawArgAt(i); IoSeq name = argMessage.messageName; self.argNames.Add(name); } return(self); }
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)); }
public static IoObject slotMessage(IoObject target, IoObject locals, IoObject message) { IoMessage m = message as IoMessage; return(m.args.Count > 0 ? m.rawArgAt(0) : target.state.ioNil); }