From 5d7168ce58058c4c171c2b66e6de6a792ca64fc2 Mon Sep 17 00:00:00 2001 From: kunal-mohta Date: Sat, 24 Feb 2018 11:00:43 +0530 Subject: [PATCH 1/4] reference validation - a start --- js/core.js | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/js/core.js b/js/core.js index 6dcc4f7..22d26fd 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 = []; + function traverse(x){ + if(x.type === "Concat"){ + for(key in x){ + if(x[key].type){ + traverse(x[key]); + } + } + } + else if(x.type === "Ref"){ + if(references.indexOf(x.node.key) === -1){ + references[references.length] = x.node.key; + } + } + } + phrases.forEach(function(item){ + if(item.key === "root"){ + item.values.forEach(function(i){ + let p = parsePhrase(i); + traverse(p); + }); + } + }); + references.forEach(function(item){ + if(!phraseBook[item]){ + throw new Error(`Cannot find reference to ${item}`); + } + }); + phraseBook['%preamble'] = preamble; phraseBook['%imports'] = imports; return phraseBook; From e04c9e8d5fa4adcd870f664795bf6584d65cfe25 Mon Sep 17 00:00:00 2001 From: kunal-mohta Date: Sat, 24 Feb 2018 12:28:34 +0530 Subject: [PATCH 2/4] changes requested --- js/core.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/js/core.js b/js/core.js index 22d26fd..18819d7 100644 --- a/js/core.js +++ b/js/core.js @@ -1162,8 +1162,8 @@ 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){ @@ -1178,16 +1178,19 @@ async function parsePhraseBook(s, loadSketch) { } } } - phrases.forEach(function(item){ - if(item.key === "root"){ - item.values.forEach(function(i){ - let p = parsePhrase(i); - traverse(p); + for(key in phraseBook){ + phraseBook[key].forEach(function(item){ + traverse(item.tree); + }); + definedRef[definedRef.length] = key; + if(phraseBook[key].parameters){ + phraseBook[key].parameters.forEach(function(item){ + if(definedRef.indexOf(item) === -1) definedRef[definedRef.length] = item; }); } - }); + } references.forEach(function(item){ - if(!phraseBook[item]){ + if(definedRef.indexOf(item) === -1){ throw new Error(`Cannot find reference to ${item}`); } }); From 99f3ef996d37c8c04e6344486f291456bd87d4e6 Mon Sep 17 00:00:00 2001 From: kunal-mohta Date: Sat, 24 Feb 2018 13:02:08 +0530 Subject: [PATCH 3/4] bug fix --- js/core.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/js/core.js b/js/core.js index 18819d7..96a9a08 100644 --- a/js/core.js +++ b/js/core.js @@ -1178,13 +1178,13 @@ async function parsePhraseBook(s, loadSketch) { } } } - for(key in phraseBook){ - phraseBook[key].forEach(function(item){ + for(k in phraseBook){ + phraseBook[k].forEach(function(item){ traverse(item.tree); }); - definedRef[definedRef.length] = key; - if(phraseBook[key].parameters){ - phraseBook[key].parameters.forEach(function(item){ + definedRef[definedRef.length] = k; + if(phraseBook[k].parameters){ + phraseBook[k].parameters.forEach(function(item){ if(definedRef.indexOf(item) === -1) definedRef[definedRef.length] = item; }); } From 6f659221e7c12f91edf0392dd49da8befb50691d Mon Sep 17 00:00:00 2001 From: kunal-mohta Date: Sat, 24 Feb 2018 14:04:24 +0530 Subject: [PATCH 4/4] only node type key as reference --- js/core.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/js/core.js b/js/core.js index 96a9a08..c9689d0 100644 --- a/js/core.js +++ b/js/core.js @@ -1172,10 +1172,8 @@ async function parsePhraseBook(s, loadSketch) { } } } - else if(x.type === "Ref"){ - if(references.indexOf(x.node.key) === -1){ - references[references.length] = x.node.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){ @@ -1194,7 +1192,6 @@ async function parsePhraseBook(s, loadSketch) { throw new Error(`Cannot find reference to ${item}`); } }); - phraseBook['%preamble'] = preamble; phraseBook['%imports'] = imports; return phraseBook;