@GenerateNodeFactory public abstract class SubBuiltinNode extends BuiltinNode { @Specialization protected long minus(long value0, long value1) { return value0 - value1; } }
@GenerateNodeFactory public abstract class ListBuiltinNode extends BuiltinNode { @Specialization protected MumblerList<Object> list(Object first, Object second) { return MumblerList.list(first, second); } }
@NodeInfo(shortName = "%") @GenerateNodeFactory public abstract class ModBuiltinNode extends BuiltinNode { @Specialization protected long modulo(long value0, long value1) { return value0 % value1; } @Specialization protected BigInteger modulo(BigInteger value0, BigInteger value1) { return value0.mod(value1); } }
@NodeInfo(shortName="cdr") @GenerateNodeFactory public abstract class CdrBuiltinNode extends BuiltinNode { @Specialization protected MumblerList<?> cdr(MumblerList<?> list) { return list.cdr(); } }
@NodeInfo(shortName="cons") @GenerateNodeFactory public abstract class ConsBuiltinNode extends BuiltinNode { @Specialization @SuppressWarnings("unchecked") protected MumblerList<?> cons(Object value, MumblerList<?> list) { return ((MumblerList<Object>) list).cons(value); } }
@NodeInfo(shortName="<") @GenerateNodeFactory public abstract class LessThanBuiltinNode extends BuiltinNode { @Specialization protected boolean lessThan(long value0, long value1) { return value0 < value1; } @Specialization protected boolean lessThan(BigInteger value0, BigInteger value1) { return value0.compareTo(value1) < 0; } }
@NodeInfo(shortName = "/") @GenerateNodeFactory public abstract class DivBuiltinNode extends BuiltinNode { @Specialization protected long divide(long value0, long value1) { return value0 / value1; } @Specialization protected BigInteger divide(BigInteger value0, BigInteger value1) { return value0.divide(value1); } }
@NodeInfo(shortName="car") @GenerateNodeFactory public abstract class CarBuiltinNode extends BuiltinNode { @Specialization protected Object car(MumblerList<?> list) { return list.car(); } }
@NodeInfo(shortName="eval") @GenerateNodeFactory public abstract class EvalBuiltinNode extends BuiltinNode { // TODO: Change to take second namespace (Frame) argument // // @Specialization // public Object eval(VirtualFrame virtualFrame, Object form) { // Converter converter = new Converter(); // MumblerNode node = this.insert(converter.convert( // form, this.getNamespace())); // return node.execute(virtualFrame); // } }
@NodeInfo(shortName = "*") @GenerateNodeFactory public abstract class MulBuiltinNode extends BuiltinNode { @Specialization(rewriteOn = ArithmeticException.class) protected long multiply(long value0, long value1) { return ExactMath.multiplyExact(value0, value1); } @Specialization protected BigInteger multiply(BigInteger value0, BigInteger value1) { return value0.multiply(value1); } }
@NodeInfo(shortName = "now") @GenerateNodeFactory public abstract class NowBuiltinNode extends BuiltinNode { @Specialization protected long now() { return System.currentTimeMillis(); } }
@NodeInfo(shortName=">") @GenerateNodeFactory public abstract class GreaterThanBuiltinNode extends BuiltinNode { @Specialization protected boolean greaterThan(long value0, long value1) { return value0 > value1; } @Specialization protected boolean greaterThan(BigInteger value0, BigInteger value1) { return value0.compareTo(value1) > 0; } }
@NodeInfo(shortName = "+") @GenerateNodeFactory public abstract class AddBuiltinNode extends BuiltinNode { @Specialization(rewriteOn = ArithmeticException.class) public long add(long value0, long value1) { return ExactMath.addExact(value0, value1); } @Specialization protected BigInteger add(BigInteger value0, BigInteger value1) { return value0.add(value1); } }
@NodeInfo(shortName = "sleep") @GenerateNodeFactory public abstract class SleepBuiltinNode extends BuiltinNode { @Specialization protected Void sleep(long ms) { try { Thread.sleep(ms); } catch (InterruptedException e) { throw new RuntimeException(e); } return null; } }
@NodeInfo(shortName="read") @GenerateNodeFactory public abstract class ReadBuiltinNode extends BuiltinNode { @Specialization public Syntax read(VirtualFrame virtualFrame, String str) { try { Source source = Source.fromText(str, "<read>"); return Reader.readForm(source); } catch (IOException e) { throw new MumblerException(e.getMessage()); } } }
@NodeInfo(shortName = "println") @GenerateNodeFactory public abstract class PrintlnBuiltinNode extends BuiltinNode { @Specialization public long println(long value) { System.out.println(value); return value; } @Specialization public boolean println(boolean value) { System.out.println(value); return value; } @Specialization public Object println(Object value) { System.out.println(value); return value; } }
@NodeInfo(shortName = "=") @GenerateNodeFactory public abstract class EqualBuiltinNode extends BuiltinNode { @Specialization protected boolean equals(long value0, long value1) { return value0 == value1; } @Specialization protected boolean equals(BigInteger value0, BigInteger value1) { return value0.equals(value1); } @Specialization protected boolean equals(boolean value0, boolean value1) { return value0 == value1; } @Specialization protected boolean equals(MumblerList<?> value0, MumblerList<?> value1) { return value0.equals(value1); } @Specialization protected boolean equals(Object value0, boolean value1) { return value0.equals(value1); } }