   """
   def parse(<<?., n, t::binary>>, [:number | context], output) when n in @digits do
     debug "Found decimal and digit #{<<n>>} during a number context", t, context, output
-    parse(t, [:decimal | context], output <> <<?., n>>)
+    parse(t, [:decimal, :number | context], output <> <<?., n>>)
   end
 
   @doc """

  end

  @doc """
  Drop decimal context if no more digits.
  """
  def parse(<<n, t::binary>>, [:decimal | context], output) when not n in @digits do
    debug "Dropping decimal context", t, context, output
    parse(<<n>> <> t, context, output)
  end

  end

  @doc """
  Drop spaces after an object start when value expected.
  """
  def parse(<<?{, n, t::binary>>, context = [:value | _], output) when n in @whitespace do
    debug "Dropping whitespace after object start when value expected"
    parse(<<?{, t::binary>>, context, output)
  end

  @doc """
  Drop spaces after an object start in an array context.
  """
  def parse(<<?{, n, t::binary>>, context = [:array | _], output) when n in @whitespace do
    debug "Dropping whitespace after object start in array context"
    parse(<<?{, t::binary>>, context, output)
  end

  @doc """
  Empty object when value expected. Drop value expectation.
  """
  def parse(<<?{, ?}, t::binary>>, [:value | context], output) do
    debug "Found empty object when value expected. Passing through and dropping value expectation"
    parse(t, context, output <> <<?[, ?{, ?}, ?]>>)
  end

  @doc """
  Object opener and key start/quote when value expected. Push string, key, pair, object context.
  NOTE: This will create atoms from string keys. Perhaps that's a DDoS attack vector (see: Ruby symbols)?
        Maybe add a switch/mode later.
  """
  def parse(<<?{, ?", t::binary>>, [:value | context], output) do
    debug "Found object start and string key start when value expected. Pushing string, key, pair, object context.", t, context, output
    parse(t, [:string, :key, :pair, :object | context], output <> <<?[, ?{, ?:, ?">>)
  end

  @doc """
  Empty object encountered inside an array context. Expect comma_or_close_array.
  """
  def parse(<<?{, ?}, t::binary>>, context = [:array | _], output) do
    debug "Found empty object when inside array. Expecting comma or close array.", t, context, output
    parse(t, [:comma_or_close_array | context], output <> <<?[, ?{, ?}, ?]>>)
  end

  @doc """
  Object opener and key start/quote encountered inside an array context. Push string, key, pair, object context.
  """
  def parse(<<?{, ?", t::binary>>, context = [:array | _], output) do
    debug "Found object start and string key start when inside array. Pushing string, key, pair, object context.", t, context, output
    parse(t, [:string, :key, :pair, :object | context], output <> <<?[, ?{, ?:, ?">>)
  end

  @doc """
