SETVARr(n, bddlevel2var[LEVEL(n)]);
int lev = LEVEL(n); int var = bddlevel2var[lev]; SETVARr(n, var);
    int mark_roots() {        boolean[] dep = new boolean[bddvarnum];        int n;        for (n = 2, extrootsize = 0; n < bddnodesize; n++) {            /* This is where we go from .level to .var! */            SETVARr(n, bddlevel2var[LEVEL(n)]);            if (HASREF(n)) {                SETMARK(n);                extrootsize++;            }        }        extroots = new int[extrootsize];        iactmtx = imatrixNew(bddvarnum);        for (n = 2, extrootsize = 0; n < bddnodesize; n++) {            if (MARKED(n)) {                UNMARK(n);                extroots[extrootsize++] = n;                for (int i = 0; i < bddvarnum; ++i)                    dep[i] = false;                dep[VARr(n)] = true;                levels[VARr(n)].nodenum++;                addref_rec(LOW(n), dep);                addref_rec(HIGH(n), dep);                addDependencies(dep);            }            /* Make sure the hash field is empty. This saves a loop in the            initial GBC */            SETHASH(n, 0);        }        SETHASH(0, 0);        SETHASH(1, 0);        return 0;    }