31 #include "utilities/exceptions.hpp" 32 #include "utilities/macros.hpp" 33 34 // The VM class loader. 35 #include <sys/stat.h> 36 37 // Name of boot "modules" image 38 #define MODULES_IMAGE_NAME "modules" 39 40 // Class path entry (directory or zip file) 41 42 class JImageFile; 43 class ClassFileStream; 44 class PackageEntry; 45 46 class ClassPathEntry : public CHeapObj<mtClass> { 47 private: 48 ClassPathEntry* volatile _next; 49 public: 50 // Next entry in class path 51 ClassPathEntry* next() const { 52 return (ClassPathEntry*) OrderAccess::load_ptr_acquire(&_next); 53 } 54 virtual ~ClassPathEntry() {} 55 void set_next(ClassPathEntry* next) { 56 // may have unlocked readers, so ensure visibility. 57 OrderAccess::release_store_ptr(&_next, next); 58 } 59 virtual bool is_jrt() = 0; 60 virtual bool is_jar_file() const = 0; 61 virtual const char* name() const = 0; 62 virtual JImageFile* jimage() const = 0; 63 // Constructor 64 ClassPathEntry() : _next(NULL) {} 65 // Attempt to locate file_name through this class path entry. 66 // Returns a class file parsing stream if successfull. 67 virtual ClassFileStream* open_stream(const char* name, TRAPS) = 0; 68 // Debugging 69 NOT_PRODUCT(virtual void compile_the_world(Handle loader, TRAPS) = 0;) 70 }; 71 72 class ClassPathDirEntry: public ClassPathEntry { 73 private: 74 const char* _dir; // Name of directory 75 public: 76 bool is_jrt() { return false; } 77 bool is_jar_file() const { return false; } | 31 #include "utilities/exceptions.hpp" 32 #include "utilities/macros.hpp" 33 34 // The VM class loader. 35 #include <sys/stat.h> 36 37 // Name of boot "modules" image 38 #define MODULES_IMAGE_NAME "modules" 39 40 // Class path entry (directory or zip file) 41 42 class JImageFile; 43 class ClassFileStream; 44 class PackageEntry; 45 46 class ClassPathEntry : public CHeapObj<mtClass> { 47 private: 48 ClassPathEntry* volatile _next; 49 public: 50 // Next entry in class path 51 ClassPathEntry* next() const { return OrderAccess::load_acquire(&_next); } 52 virtual ~ClassPathEntry() {} 53 void set_next(ClassPathEntry* next) { 54 // may have unlocked readers, so ensure visibility. 55 OrderAccess::release_store(&_next, next); 56 } 57 virtual bool is_jrt() = 0; 58 virtual bool is_jar_file() const = 0; 59 virtual const char* name() const = 0; 60 virtual JImageFile* jimage() const = 0; 61 // Constructor 62 ClassPathEntry() : _next(NULL) {} 63 // Attempt to locate file_name through this class path entry. 64 // Returns a class file parsing stream if successfull. 65 virtual ClassFileStream* open_stream(const char* name, TRAPS) = 0; 66 // Debugging 67 NOT_PRODUCT(virtual void compile_the_world(Handle loader, TRAPS) = 0;) 68 }; 69 70 class ClassPathDirEntry: public ClassPathEntry { 71 private: 72 const char* _dir; // Name of directory 73 public: 74 bool is_jrt() { return false; } 75 bool is_jar_file() const { return false; } |