this code makes  me a little bit uneasy... reminds me of times when I developed in assembly where I needed to put all procedure arguments in stack and then make `goto` to this procedure :)