# Subroutines Sometimes in Granite, you will need to be able to call subroutines (a kind of function) instead of jumping and be able to _return_ to where you were before. This is possible! ## New operations * `:#`, stack push, pushes the current location to the stack, allowing a return * `:|`, return, returns back to the previous pushed location, crashes if no location pushed ## Tutorial Look at this program: ``` :?x :&x,temp :=default,temp,0 :@print :^x :!x :~ :@default :>10,x :10,x :10,x :| :@entry :?x :&x,temp :# :=default,temp,0 :^x :!x ```