def inner_obj
      dbg :inner_obj
      # Shortcut for the '...' max_depth notation
      if @s.scan(DOT_DOT_DOT_MATCH)
        return {DOT_DOT_DOT => ''}
      end

      return {} if @s.eos? || @s.peek(1) == SHUT_BRACE

      # First pair
      k = key()
      expect EQUAL
      obj = {
        k => value()
      }

      while accept(SPACE) and !@s.eos?
        k = key()
        expect EQUAL
        obj[k] = value()
      end

      obj
    end
def inner_obj
      dbg :inner_obj
      # Shortcut for the '...' max_depth notation
      if @s.scan(DOT_DOT_DOT_MATCH)
        return {DOT_DOT_DOT => ''}
      end

      return {} if @s.eos? || @s.peek(1) == SHUT_BRACE

      # First pair
      k = key()
      expect EQUAL
      obj = {
        k => value()
      }

      while accept(SPACE) and !@s.eos?
        k = key()
        expect EQUAL
        obj[k] = value()
      end

      obj
    end
Structures