diff --git a/js/core.js b/js/core.js index 6dcc4f7..c9689d0 100644 --- a/js/core.js +++ b/js/core.js @@ -1143,7 +1143,7 @@ async function parsePhraseBook(s, loadSketch) { let o = importSketches[i]; let sketch; if (importedSketches[o.name]) { - sketch = importedSketches[o.name]; + sketch = importedSketches[o.name]; console.log(item); } else { let snap = await loadSketch.download(`sketch/${o.name}`); sketch = Object.assign({}, snap.val()); @@ -1162,6 +1162,36 @@ async function parsePhraseBook(s, loadSketch) { phraseBook[phrase.key].parameters = phrase.parameters; } } + let references = []; + let definedRef = []; + function traverse(x){ + if(x.type === "Concat"){ + for(key in x){ + if(x[key].type){ + traverse(x[key]); + } + } + } + else if(x.type === "Ref" && x.node.type === "Key" && references.indexOf(x.node.key) === -1){ + references[references.length] = x.node.key; + } + } + for(k in phraseBook){ + phraseBook[k].forEach(function(item){ + traverse(item.tree); + }); + definedRef[definedRef.length] = k; + if(phraseBook[k].parameters){ + phraseBook[k].parameters.forEach(function(item){ + if(definedRef.indexOf(item) === -1) definedRef[definedRef.length] = item; + }); + } + } + references.forEach(function(item){ + if(definedRef.indexOf(item) === -1){ + throw new Error(`Cannot find reference to ${item}`); + } + }); phraseBook['%preamble'] = preamble; phraseBook['%imports'] = imports; return phraseBook;