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
40
  | var TYPE = require('../../tokenizer').TYPE; 
 |    
 |  var RIGHTPARENTHESIS = TYPE.RightParenthesis; 
 |    
 |  // <function-token> <sequence> ) 
 |  module.exports = { 
 |      name: 'Function', 
 |      structure: { 
 |          name: String, 
 |          children: [[]] 
 |      }, 
 |      parse: function(readSequence, recognizer) { 
 |          var start = this.scanner.tokenStart; 
 |          var name = this.consumeFunctionName(); 
 |          var nameLowerCase = name.toLowerCase(); 
 |          var children; 
 |    
 |          children = recognizer.hasOwnProperty(nameLowerCase) 
 |              ? recognizer[nameLowerCase].call(this, recognizer) 
 |              : readSequence.call(this, recognizer); 
 |    
 |          if (!this.scanner.eof) { 
 |              this.eat(RIGHTPARENTHESIS); 
 |          } 
 |    
 |          return { 
 |              type: 'Function', 
 |              loc: this.getLocation(start, this.scanner.tokenStart), 
 |              name: name, 
 |              children: children 
 |          }; 
 |      }, 
 |      generate: function(node) { 
 |          this.chunk(node.name); 
 |          this.chunk('('); 
 |          this.children(node); 
 |          this.chunk(')'); 
 |      }, 
 |      walkContext: 'function' 
 |  }; 
 |  
  |