{"ScriptPreparationCode":"var cbscope, property, attrscope, propnames, listenerkey, execexpr, cbafter, cbbefore, isDomExpr;\r\n\r\nvar key = \u0022[WebApp.ui.form.field.Field][getFieldValueInUserFormat]\u0022, \r\n classname = \u0022WebApp.ui.form.field.Field\u0022,\r\n attrname = \u0022_parseValue2InputCatched\u0022,\r\n preparedRegEx = new RegExp(\u0022\\\\[([^\\\\]]\u002B)\\\\]\\\\[\u0022 \u002B attrname \u002B \u0022\\\\]\u0022),\r\n propnames = [\u0022A\u0022, \u0022B\u0022, \u0022C\u0022, attrname];\r\n\r\nvar WebAppExpr = {\r\n _functsList: {},\r\n _functsListNew: {},\r\n _functsListArray: []\r\n};\r\nvar attrscopeClass = function() {};\r\nattrscopeClass.prototype.is = function(classname) { return true; } \r\nattrscopeClass.prototype.getClassNames = function(classname) { return [\u0022WebApp.ui.form.field.Field\u0022]; } \r\nvar attrscope = new attrscopeClass();\r\n\r\nvar __addListenersForUsedExpressionChanged = function() {};\r\n\r\n\r\nfor (var c=0; c \u003C 100; c\u002B\u002B) {\r\n \tvar c_class \t= \u0022CLASS_\u0022 \u002B c,\r\n functions = [];\r\n \r\n \tfor (var i=0; i \u003C 100; i\u002B\u002B) {\r\n \tvar c_fn = \u0022FUNCTION_\u0022 \u002B i;\r\n \tfunctions[i] = c_fn;\r\n\t WebAppExpr._functsList[\u0022[\u0022 \u002B c_class \u002B \u0022][\u0022 \u002B c_fn \u002B \u0022]\u0022] = propnames;\r\n \t}\r\n \r\n \tWebAppExpr._functsListArray.push({\r\n \tclassname : c_class,\r\n \tfunctions : functions,\r\n \tpropnames : propnames\r\n \t});\r\n\r\n\tWebAppExpr._functsListNew[c_class] = {\r\n \tfunctions : functions,\r\n \tpropnames : propnames\r\n }\r\n}\r\nWebAppExpr._functsListArray.push({\r\n \tclassname : classname,\r\n \tfunctions : [\u0022getFieldValueInUserFormat\u0022],\r\n \tpropnames : propnames\r\n });\r\n \r\nWebAppExpr._functsListNew[classname] = {\r\n functions : [\u0022getFieldValueInUserFormat\u0022],\r\n propnames : propnames\r\n}\r\nWebAppExpr._functsList[key] = propnames;","TestCases":[{"Name":"Original expr","Code":"for (var key in WebAppExpr._functsList) {\r\n var matcher = new RegExp(\u0022\\\\[([^\\\\]]\u002B)\\\\]\\\\[\u0022 \u002B attrname \u002B \u0022\\\\]\u0022).exec(key);\r\n if (matcher != null) {\r\n var classname = matcher[1];\r\n if (attrscope.is(classname)) {\r\n var propnames\t= WebAppExpr._functsList[key];\r\n for (var ifnprop=0, nfnprops = propnames.length; ifnprop \u003C nfnprops; ifnprop\u002B\u002B) {\r\n __addListenersForUsedExpressionChanged(cbscope, property, attrscope, propnames[ifnprop], listenerkey, execexpr, cbafter, cbbefore, isDomExpr);\r\n }\r\n }\r\n }\r\n}","IsDeferred":false},{"Name":"Eval prepared regex","Code":"for (var key in WebAppExpr._functsList) {\r\n var matcher = preparedRegEx.exec(key);\r\n if (matcher != null) {\r\n var classname = matcher[1];\r\n if (attrscope.is(classname)) {\r\n var propnames\t= WebAppExpr._functsList[key];\r\n for (var ifnprop=0, nfnprops = propnames.length; ifnprop \u003C nfnprops; ifnprop\u002B\u002B) {\r\n __addListenersForUsedExpressionChanged(cbscope, property, attrscope, propnames[ifnprop], listenerkey, execexpr, cbafter, cbbefore, isDomExpr);\r\n }\r\n }\r\n }\r\n}","IsDeferred":false},{"Name":"New JSON Wrapper","Code":"attrscope.getClassNames().forEach(function(classname) {\r\n var functsList = WebAppExpr._functsListNew[classname],\r\n propsNames = functsList != null ? functsList[attrname] : null;\r\n if (propsNames != null) {\r\n for (var ifnprop=0, nfnprops = propsNames.length; ifnprop \u003C nfnprops; ifnprop\u002B\u002B) {\r\n __addListenersForUsedExpressionChanged(cbscope, property, attrscope, propsNames[ifnprop], listenerkey, execexpr, cbafter, cbbefore, isDomExpr);\r\n }\r\n }\r\n})","IsDeferred":false},{"Name":"New Array Wrapper","Code":"attrscope.getClassNames().forEach(function(classname) {\r\n var functsList = WebAppExpr._functsListArray.find(function(listopt) { return listopt.classname === classname}),\r\n propsNames = functsList != null ? functsList[attrname] : null;\r\n if (propsNames != null) {\r\n for (var ifnprop=0, nfnprops = propsNames.length; ifnprop \u003C nfnprops; ifnprop\u002B\u002B) {\r\n __addListenersForUsedExpressionChanged(cbscope, property, attrscope, propsNames[ifnprop], listenerkey, execexpr, cbafter, cbbefore, isDomExpr);\r\n }\r\n }\r\n})","IsDeferred":false}]}