Improve sanity checks in compiler and visitor

This commit is contained in:
kpdecker
2015-08-22 10:57:24 -07:00
parent 729d9fdffe
commit 2571dd8e8e
2 changed files with 13 additions and 2 deletions
+5
View File
@@ -90,6 +90,11 @@ Compiler.prototype = {
},
accept: function(node) {
/* istanbul ignore next: Sanity code */
if (!this[node.type]) {
throw new Exception('Unknown type: ' + node.type, node);
}
this.sourceNode.unshift(node);
let ret = this[node.type](node);
this.sourceNode.shift();
+8 -2
View File
@@ -12,8 +12,9 @@ Visitor.prototype = {
acceptKey: function(node, name) {
let value = this.accept(node[name]);
if (this.mutating) {
// Hacky sanity check:
if (value && typeof value.type !== 'string') {
// Hacky sanity check: This may have a few false positives for type for the helper
// methods but will generally do the right thing without a lot of overhead.
if (value && !Visitor.prototype[value.type]) {
throw new Exception('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type);
}
node[name] = value;
@@ -49,6 +50,11 @@ Visitor.prototype = {
return;
}
/* istanbul ignore next: Sanity code */
if (!this[object.type]) {
throw new Exception('Unknown type: ' + object.type, object);
}
if (this.current) {
this.parents.unshift(this.current);
}