[:X :Y :Z.opt :W.opt] <- xxx

PUSHCOUNT # => { #elemStart }
xxx # => { #elemStart xxx }
DUP # => { #elemStart xxx xxx }
IFVEC # => { #elemStart xxx }
GOTO novec # => { #elemStart xxx }
GOTO isvec # => { #elemStart xxx }
novec: # { #elemStart xxx }
KONST raiser # => { #elemStart xxx raiser }
SINK 2 # => { raiser xxx }
PUSHCOUNT # => { raiser xxx #argStart }
LIFT 2 # => { raiser xxx #argStart xxx }
FLIP   # => { raiser xxx xxx #argStart }
KONST '[:X :Y :Z.opt :W.opt]' # => { raiser xxx xxx #argStart '[:X :Y :Z.opt :W.opt]' }
FLIP # => { raiser xxx xxx '[:X :Y :Z.opt :W.opt]' #argStart }
TAILCALL

isvec: { #elemStart xxx }
SPREAD # => { e1 e2 ,,, en #elemStart}
PUSHCOUNT # => { e1 e2 ,,, en #elemStart #elemEnd+1 }
DEC 1 # => { e1 e2 ,,, en #elemStart #elemEnd }
FLIP  # => { e1 e2 ,,, en #elemEnd #elemStart }
SUBTRACT # => { e1 e2 ,,, en #N }
DUP # => { e1 e2 ,,, en #N #N }
KONST 4 # => { e1 e2 ,,, en #N #N 4 }
IFEQ # => { e1 e2 ,,, en #N }
GOTO not4 # => { e1 e2 ,,, en #N }
REMOVE # => { e1 e2 e3 e4 }

assign4:
PUSHCOUNT # => { e1 e2 e3 e4 #e4+1 }
DEC 1 # => { e1 e2 e3 e4 #e4 }
VEC # => { e1 e2 e3 [e4] }
LSTORE W # => { e1 e2 e3 }
GOTO assign3

not4: # => { e1 e2 ,,, en #N }
DUP # => { e1 e2 ,,, en #N #N }
KONST 3 # => { e1 e2 ,,, en #N #N 3 }
IFEQ # => { e1 e2 ,,, en #N }
GOTO not3 # => { e1 e2 ,,, en #N }
REMOVE # => { e1 e2 e3 }

PUSHCOUNT # => { e1 e2 e3 #here }
VEC # => { e1 e2 e3 [] }
LSTORE W # => { e1 e2 e3 }

assign3:
PUSHCOUNT # => { e1 e2 e3 #e3+1 }
DEC 1 # => { e1 e2 e3 #e3 }
VEC # => { e1 e2 [e3] }
LSTORE Z # => { e1 e2 }
GOTO mandatory

not3: # => { e1 e2 ,,, en #N }
DUP # => { e1 e2 ,,, en #N #N }
KONST 2 # => { e1 e2 ,,, en #N #N 2 }
IFEQ # => { e1 e2 ,,, en #N }
GOTO wrong # => { e1 e2 ,,, en #N }
REMOVE # => { e1 e2 }

PUSHCOUNT # => { e1 e2 #here }
VEC # => { e1 e2 [] }
LSTORE W # => { e1 e2 }
PUSHCOUNT # => { e1 e2 #here }
VEC # => { e1 e2 [] }
LSTORE Z # => { e1 e2 }

mandatory: # => { e1 e2 }
LSTORE Y # => { e1 }
LSTORE X # => {}
GOTO afterAssignment # => {}

wrong: # => { e1 e2 ,,, en #N }
PUSHCOUNT # => { e1 e2 ,,, en #N #elemEnd+1 }
DEC 1 # => { e1 e2 ,,, en #N #elemEnd }
FLIP # => { e1 e2 ,,, en #elemEnd #N }
SUBTRACT # => { e1 e2 ,,, en #elemStart }
VEC # => { xxx }
NADA # => { xxx nada }
PUSHCOUNT # => { xxx nada #argStart }
LIFT 3 # => { xxx nada #argStart xxx}
FLIP # => { xxx nada  xxx #argStart}
KONST raiser # => { xxx nada xxx #argStart raiser }
SINK 4 # => { raiser nada xxx #argStart }
KONST '[:X :Y :Z.opt :W.opt]' # => { raiser nada xxx #argStart '[:X :Y :Z.opt :W.opt]' }
TAILCALL

afterAssignment: # => {}
NADA # => { nada }
