fix and add description for arguments
more tests for do-end block
emit empty struct as unit type instead of void type

because void type can't have its value
related issue: #15