anchor.diff:      expression(Rest0, copy_level(Pos, Pos0), add_op(Op, Parsed));
   expression(<<A:8,_/binary>> = Rest, Pos, [{op,_},#if_block{}|_]) when A =/= $: ->
       throw_error(eparse, Pos, Rest);
  -expression(<<";",Rest/binary>>, Pos, [{op,_}=Exp,#if_block{}=If]) ->
  -    IfBlock = If#if_block{
  -        true_block = add_op('end', [Exp])
  -    },
  -    {Rest, add_pos(Pos,1), IfBlock};
   expression(<<A:8,_/binary>> = Rest, {arg,_,_}=Pos, Parsed)
           when A =:= $, orelse A =:= $) ->
       {Rest, add_pos(Pos,1), add_op('end', Parsed)};
  
positive.code: precedence(<<"&&">>) -> {left, 15}; %% logic
  precedence(<<"||">>) -> {left, 16}; %% logic
  precedence(<<"??">>) -> {right, 17}; %% comparison
  precedence(<<"?:">>) -> {left, 18}; %% ternary
  precedence(<<"=">>) -> {right, 19}; %% assign
  precedence(<<"+=">>) -> {right, 19};
  precedence(<<"-=">>) -> {right, 19};
  
negative.code: array_def(<<"]",Rest/binary>>, {{array_def,54},_,_}=Pos, Args) ->
      {Rest,add_pos(Pos,1),Args};
  %% TODO add error missing closing params
  array_def(<<"(",Rest/binary>>, {{array_def,0},_,_}=Pos, []) ->
      array_def(Rest, add_pos(Pos,1), []);
  array_def(Rest, Pos, Args) when Rest =/= <<>> ->
      case expression(Rest, Pos, []) of
          {<<")",Rest0/binary>>, {{array_def,0},_,_}=Pos0, [Idx,Arg]} ->
              NewArg = add_line(#array_element{idx=Idx, element=Arg}, Pos),
              {Rest0, add_pos(Pos0,1), Args ++ [NewArg]};
          {<<")",Rest0/binary>>, {{array_def,0},_,_}=Pos0, Arg} ->
              NewArg = add_line(#array_element{element=Arg}, Pos),
              {Rest0, add_pos(Pos0,1), Args ++ [NewArg]};
          {<<"]",Rest0/binary>>, {{array_def,54},_,_}=Pos0, [Idx,Arg]} ->
              NewArg = add_line(#array_element{idx=Idx, element=Arg}, Pos),
              {Rest0, add_pos(Pos0,1), Args ++ [NewArg]};
  