public static function lockFunctionList()
 {
     self::$lock_function_list = true;
 }
 public static function patch($source)
 {
     $patched = false;
     self::$replacement = [];
     $parser = new Parser(new Lexer(['usedAttributes' => ['startTokenPos', 'endTokenPos']]));
     $traverser = new NodeTraverser();
     $traverser->addVisitor(new NodeVisitor());
     $ast_orig = $parser->parse($source);
     $traverser->traverse($ast_orig);
     if (self::$replacement !== []) {
         $patched = true;
         $new_source = self::generateNewSource($source);
     } else {
         $new_source = $source;
     }
     return [$new_source, $patched];
 }