1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
define.class(function(require, exports, self){
self.atConstructor = function(defs){
this.defs = defs
}
self.walk = function(node, parent, defs){
if(this[node.type] && this[node.type](node, parent)) return true
var lut = this.defs[node.type]
if(!lut) console.log('Cannot find', node.type, node)
for(var item in lut){
var type = lut[item]
if(type == 3){
var array = node[item]
if(array) for(var i =0 ; i < array.length; i++){
var item = array[i]
if(this.walk(item.key, node)) return true
if(this.walk(item.value, node)) return true
}
}
else if(type == 2){
var array = node[item]
if(array) for(var i = 0; i<array.length; i++) {
if(this.walk(array[i], node)) return true
}
}
else if(type == 1){
if(node[item] && this.walk(node[item], node)) return true
}
}
}
})
|