add weakmap