add some func TODO finish exp check