add a require(depth >= 0)