ql.io-compiler
Advanced tools
Comparing version 0.6.4 to 0.6.5
@@ -123,18 +123,11 @@ /* | ||
// Start with the return statement and create the plan. | ||
_.each(compiled, function(line) { | ||
walk(line, symbols); | ||
}); | ||
walk(ret, symbols); | ||
if(ret.rhs) { | ||
_.each(ret.rhs.dependsOn, function(dependency) { | ||
ret.dependsOn.push(dependency); | ||
}); | ||
delete ret.rhs.dependsOn; | ||
} | ||
// Reverse links from dependencies and pickup orphans | ||
// TODO: no extra walk necessary | ||
var used = []; | ||
function rev(node) { | ||
used.push(node.id); | ||
_.each(node.dependsOn, function(dependency) { | ||
dependency.listeners = dependency.listeners || []; | ||
dependency.listeners.push(node); | ||
used.push(dependency.id); | ||
@@ -144,2 +137,3 @@ rev(dependency); | ||
if(node.fallback) { | ||
used.push(node.fallback.id); | ||
rev(node.fallback); | ||
@@ -149,6 +143,10 @@ node.fallback.listeners = node.listeners; | ||
} | ||
rev(ret); | ||
used.push(ret.rhs.id); | ||
rev(ret.rhs); | ||
_.each(compiled, function(line) { | ||
rev(line); | ||
}); | ||
used.push(ret.id); | ||
// Insert all orphans at the beginning of dep arr. Orphans occur when depednencies are based on | ||
// Insert all orphans at the beginning of dep arr. Orphans occur when dependencies are based on | ||
// body templates but the language has no way of knowing such dependencies. | ||
@@ -165,5 +163,4 @@ // Orphans include create table statements. | ||
orphans.push(line); | ||
addListener(line, ret.rhs); | ||
} | ||
line.listeners = line.listeners || []; | ||
line.listeners.push(ret); | ||
if(line.fallback) { | ||
@@ -174,5 +171,7 @@ line.fallback.listeners = line.listeners; | ||
}); | ||
ret.rhs.return = ret; | ||
// Insert creates before orphans. | ||
ret.dependsOn = orphans.concat(ret.dependsOn); | ||
ret.dependsOn = creates.concat(ret.dependsOn); | ||
ret.rhs.dependsOn = orphans.concat(ret.rhs.dependsOn); | ||
ret.rhs.dependsOn = creates.concat(ret.rhs.dependsOn); | ||
@@ -190,18 +189,10 @@ return ret; | ||
if(dependency) { | ||
addDep(line.dependsOn, dependency, symbols); | ||
addDep(line, line.dependsOn, dependency, symbols); | ||
} | ||
break; | ||
case 'define': | ||
introspectObject(line.object, symbols, line.dependsOn); | ||
introspectObject(line.object, symbols, line.dependsOn, line); | ||
break; | ||
case 'return': | ||
if(line.rhs.ref) { | ||
dependency = symbols[line.rhs.ref]; | ||
if(dependency) { | ||
addDep(line.dependsOn, dependency, symbols); | ||
} | ||
} | ||
else { | ||
walk(line.rhs, symbols); | ||
} | ||
walk(line.rhs, symbols); | ||
@@ -217,4 +208,4 @@ if(line.fallback) { | ||
_.each(line.route.headers, function(value, name) { | ||
introspectString(value, symbols, line.dependsOn); | ||
introspectString(name, symbols, line.dependsOn); | ||
introspectString(value, symbols, line.rhs.dependsOn, line.rhs); | ||
introspectString(name, symbols, line.rhs.dependsOn, line.rhs); | ||
}) | ||
@@ -251,10 +242,37 @@ } | ||
function addDep(dependsOn, dependency, symbols) { | ||
function addListener(node, listener) { | ||
var contains = false; | ||
node.listeners = node.listeners || []; | ||
for(var i = 0; i < node.listeners.length; i++) { | ||
if(node.listeners[i].id === listener.id) { | ||
contains = true; | ||
break; | ||
} | ||
} | ||
if(!contains) { | ||
node.listeners.push(listener); | ||
} | ||
} | ||
function addDep(line, dependsOn, dependency, symbols) { | ||
var contains = false; | ||
dependency.listeners = dependency.listeners || []; | ||
for(i = 0; i < dependency.listeners.length; i++) { | ||
if(dependency.listeners[i].id === line.id) { | ||
contains = true; | ||
break; | ||
} | ||
} | ||
if(!contains) { | ||
dependency.listeners.push(line); | ||
} | ||
contains = false; | ||
for(var i = 0; i < dependsOn.length; i++) { | ||
contains = _.isEqual(dependsOn[i], dependency); | ||
if(contains) { | ||
if(dependsOn[i].id === dependency.id) { | ||
contains = true; | ||
break; | ||
} | ||
} | ||
if(!contains) { | ||
@@ -269,3 +287,3 @@ dependsOn.push(dependency); | ||
// | ||
function introspectString(v, symbols, dependsOn) { | ||
function introspectString(v, symbols, dependsOn, line) { | ||
try { | ||
@@ -288,3 +306,3 @@ var parsed = strParser.parse(v); | ||
if(!contains) { | ||
addDep(dependsOn, dependency, symbols); | ||
addDep(line, dependsOn, dependency, symbols); | ||
} | ||
@@ -299,9 +317,9 @@ } | ||
function introspectObject(obj, symbols, dependsOn) { | ||
function introspectObject(obj, symbols, dependsOn, line) { | ||
if(_.isString(obj)) { | ||
introspectString(obj, symbols, dependsOn); | ||
introspectString(obj, symbols, dependsOn, line); | ||
} | ||
else if(_.isArray(obj)) { | ||
_.each(obj, function(v) { | ||
introspectObject(v, symbols, dependsOn); | ||
introspectObject(v, symbols, dependsOn, line); | ||
}); | ||
@@ -312,3 +330,3 @@ } | ||
if(_.isString(v)) { | ||
introspectString(v, symbols, dependsOn); | ||
introspectString(v, symbols, dependsOn, line); | ||
} | ||
@@ -318,3 +336,3 @@ else if(_.isArray(v)) { | ||
_.each(v, function(vi) { | ||
introspectObject(vi, symbols, dependsOn); | ||
introspectObject(vi, symbols, dependsOn, line); | ||
}); | ||
@@ -324,3 +342,3 @@ ret[n] = arr; | ||
else { | ||
introspectObject(v, symbols, dependsOn); | ||
introspectObject(v, symbols, dependsOn, line); | ||
} | ||
@@ -344,6 +362,6 @@ }); | ||
if(parent) { | ||
addDep(parent.dependsOn, dependency, symbols); | ||
addDep(parent, parent.dependsOn, dependency, symbols); | ||
} | ||
else { | ||
addDep(line.dependsOn, dependency, symbols); | ||
addDep(line, line.dependsOn, dependency, symbols); | ||
} | ||
@@ -362,6 +380,6 @@ } | ||
if(parent) { | ||
addDep(parent.dependsOn, dependency, symbols); | ||
addDep(parent, parent.dependsOn, dependency, symbols); | ||
} | ||
else { | ||
addDep(line.dependsOn, dependency, symbols); | ||
addDep(line, line.dependsOn, dependency, symbols); | ||
} | ||
@@ -405,3 +423,3 @@ } | ||
else if(dependency) { | ||
addDep(line.dependsOn, dependency, symbols); | ||
addDep(line, line.dependsOn, dependency, symbols); | ||
} | ||
@@ -439,3 +457,3 @@ } | ||
else { | ||
addDep(line.dependsOn, dependency, symbols); | ||
addDep(parent || line, (parent || line).dependsOn, dependency, symbols); | ||
} | ||
@@ -457,3 +475,3 @@ } | ||
else { | ||
addDep(line.dependsOn, dependency, symbols); | ||
addDep(line, line.dependsOn, dependency, symbols); | ||
} | ||
@@ -460,0 +478,0 @@ } |
{ | ||
"author": "ql.io", | ||
"name": "ql.io-compiler", | ||
"version": "0.6.4", | ||
"version": "0.6.5", | ||
"repository": { | ||
@@ -6,0 +6,0 @@ "type": "git", |
325603
8468