Separate compile and run
Change self to reference
Implement self jump
Allow inner function and detect self call