private static SExprComp wrap(SExprAtomic ha, SExprComp c, string o) { if (c.Atomics.Count != 2) { throw new VMException("it takes 2 arguments", ha); } SExprComp ret = new SExprComp(); SExprComp op = new SExprComp(); ret.Atomics = c.Atomics.Take(1).ToList(); op.Atomics.Add(new SExprAtomic(new SToken(SToken.TokenType.ATOMIC, o))); op.Atomics.Add(ret.Clone()); op.Atomics.Add(c.Atomics.Skip(1).Take(1).First().Clone()); ret.Atomics.Add(op); return(ret); }
private static SExprComp wrap(SExprAtomic ha, SExprComp c, bool inc) { if (c.Atomics.Count != 1) { throw new VMException("it takes 1 argument", ha); } SExprComp ret = new SExprComp(); SExprComp op = new SExprComp(); ret.Atomics = c.Atomics.Take(1).ToList(); op.Atomics.Add(new SExprAtomic(new SToken(SToken.TokenType.ATOMIC, inc ? "+" : "-"))); op.Atomics.Add(ret.Clone()); op.Atomics.Add(new SExprAtomic(new SToken(SToken.TokenType.NUMBER, new Decimal(1)))); ret.Atomics.Add(op); return(ret); }