     do_binding(list, context, __CALLER__.vars, Macro.Env.in_match?(__CALLER__))
   end
 
-  defp do_binding(context, vars, in_match) do
-    for {v, c} <- vars, c == context, v != :_@CALLER do
-      {v, wrap_binding(in_match, {v, [], c})}
-    end
-  end
-
   defp do_binding(list, context, vars, in_match) do
-    for {v, c} <- vars, c == context, :lists.member(v, list) do
+    for {v, c} <- vars, c == context, list == nil or :lists.member(v, list) do
       {v, wrap_binding(in_match, {v, [], c})}
     end
   end


  """
  defmacro binding() do
    do_binding(nil, __CALLER__.vars, Macro.Env.in_match?(__CALLER__))
  end

  @doc """

  end

  defmacro binding(context) when is_atom(context) do
    do_binding(nil, context, __CALLER__.vars, Macro.Env.in_match?(__CALLER__))
  end

  @doc """
