[Params] always return a new object from Params.parse

Rather than returning a modified copy of the input params/defaults,
always return a new object, copying the appropriate values into it.

https://bugzilla.gnome.org/show_bug.cgi?id=608667
This commit is contained in:
Dan Winship 2010-04-29 11:14:23 -04:00
parent 024ab39c6d
commit e9e2786fa3

View File

@ -2,7 +2,7 @@
// parse: // parse:
// @params: caller-provided parameter object, or %null // @params: caller-provided parameter object, or %null
// @default: function-provided defaults object // @defaults: function-provided defaults object
// @allowExtras: whether or not to allow properties not in @default // @allowExtras: whether or not to allow properties not in @default
// //
// Examines @params and fills in default values from @defaults for // Examines @params and fills in default values from @defaults for
@ -10,24 +10,26 @@
// @allowExtras is not %true, it will throw an error if @params // @allowExtras is not %true, it will throw an error if @params
// contains any properties that aren't in @defaults. // contains any properties that aren't in @defaults.
// //
// If @params is %null, this returns @defaults. // If @params is %null, this returns the values from @defaults.
// //
// Return value: the updated params // Return value: a new object, containing the merged parameters from
// @params and @defaults
function parse(params, defaults, allowExtras) { function parse(params, defaults, allowExtras) {
let ret = {}, prop;
if (!params) if (!params)
return defaults; params = {};
if (!allowExtras) { for (prop in params) {
for (let prop in params) { if (!(prop in defaults) && !allowExtras)
if (!(prop in defaults))
throw new Error('Unrecognized parameter "' + prop + '"'); throw new Error('Unrecognized parameter "' + prop + '"');
} ret[prop] = params[prop];
} }
for (let prop in defaults) { for (prop in defaults) {
if (!(prop in params)) if (!(prop in params))
params[prop] = defaults[prop]; ret[prop] = defaults[prop];
} }
return params; return ret;
} }