--- a/src/hotspot/share/services/diagnosticFramework.cpp Fri Jun 15 16:53:58 2018 -0400
+++ b/src/hotspot/share/services/diagnosticFramework.cpp Sat Jun 16 07:05:09 2018 +0200
@@ -34,7 +34,9 @@
#include "services/diagnosticFramework.hpp"
#include "services/management.hpp"
-CmdLine::CmdLine(const char* line, size_t len, bool no_command_name) {
+CmdLine::CmdLine(const char* line, size_t len, bool no_command_name)
+ : _cmd(line), _cmd_len(0), _args(NULL), _args_len(0)
+{
assert(line != NULL, "Command line string should not be NULL");
const char* line_end;
const char* cmd_end;
@@ -251,7 +253,7 @@
}
}
-void DCmdParser::print_help(outputStream* out, const char* cmd_name) {
+void DCmdParser::print_help(outputStream* out, const char* cmd_name) const {
out->print("Syntax : %s %s", cmd_name, _options == NULL ? "" : "[options]");
GenDCmdArgument* arg = _arguments_list;
while (arg != NULL) {
@@ -323,7 +325,7 @@
}
}
-int DCmdParser::num_arguments() {
+int DCmdParser::num_arguments() const {
GenDCmdArgument* arg = _arguments_list;
int count = 0;
while (arg != NULL) {
@@ -338,7 +340,7 @@
return count;
}
-GrowableArray<const char *>* DCmdParser::argument_name_array() {
+GrowableArray<const char *>* DCmdParser::argument_name_array() const {
int count = num_arguments();
GrowableArray<const char *>* array = new GrowableArray<const char *>(count);
GenDCmdArgument* arg = _arguments_list;
@@ -354,7 +356,7 @@
return array;
}
-GrowableArray<DCmdArgumentInfo*>* DCmdParser::argument_info_array() {
+GrowableArray<DCmdArgumentInfo*>* DCmdParser::argument_info_array() const {
int count = num_arguments();
GrowableArray<DCmdArgumentInfo*>* array = new GrowableArray<DCmdArgumentInfo *>(count);
int idx = 0;
@@ -399,6 +401,7 @@
break;
}
if (line.is_executable()) {
+ ResourceMark rm;
DCmd* command = DCmdFactory::create_local_DCmd(source, line, out, CHECK);
assert(command != NULL, "command error must be handled before this line");
DCmdMark mark(command);
@@ -413,7 +416,7 @@
_dcmdparser.parse(line, delim, CHECK);
}
-void DCmdWithParser::print_help(const char* name) {
+void DCmdWithParser::print_help(const char* name) const {
_dcmdparser.print_help(output(), name);
}
@@ -425,11 +428,11 @@
_dcmdparser.cleanup();
}
-GrowableArray<const char*>* DCmdWithParser::argument_name_array() {
+GrowableArray<const char*>* DCmdWithParser::argument_name_array() const {
return _dcmdparser.argument_name_array();
}
-GrowableArray<DCmdArgumentInfo*>* DCmdWithParser::argument_info_array() {
+GrowableArray<DCmdArgumentInfo*>* DCmdWithParser::argument_info_array() const {
return _dcmdparser.argument_info_array();
}
@@ -519,20 +522,6 @@
return 0; // Actually, there's no checks for duplicates
}
-DCmd* DCmdFactory::create_global_DCmd(DCmdSource source, CmdLine &line,
- outputStream* out, TRAPS) {
- DCmdFactory* f = factory(source, line.cmd_addr(), line.cmd_len());
- if (f != NULL) {
- if (f->is_enabled()) {
- THROW_MSG_NULL(vmSymbols::java_lang_IllegalArgumentException(),
- f->disabled_message());
- }
- return f->create_Cheap_instance(out);
- }
- THROW_MSG_NULL(vmSymbols::java_lang_IllegalArgumentException(),
- "Unknown diagnostic command");
-}
-
DCmd* DCmdFactory::create_local_DCmd(DCmdSource source, CmdLine &line,
outputStream* out, TRAPS) {
DCmdFactory* f = factory(source, line.cmd_addr(), line.cmd_len());