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; }
|