anchor.diff:  resolve(Unknown, _State) ->
       ephp_error:error({error, eundeftoken, undefined, ?E_CORE_ERROR, Unknown}).
   
  +
  +increment(undefined) -> {undefined, undefined};
  +increment(Value) when is_number(Value) -> {Value, Value + 1};
  +increment(Value) when is_binary(Value) andalso byte_size(Value) > 0 ->
  +    try
  +        Val = binary_to_integer(Value),
  +        {Val, Val + 1}
  +    catch error:badarg ->
  +        {Value, ephp_data:increment_code(Value)}
  +    end;
  +increment(Value) when ?IS_MEM(Value) ->
  +    increment(ephp_mem:get(Value));
  +increment(Value) -> {Value, Value}.
  +
  +rich_increment(undefined) -> 1;
  +rich_increment(Value) when is_number(Value) -> Value + 1;
  +rich_increment(Value) when is_binary(Value) andalso byte_size(Value) > 0 ->
  +    try
  +        binary_to_integer(Value) + 1
  +    catch error:badarg ->
  +        ephp_data:increment_code(Value)
  +    end;
  +rich_increment(Value) when ?IS_MEM(Value) ->
  +    rich_increment(ephp_mem:get(Value));
  +rich_increment(Value) -> Value.
   
   resolve_function(#call{name = Fun, args = RawArgs, line = Index,
                          namespace = NS},
  
positive.code: 
  resolve({global, GVars, _Line},
          #state{ref = Ref, global = GlobalCtx, vars = Vars} = State) ->
      #state{vars=GlobalVars} = load_state(GlobalCtx),
      lists:foreach(fun(GlobalVar) ->
          ephp_vars:ref(Vars, GlobalVar, GlobalVars, GlobalVar, Ref)
      end, GVars),
  
negative.code: 
  resolve({pre_incr, Var, _Line}, #state{ref = Ref} = State) ->
      case get_var_path(Var, State) of
          #variable{} = VarPath ->
              Value = ephp_vars:get(State#state.vars, VarPath, Ref),
              NewValue = rich_increment(Value),
              if
                  ?IS_MEM(Value) -> ephp_mem:set(Value, NewValue);
                  true -> ephp_vars:set(State#state.vars, VarPath, NewValue, Ref)
              end,
              {NewValue, State};
          {error, _Reason} ->
              {undefined, State}
      end;
  