whole_func_string: function readData(fullPath, data, type, path) {
      var vow = VOW.make();
      // var isModule = Path.extname(Path.basename(path, Path.extname(path))) === '.nm';
      // if (isModule) fullPath = Path.dirname + '/'  + Path.basename(path, Path.extname(path))
      if (data) vow.keep({ recast: data, type: type, isModule: data.isModule});
      else {
          type = Path.extname(fullPath).slice(1);
          // if (!type) vow.breek('Extension missing: ' + path);
          // else
          fs.readFile(decodeURI(fullPath), function(err, data) {
              if (err) vow.breek({ srcPath: path, missing: true, recastError: 'Error reading file ' + fullPath + ':' + err});
              else vow.keep({ recast: data, type: type, isModule: data.isModule });
          });
      }
      return vow.promise;
  }
func_code_string: function readData(fullPath, data, type, path) {
      var vow = VOW.make();
      // var isModule = Path.extname(Path.basename(path, Path.extname(path))) === '.nm';
      // if (isModule) fullPath = Path.dirname + '/'  + Path.basename(path, Path.extname(path))
      if (data) vow.keep({ recast: data, type: type, isModule: data.isModule});
      else {
          type = Path.extname(fullPath).slice(1);
          // if (!type) vow.breek('Extension missing: ' + path);
          // else
          fs.readFile(decodeURI(fullPath), function(err, data) {
              if (err) vow.breek({ srcPath: path, missing: true, recastError: 'Error reading file ' + fullPath + ':' + err});
              else vow.keep({ recast: data, type: type, isModule: data.isModule });
          });
      }
      return vow.promise;
  }
func_documentation_string: function Typeof(v) { var type = {}.toString.call(v); return type.slice(8, type.length-1); }