package erjang.m.java; import java.lang.reflect.Array; import erjang.EList; import erjang.EObject; import erjang.EProc; import erjang.ERT; import erjang.ESeq; /** Wrap an array and present it as an ESeq */ class JavaArray extends ESeq { private final int idx; private final Object arr; private EProc self; static ESeq box(EProc self, Object arr, int idx) { if (Array.getLength(arr) == idx) return ERT.NIL; return new JavaArray(self, arr, idx); } private JavaArray(EProc self, Object arr, int idx) { this.arr = arr; this.idx = idx; this.self = self; } @Override public ESeq cons(EObject h) { return new EList(h, this); } @Override public ESeq tail() { return box(self, arr, idx + 1); } @Override public EObject head() { return JavaObject.box(self, Array.get(arr, idx)); } }