code: def buildTables(self):
          
  
          if not self.features:
              return
  
          # the path is used by the lexer to follow 'include' statements;
          # if we generated some automatic features, includes have already been
          # resolved, and we work from a string which does't exist on disk
          path = self.ufo.path if not self.featureWriters else None
          try:
              addOpenTypeFeaturesFromString(
                  self.ttFont, self.features, filename=path
              )
          except FeatureLibError:
              if path is None:
                  # if compilation fails, create temporary file for inspection
                  data = tobytes(self.features, encoding="utf-8")
                  with NamedTemporaryFile(delete=False) as tmp:
                      tmp.write(data)
                  logger.error(
                      "Compilation failed! Inspect temporary file: %r", tmp.name
                  )
              raise
docs: Compile OpenType feature tables from the source.
          Raises a FeaLibError if the feature compilation was unsuccessful.
  
          **This should not be called externally.** Subclasses
          may override this method to handle the table compilation
          in a different way if desired.