class DEBUGGER__::ThreadClient

def variable_ name, obj, indexedVariables: 0, namedVariables: 0

def variable_ name, obj, indexedVariables: 0, namedVariables: 0
  if indexedVariables > 0 || namedVariables > 0
    vid = @var_map.size + 1
    @var_map[vid] = obj
  else
    vid = 0
  end
  namedVariables += M_INSTANCE_VARIABLES.bind_call(obj).size
  if NaiveString === obj
    str = obj.str.dump
    vid = indexedVariables = namedVariables = 0
  else
    str = value_inspect(obj)
  end
  if name
    { name: name,
      value: str,
      type: type_name(obj),
      variablesReference: vid,
      indexedVariables: indexedVariables,
      namedVariables: namedVariables,
    }
  else
    { result: str,
      type: type_name(obj),
      variablesReference: vid,
      indexedVariables: indexedVariables,
      namedVariables: namedVariables,
    }
  end
end