# File lib/rack/utils.rb, line 69
69:     def normalize_params(params, name, v = nil)
70:       name =~ %r(\A[\[\]]*([^\[\]]+)\]*)
71:       k = $1 || ''
72:       after = $' || ''
73: 
74:       return if k.empty?
75: 
76:       if after == ""
77:         params[k] = v
78:       elsif after == "[]"
79:         params[k] ||= []
80:         raise TypeError, "expected Array (got #{params[k].class.name}) for param `#{k}'" unless params[k].is_a?(Array)
81:         params[k] << v
82:       elsif after =~ %r(^\[\]\[([^\[\]]+)\]$) || after =~ %r(^\[\](.+)$)
83:         child_key = $1
84:         params[k] ||= []
85:         raise TypeError, "expected Array (got #{params[k].class.name}) for param `#{k}'" unless params[k].is_a?(Array)
86:         if params[k].last.is_a?(Hash) && !params[k].last.key?(child_key)
87:           normalize_params(params[k].last, child_key, v)
88:         else
89:           params[k] << normalize_params({}, child_key, v)
90:         end
91:       else
92:         params[k] ||= {}
93:         raise TypeError, "expected Hash (got #{params[k].class.name}) for param `#{k}'" unless params[k].is_a?(Hash)
94:         params[k] = normalize_params(params[k], after, v)
95:       end
96: 
97:       return params
98:     end