io.IoBlock.activate C# (CSharp) Method

activate() public method

public activate ( IoObject sender, IoObject target, IoObject locals, IoMessage m, IoObject slotContext ) : IoObject
sender IoObject
target IoObject
locals IoObject
m IoMessage
slotContext IoObject
return IoObject
        public override IoObject activate(IoObject sender, IoObject target, IoObject locals, IoMessage m, IoObject slotContext)
        {
            IoState state = sender.state;
            IoBlock self = sender as IoBlock;

            IoObjectArrayList argNames = self.argNames;
            IoObject scope = self.scope;

            IoObject blockLocals = state.localsProto.clone(state);
            IoObject result = null;
            IoObject callObject = null;

            blockLocals.isLocals = true;

            if (scope == null)
                scope = target;

            blockLocals.createSlots();

            callObject = IoCall.with(state, locals, target, m, slotContext, self, null/*state.currentCoroutine*/);

            IoSeqObjectHashtable bslots = blockLocals.slots;
            bslots["call"] = callObject;
            bslots["self"] = scope;
            bslots["updateSlot"] = state.localsUpdateSlotCFunc;

            if (argNames != null)
            for (int i = 0; i < argNames.Count; i++)
            {
                IoSeq name = argNames[i] as IoSeq;
                IoObject arg = m.localsValueArgAt(locals, i);
                blockLocals.slots[name] = arg;
            }

            if (self.containedMessage != null)
            {
                result = self.containedMessage.localsPerformOn(blockLocals, blockLocals);
            }

            if (self.passStops == IoCallStatus.MESSAGE_STOP_STATUS_NORMAL)
            {

            }

            return result;
        }