@Nullable
    public List<Binding> lookupAttr(String attr) {
        if (looked.contains(this)) {
            return null;
        } else {
            List<Binding> b = lookupLocal(attr);
            if (b != null) {
                return b;
            } else {
                if (supers != null && !supers.isEmpty()) {
                    looked.add(this);
                    b = supers.lookupAttr(attr);
                    if (b != null) {
                        looked.remove(this);
                        return b;
                    }
                    looked.remove(this);
                    return null;
                } else {
                    return null;
                }
            }
        }
    }