58 AfterErgo = 1, |
58 AfterErgo = 1, |
59 // Will be validated inside universe_init(), right after Metaspace::global_initialize(). |
59 // Will be validated inside universe_init(), right after Metaspace::global_initialize(). |
60 AfterMemoryInit = 2 |
60 AfterMemoryInit = 2 |
61 }; |
61 }; |
62 |
62 |
|
63 protected: |
|
64 const JVMFlag* const _flag; |
|
65 |
63 private: |
66 private: |
64 const char* _name; |
|
65 ConstraintType _validate_type; |
67 ConstraintType _validate_type; |
66 |
68 |
67 public: |
69 public: |
68 // the "name" argument must be a string literal |
70 // the "name" argument must be a string literal |
69 JVMFlagConstraint(const char* name, ConstraintType type) { _name=name; _validate_type=type; }; |
71 JVMFlagConstraint(const JVMFlag* flag, ConstraintType type) : _flag(flag), _validate_type(type) {} |
70 ~JVMFlagConstraint() {}; |
72 ~JVMFlagConstraint() {} |
71 const char* name() const { return _name; } |
73 const JVMFlag* flag() const { return _flag; } |
72 ConstraintType type() const { return _validate_type; } |
74 ConstraintType type() const { return _validate_type; } |
73 virtual JVMFlag::Error apply(bool verbose = true) { ShouldNotReachHere(); return JVMFlag::ERR_OTHER; }; |
75 virtual JVMFlag::Error apply(bool verbose = true) { ShouldNotReachHere(); return JVMFlag::ERR_OTHER; }; |
74 virtual JVMFlag::Error apply_bool(bool value, bool verbose = true) { ShouldNotReachHere(); return JVMFlag::ERR_OTHER; }; |
76 virtual JVMFlag::Error apply_bool(bool value, bool verbose = true) { ShouldNotReachHere(); return JVMFlag::ERR_OTHER; }; |
75 virtual JVMFlag::Error apply_int(int value, bool verbose = true) { ShouldNotReachHere(); return JVMFlag::ERR_OTHER; }; |
77 virtual JVMFlag::Error apply_int(int value, bool verbose = true) { ShouldNotReachHere(); return JVMFlag::ERR_OTHER; }; |
76 virtual JVMFlag::Error apply_intx(intx value, bool verbose = true) { ShouldNotReachHere(); return JVMFlag::ERR_OTHER; }; |
78 virtual JVMFlag::Error apply_intx(intx value, bool verbose = true) { ShouldNotReachHere(); return JVMFlag::ERR_OTHER; }; |
88 static JVMFlagConstraint::ConstraintType _validating_type; |
90 static JVMFlagConstraint::ConstraintType _validating_type; |
89 public: |
91 public: |
90 static void init(); |
92 static void init(); |
91 static int length() { return (_constraints != NULL) ? _constraints->length() : 0; } |
93 static int length() { return (_constraints != NULL) ? _constraints->length() : 0; } |
92 static JVMFlagConstraint* at(int i) { return (_constraints != NULL) ? _constraints->at(i) : NULL; } |
94 static JVMFlagConstraint* at(int i) { return (_constraints != NULL) ? _constraints->at(i) : NULL; } |
93 static JVMFlagConstraint* find(const char* name); |
95 static JVMFlagConstraint* find(const JVMFlag* flag); |
94 static JVMFlagConstraint* find_if_needs_check(const char* name); |
96 static JVMFlagConstraint* find_if_needs_check(const JVMFlag* flag); |
95 static void add(JVMFlagConstraint* constraint) { _constraints->append(constraint); } |
97 static void add(JVMFlagConstraint* constraint) { _constraints->append(constraint); } |
96 // True if 'AfterErgo' or later constraint functions are validated. |
98 // True if 'AfterErgo' or later constraint functions are validated. |
97 static bool validated_after_ergo() { return _validating_type >= JVMFlagConstraint::AfterErgo; }; |
99 static bool validated_after_ergo() { return _validating_type >= JVMFlagConstraint::AfterErgo; }; |
98 static bool check_constraints(JVMFlagConstraint::ConstraintType type); |
100 static bool check_constraints(JVMFlagConstraint::ConstraintType type); |
99 }; |
101 }; |