whole_func_string: function Module(node) {
      var exports = node.body.exports;
      var modDefns = node.body.modDefns;
  
      var exportedModules = new Dict();
  
      exports.forEach(function(name, exp) {
          var node = exp.node;
          if (node.type === MODULE) {
              exportedModules.set(name, node);
          } else if (!exp.isDefinition && node.type === IDENTIFIER && modDefns.has(node.value)) {
              var mod = modDefns.get(node.value);
              exportedModules.set(name, mod);
          }
      });
  
      this.node = node;
      this.exports = exports;
      this.exportedModules = exportedModules;
  }
func_code_string: function Module(node) {
      var exports = node.body.exports;
      var modDefns = node.body.modDefns;
  
      var exportedModules = new Dict();
  
      exports.forEach(function(name, exp) {
          var node = exp.node;
          if (node.type === MODULE) {
              exportedModules.set(name, node);
          } else if (!exp.isDefinition && node.type === IDENTIFIER && modDefns.has(node.value)) {
              var mod = modDefns.get(node.value);
              exportedModules.set(name, mod);
          }
      });
  
      this.node = node;
      this.exports = exports;
      this.exportedModules = exportedModules;
  }
func_documentation_string: /*
  Module :: (node) -> Module
  
  Static semantic representation of a module.