public Node declare(ISourcePosition position, String name, int depth) {
int slot = exists(name);
if (slot >= 0) {
return isBlockOrEval ? new DVarNode(position, ((depth << 16) | slot), name) : new LocalVarNode(position, ((depth << 16) | slot), name);
}
return isBlockOrEval ? enclosingScope.declare(position, name, depth + 1) : new VCallNode(position, name);
}