// Published Slots public static IoObject slotCompare(IoObject self, IoObject locals, IoObject message) { IoMessage m = message as IoMessage; IoObject o = m.localsValueArgAt(locals, 0); return(IoNumber.newWithDouble(self.state, Convert.ToDouble(self.compare(o)))); }
private static IEnumerator Recurse2(IoCoroutine f) { //yield return null; // just create and quit // 1 //f.fiber.Yield(f); IoCoroutine ccc = IoCoroutine.createObject(IoCLI.state); ccc.fiber = new Fiber(); ccc.fiber.currentCoro = ccc; //yield return ccc.fiber.currentRoutine = new FiberProc(IoCLI.Recurse3 /*(ccc)*/); if (coro.fiber.State == 4) { Console.WriteLine("Creation Error. Fiber Exceeds on Recurse 2 " + f.uniqueId); IoCLI.yieldingCoros.Remove(f); return(null); } ccc.rawSetResult(IoNumber.newWithDouble(IoCLI.state, 42)); ccc.rawSetRunLocals(IoCLI.state.core); ccc.rawSetRunMessage(IoCLI.state.nilMessage); ccc.rawSetRunTarget(ccc); IoCLI.yieldingCoros.Add(ccc); //Console.WriteLine("Coro2 " + f.uniqueId + " creates Coro3 + " + ccc.uniqueId); IoCLI.yieldingCoros.Remove(f); //yield return null; // 2 return(null); }
public static IoObject slotSubstract(IoObject self, IoObject locals, IoObject message) { IoMessage m = message as IoMessage; IoNumber o = m.localsNumberArgAt(locals, 0); return(IoNumber.newWithDouble(self.state, -o.asDouble())); }
// setSlot("A", 32.45 + (20*(5836 log10)) + (20*(8.5 log10))) // !link-budget 22 0 13 126.3606841787141377 8 0 public static IoObject slotLog2(IoObject target, IoObject locals, IoObject message) { // IoNumber other = (message as IoMessage).localsNumberArgAt(locals, 0); IoNumber self = target as IoNumber; return(IoNumber.newWithDouble(target.state, Math.Log(self.isInteger ? self.longValue : self.doubleValue, 2))); }
public static IoObject slotRound(IoObject target, IoObject locals, IoObject message) { IoNumber self = target as IoNumber; return(IoNumber.newWithDouble(target.state, Math.Round(self.isInteger ? self.longValue : self.doubleValue) )); }
public static IoObject slotDivide(IoObject target, IoObject locals, IoObject message) { IoNumber other = (message as IoMessage).localsNumberArgAt(locals, 0); IoNumber self = target as IoNumber; return(IoNumber.newWithDouble(target.state, (self.isInteger ? self.longValue : self.doubleValue) / (other.isInteger ? other.longValue : other.doubleValue))); }
public static IoObject slotSize(IoObject target, IoObject locals, IoObject m) { IoMap dict = target as IoMap; if (dict.map != null) { return(IoNumber.newWithDouble(dict.tag.state, dict.map.Count)); } return(dict.tag.state.ioNil); }
// Published Slots public static IoObject slotIndexOf(IoObject target, IoObject locals, IoObject m) { IoList o = target as IoList; IoObject value = (m as IoMessage).localsValueArgAt(locals, 1); try { return(IoNumber.newWithDouble(target.state, o.list.IndexOf(value))); } catch (ArgumentOutOfRangeException aoore) { object ex = aoore; return(target.state.ioNil); } }
private static IEnumerator Recurse3(IoCoroutine f) { IoCoroutine ccc = IoCoroutine.createObject(IoCLI.state); ccc.fiber = new Fiber(); ccc.fiber.currentCoro = ccc; ccc.fiber.currentRoutine = IoCLI.Recurse4(ccc); ccc.rawSetResult(IoNumber.newWithDouble(IoCLI.state, 42)); ccc.rawSetRunLocals(IoCLI.state.core); ccc.rawSetRunMessage(IoCLI.state.nilMessage); ccc.rawSetRunTarget(ccc); IoCLI.yieldingCoros.Add(ccc); Console.WriteLine("Recurse3+" + i++); yield return(ccc); }
private static IEnumerator Recurse2(IoCoroutine f) { yield return(null); // just create and quit IoCoroutine ccc = IoCoroutine.createObject(IoCLI.state); ccc.fiber = new Fiber(); ccc.fiber.currentCoro = ccc; ccc.fiber.currentRoutine = IoCLI.Recurse3(ccc); ccc.rawSetResult(IoNumber.newWithDouble(IoCLI.state, 42)); ccc.rawSetRunLocals(IoCLI.state.core); ccc.rawSetRunMessage(IoCLI.state.nilMessage); ccc.rawSetRunTarget(ccc); IoCLI.yieldingCoros.Add(ccc); yield return(ccc); }
void ifPossibleCacheToken(IoToken token) { IoSeq method = this.messageName; IoObject r = null; switch (token.type) { case IoTokenType.TRIQUOTE_TOKEN: break; case IoTokenType.MONOQUOTE_TOKEN: r = IoSeq.createSymbolInMachine( method.state, IoSeq.rawAsUnescapedSymbol( IoSeq.rawAsUnquotedSymbol( IoSeq.createObject(method.state, method.value) ) ).value ); break; case IoTokenType.NUMBER_TOKEN: r = IoNumber.newWithDouble(this.state, Convert.ToDouble(method.value, CultureInfo.InvariantCulture)); break; default: if (method.value.Equals("nil")) { r = state.ioNil; } else if (method.value.Equals("true")) { r = state.ioTrue; } else if (method.value.Equals("false")) { r = state.ioFalse; } break; } this.cachedResult = r; }
public static IoObject slotYield(IoObject target, IoObject locals, IoObject message) { IoState state = target.state; List <IEnumerator <IoObject> > toDeleteThread = new List <IEnumerator <IoObject> >(); for (int i = 0; i < state.contextList.Count; i++) { IEnumerator <IoObject> e = state.contextList[i]; bool end = e.MoveNext(); if (!end) { toDeleteThread.Add(e); } } foreach (var e in toDeleteThread) { state.contextList.Remove(e); } return(IoNumber.newWithDouble(state, state.contextList.Count)); }
private static IEnumerator Recurse3(IoCoroutine f) { int i = 0; IoCoroutine ccc = IoCoroutine.createObject(IoCLI.state); ccc.fiber = new Fiber(); ccc.fiber.currentCoro = ccc; //yield return ccc.fiber.currentRoutine = new FiberProc(IoCLI.Recurse4 /*(ccc)*/); if (coro.fiber.State == 4) { Console.WriteLine("Creation Error. Fiber Exceeds on Recurse 3 " + f.uniqueId); IoCLI.yieldingCoros.Remove(f); return(null); } ccc.rawSetResult(IoNumber.newWithDouble(IoCLI.state, 42)); ccc.rawSetRunLocals(IoCLI.state.core); ccc.rawSetRunMessage(IoCLI.state.nilMessage); ccc.rawSetRunTarget(ccc); IoCLI.yieldingCoros.Add(ccc); IoCLI.yieldingCorosCount++; //Console.WriteLine("Coro3 " + f.uniqueId + " creates Coro4 + " + ccc.uniqueId); while (i < 2) { // f.fiber.Yield(f); //Console.WriteLine("Recurse3 Fiber: " + f.uniqueId + " Iteration: " + i++); //yield return null; i++; } IoCLI.yieldingCoros.Remove(f); return(null); }
public static IoObject slotE(IoObject target, IoObject locals, IoObject message) { IoNumber self = target as IoNumber; return(IoNumber.newWithDouble(target.state, Math.E)); }
public static IoObject slotMinPositive(IoObject target, IoObject locals, IoObject message) { IoNumber self = target as IoNumber; return(IoNumber.newWithDouble(target.state, Double.Epsilon)); }
public static IoObject slotYieldingCoros(IoObject target, IoObject locals, IoObject message) { return(IoNumber.newWithDouble(target.state, target.state.contextList.Count)); }
public static IoObject slotSize(IoObject target, IoObject locals, IoObject m) { IoList o = target as IoList; return(IoNumber.newWithDouble(target.state, o.list.Count)); }
public static IoObject slotArgCount(IoObject target, IoObject locals, IoObject message) { IoMessage self = target as IoMessage; return(IoNumber.newWithDouble(target.state, Convert.ToDouble(self.args.Count))); }