From e9e2786fa34e6dd421140f114dec35892fad8a2e Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Thu, 29 Apr 2010 11:14:23 -0400 Subject: [PATCH] [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 --- js/misc/params.js | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/js/misc/params.js b/js/misc/params.js index 09e46b0b2..88596ce7c 100644 --- a/js/misc/params.js +++ b/js/misc/params.js @@ -2,7 +2,7 @@ // parse: // @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 // // 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 // 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) { + let ret = {}, prop; + if (!params) - return defaults; + params = {}; - if (!allowExtras) { - for (let prop in params) { - if (!(prop in defaults)) - throw new Error('Unrecognized parameter "' + prop + '"'); - } + for (prop in params) { + if (!(prop in defaults) && !allowExtras) + throw new Error('Unrecognized parameter "' + prop + '"'); + ret[prop] = params[prop]; } - for (let prop in defaults) { + for (prop in defaults) { if (!(prop in params)) - params[prop] = defaults[prop]; + ret[prop] = defaults[prop]; } - return params; + return ret; } \ No newline at end of file