whole_func_string: function(callback) {
        var t = this;
        var className = this.__className;
        t.__fatalCompileError = false;
        t.__numClassesDefined = 0;
  
        fs.readFile(this.getSourcePath(), {encoding: "utf-8"}, function(err, src) {
          if (err) {
            callback(err);
            return;
          }
  
          try {
            let options = t.__analyser.getBabelOptions() || {};
            options.modules = false;
            var config = {
                babelrc: false,
                sourceFileName : t.getSourcePath(),
                filename: t.getSourcePath(),
                sourceMaps: true,
                "presets": [
                  [ require.resolve("@babel/preset-env"), options]
                ],
                plugins: [
                  t._babelClassPlugin()
                ],
                parserOpts: { sourceType: "script" },
                passPerPreset: true
              };
            var result = babelCore.transform(src, config);
          } catch (ex) {
            if (ex._babel) {
              console.log(ex);
            }
            t.addMarker("compiler.syntaxError", ex.loc, ex.message, ex.codeFrame);
            t.__fatalCompileError = true;
            t._compileDbClassInfo();
            callback();
            return;
          }
          
          if (!t.__numClassesDefined) {
            t.addMarker("compiler.missingClassDef");
            t.__fatalCompileError = true;
            t._compileDbClassInfo();
            callback();
            return;
          }
  
          if (!t.__metaDefinitions[className]) {
            t.addMarker("compiler.wrongClassName", null, className, Object.keys(t.__metaDefinitions).join(", "));
            t._compileDbClassInfo();
          }
  
          var pos = className.lastIndexOf("."); 
          var name = pos > -1 ? className.substring(pos + 1) : className;
          var outputPath = t.getOutputPath();
          util.mkParentPath(outputPath, function(err) {
            if (err) {
              callback(err);
              return;
            }
            fs.writeFile(outputPath, result.code + "\n\n//# sourceMappingURL=" + name + ".js.map?dt=" + (new Date().getTime()), {encoding: "utf-8"}, function(err) {
              if (err) {
                callback(err);
                return;
              }
              fs.writeFile(outputPath + ".map", JSON.stringify(result.map, null, 2), {encoding: "utf-8"}, function(err) {
                if (err) {
                  callback(err);
                  return;
                }
                t._waitForTaskQueueDrain(function() {
                  callback();
                });
              });
            });
          });
        });
      }
func_code_string: function(callback) {
        var t = this;
        var className = this.__className;
        t.__fatalCompileError = false;
        t.__numClassesDefined = 0;
  
        fs.readFile(this.getSourcePath(), {encoding: "utf-8"}, function(err, src) {
          if (err) {
            callback(err);
            return;
          }
  
          try {
            let options = t.__analyser.getBabelOptions() || {};
            options.modules = false;
            var config = {
                babelrc: false,
                sourceFileName : t.getSourcePath(),
                filename: t.getSourcePath(),
                sourceMaps: true,
                "presets": [
                  [ require.resolve("@babel/preset-env"), options]
                ],
                plugins: [
                  t._babelClassPlugin()
                ],
                parserOpts: { sourceType: "script" },
                passPerPreset: true
              };
            var result = babelCore.transform(src, config);
          } catch (ex) {
            if (ex._babel) {
              console.log(ex);
            }
            t.addMarker("compiler.syntaxError", ex.loc, ex.message, ex.codeFrame);
            t.__fatalCompileError = true;
            t._compileDbClassInfo();
            callback();
            return;
          }
          
          if (!t.__numClassesDefined) {
            t.addMarker("compiler.missingClassDef");
            t.__fatalCompileError = true;
            t._compileDbClassInfo();
            callback();
            return;
          }
  
          if (!t.__metaDefinitions[className]) {
            t.addMarker("compiler.wrongClassName", null, className, Object.keys(t.__metaDefinitions).join(", "));
            t._compileDbClassInfo();
          }
  
          var pos = className.lastIndexOf("."); 
          var name = pos > -1 ? className.substring(pos + 1) : className;
          var outputPath = t.getOutputPath();
          util.mkParentPath(outputPath, function(err) {
            if (err) {
              callback(err);
              return;
            }
            fs.writeFile(outputPath, result.code + "\n\n//# sourceMappingURL=" + name + ".js.map?dt=" + (new Date().getTime()), {encoding: "utf-8"}, function(err) {
              if (err) {
                callback(err);
                return;
              }
              fs.writeFile(outputPath + ".map", JSON.stringify(result.map, null, 2), {encoding: "utf-8"}, function(err) {
                if (err) {
                  callback(err);
                  return;
                }
                t._waitForTaskQueueDrain(function() {
                  callback();
                });
              });
            });
          });
        });
      }
func_documentation_string: Loads the source, transpiles and analyses the code, storing the result in outputPath
  
  @param callback
  {Function} callback for when the load is completed