Make the discard chain recursive by saving the initial position when a function pointer is created. The position is reverted after the function pointer loads the arguments from the discard chain. This makes nested function calls possible.