aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jesse Hallett <jesse@galois.com>2013-12-17 15:27:38 -0800
committerGravatar Jesse Hallett <jesse@galois.com>2013-12-17 15:30:48 -0800
commit6c8db8b9bd08a24b099b5061385b095c3d51b9b2 (patch)
tree764586fc8b7ddf5686363e2f450ab4577b501119
parent814e6f5e2125a48578d8fa47d06d1d3fb92ef984 (diff)
Modifies dependency loading
Changes dependency loading so that top-level variables defined in dependency scripts are in scope in rule definitions.
-rw-r--r--src/js/fiveui/injected/compute.js59
1 files changed, 33 insertions, 26 deletions
diff --git a/src/js/fiveui/injected/compute.js b/src/js/fiveui/injected/compute.js
index d8ae9e8..8fada15 100644
--- a/src/js/fiveui/injected/compute.js
+++ b/src/js/fiveui/injected/compute.js
@@ -19,6 +19,8 @@
* limitations under the License.
*/
+/*jshint evil:true */
+
(function(){
var guidGenerator = function () {
@@ -331,38 +333,43 @@
/**
* @param {{rules: [string], dependencies: [string]}} ruleDescr
*/
- var assembleRules = function(ruleDescr) {
- var ruleList = [];
-
- _.each(ruleDescr.dependencies,
- function(dep){
- try {
- eval(dep.content);
- } catch (x) {
- console.error('Could not evaluate rule dependency: ' + dep.url);
- console.error(x);
- }
- });
-
- var ruleStrList = ruleDescr.rules;
- for(var i=0; i<ruleStrList.length; ++i) {
- var moduleStr =
- [ '(function(){'
- , 'var exports = {};'
- , ruleStrList[i]
- , 'return exports;'
- , '})()'
- ].join('\n');
+ var assembleRules = function(__assembleRules_ruleDescr) {
+ // Use long variable names: top-level variables in eval'ed
+ // dependencies will be created in the scope of this function and
+ // we want to avoid collisions.
+ var __assembleRules_ruleList = []
+ , __assembleRules_deps = __assembleRules_ruleDescr.dependencies
+ , __assembleRules_i;
+
+ // Use for loop instead of _.each so that top-level variables in
+ // eval'ed dependencies will be created in the scope of the
+ // `assembleRules` function. The goal is to run rules in the
+ // same scope so that rules have access to top-level variables
+ // from defined in dependency scripts.
+ for (__assembleRules_i = 0; __assembleRules_i < __assembleRules_deps.length; __assembleRules_i += 1) {
+ try {
+ eval(__assembleRules_deps[__assembleRules_i].content);
+ } catch (x) {
+ console.error('Could not evaluate rule dependency: ' +
+ __assembleRules_deps[__assembleRules_i].url);
+ console.error(x);
+ }
+ }
+
+ var ruleStrList = __assembleRules_ruleDescr.rules;
+ for(__assembleRules_i=0; __assembleRules_i<ruleStrList.length; ++__assembleRules_i) {
+ var __assembleRules_moduleFunc = new Function('exports', ruleStrList[__assembleRules_i]);
try {
- var evaled = eval(moduleStr);
- ruleList.push(evaled);
+ var __assembleRules_exported = {};
+ __assembleRules_moduleFunc(__assembleRules_exported);
+ __assembleRules_ruleList.push(__assembleRules_exported);
} catch (x) {
console.error('Could not evaluate rule module: ' + x);
- console.error(moduleStr);
+ console.error(__assembleRules_moduleFunc);
}
}
- return ruleList;
+ return __assembleRules_ruleList;
};
port.on('SetRules', function(payload) {