public override Runlet Weave(Runlet continuation, GlobalDictionary g) { if (this.Scope == "global") { Ident ident = g.Get(Name); if (this.Reftype == "get") { return(new PushIdentRunlet(ident, continuation)); } else { throw new UnimplementedNutmegException(); } } else if (this.Scope == "local" && this.Slot >= 0) { if (this.Reftype == "get") { return(new PushSlotRunlet(this.Slot, continuation)); } else { throw new UnimplementedNutmegException(); } } else { throw new UnimplementedNutmegException(); } }
public override Runlet Weave(Runlet continuation, GlobalDictionary g) { for (int i = Body.Length - 1; i >= 0; i -= 1) { Codelet codelet = Body[i]; continuation = codelet.Weave(continuation, g); } return(continuation); }
public override Runlet Weave(Runlet continuation, GlobalDictionary g) { if (long.TryParse(this.Value, out var n)) { return(new PushQRunlet(n, continuation)); } else { throw new Exception($"Invalid int value: {Value}"); } }
public abstract Runlet Weave(Runlet continuation, GlobalDictionary g);
public override Runlet Weave(Runlet continuation, GlobalDictionary g) { return(new PushQRunlet(this.Value, continuation)); }
public override Runlet Weave(Runlet continuation, GlobalDictionary g) { return(new LockRunlet(Arguments.Weave(_systemFunction(continuation), g))); }
public override Runlet Weave(Runlet continuation, GlobalDictionary g) { return(TestPart.Weave(new ForkRunlet(ThenPart.Weave(continuation, g), ElsePart.Weave(continuation, g)), g)); }
public override Runlet Weave(Runlet continuation, GlobalDictionary g) { return(new LockRunlet(Arguments.Weave(Funarg.Weave(new CallSRunlet(continuation), g), g))); }
public override Runlet Weave(Runlet continuation, GlobalDictionary g) { return(new FunctionRunlet(Nargs, Nlocals, this.Body.Weave(new ReturnRunlet(), g), continuation)); }