Mercurial > hg > truffle
annotate src/share/vm/services/diagnosticArgument.hpp @ 5763:a3d71693e0ce
removed bytecode disassembly from CodeCacheRuntime into separate BytecodeDisassembler class
removed VM call for doing bytecode disassembly
added support for explicitly excluding classes from JaCoCo (put '// JaCoCo Exclude' somewhere in the source file)
added node intrinsics to MaterializeNode
added snippets for the UnsignedMath classes
each file opened by CFGPrinter now includes a unique id in its name to avoid a race of multiple threads writing to the same file
the IdealGraphPrinter uses the new BytecodeDisassembler mechanism
teh UnsignedMath class is exclude from JaCoCo processing as it is used in snippets
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 04 Jul 2012 21:57:49 +0200 |
parents | f1cb6f9cfe21 |
children | 51612f0c0a79 |
rev | line source |
---|---|
4133 | 1 /* |
4932
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
2 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. |
4133 | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 * | |
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
20 * or visit www.oracle.com if you need additional information or have any | |
21 * questions. | |
22 * | |
23 */ | |
24 | |
25 #ifndef SHARE_VM_SERVICES_DIAGNOSTICARGUMENT_HPP | |
26 #define SHARE_VM_SERVICES_DIAGNOSTICARGUMENT_HPP | |
27 | |
28 #include "classfile/vmSymbols.hpp" | |
29 #include "memory/allocation.hpp" | |
30 #include "runtime/os.hpp" | |
31 #include "runtime/thread.hpp" | |
32 #include "utilities/exceptions.hpp" | |
33 | |
4932
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
34 class StringArrayArgument : public CHeapObj { |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
35 private: |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
36 GrowableArray<char*>* _array; |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
37 public: |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
38 StringArrayArgument() { |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
39 _array = new(ResourceObj::C_HEAP)GrowableArray<char *>(32, true); |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
40 assert(_array != NULL, "Sanity check"); |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
41 } |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
42 void add(const char* str, size_t len) { |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
43 if (str != NULL) { |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
44 char* ptr = NEW_C_HEAP_ARRAY(char, len+1); |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
45 strncpy(ptr, str, len); |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
46 ptr[len] = 0; |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
47 _array->append(ptr); |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
48 } |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
49 } |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
50 GrowableArray<char*>* array() { |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
51 return _array; |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
52 } |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
53 ~StringArrayArgument() { |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
54 for (int i=0; i<_array->length(); i++) { |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
55 if(_array->at(i) != NULL) { // Safety check |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
56 FREE_C_HEAP_ARRAY(char, _array->at(i)); |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
57 } |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
58 } |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
59 delete _array; |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
60 } |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
61 }; |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
62 |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
63 class NanoTimeArgument { |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
64 public: |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
65 jlong _nanotime; |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
66 jlong _time; |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
67 char _unit[3]; |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
68 }; |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
69 |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
70 class MemorySizeArgument { |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
71 public: |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
72 u8 _size; |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
73 u8 _val; |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
74 char _multiplier; |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
75 }; |
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
76 |
4133 | 77 class GenDCmdArgument : public ResourceObj { |
78 protected: | |
79 GenDCmdArgument* _next; | |
80 const char* _name; | |
81 const char* _description; | |
82 const char* _type; | |
83 const char* _default_string; | |
84 bool _is_set; | |
85 bool _is_mandatory; | |
4932
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
86 bool _allow_multiple; |
4133 | 87 GenDCmdArgument(const char* name, const char* description, const char* type, |
88 const char* default_string, bool mandatory) { | |
89 _name = name; | |
90 _description = description; | |
91 _type = type; | |
92 _default_string = default_string; | |
93 _is_mandatory = mandatory; | |
94 _is_set = false; | |
4932
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
95 _allow_multiple = false; |
4133 | 96 }; |
97 public: | |
98 const char* name() { return _name; } | |
99 const char* description() { return _description; } | |
100 const char* type() { return _type; } | |
101 const char* default_string() { return _default_string; } | |
102 bool is_set() { return _is_set; } | |
103 void set_is_set(bool b) { _is_set = b; } | |
4932
f1cb6f9cfe21
7145243: Need additional specializations for argument parsing framework
fparain
parents:
4133
diff
changeset
|
104 bool allow_multiple() { return _allow_multiple; } |
4133 | 105 bool is_mandatory() { return _is_mandatory; } |
106 bool has_value() { return _is_set || _default_string != NULL; } | |
107 bool has_default() { return _default_string != NULL; } | |
108 void read_value(const char* str, size_t len, TRAPS); | |
109 virtual void parse_value(const char* str, size_t len, TRAPS) = 0; | |
110 virtual void init_value(TRAPS) = 0; | |
111 virtual void reset(TRAPS) = 0; | |
112 virtual void cleanup() = 0; | |
113 void set_next(GenDCmdArgument* arg) { | |
114 _next = arg; | |
115 } | |
116 GenDCmdArgument* next() { | |
117 return _next; | |
118 } | |
119 }; | |
120 | |
121 template <class ArgType> class DCmdArgument: public GenDCmdArgument { | |
122 private: | |
123 ArgType _value; | |
124 public: | |
125 DCmdArgument(const char* name, const char* description, const char* type, | |
126 bool mandatory) : | |
127 GenDCmdArgument(name, description, type, NULL, mandatory) { } | |
128 DCmdArgument(const char* name, const char* description, const char* type, | |
129 bool mandatory, const char* defaultvalue) : | |
130 GenDCmdArgument(name, description, type, defaultvalue, mandatory) | |
131 { } | |
132 ~DCmdArgument() { destroy_value(); } | |
133 ArgType value() { return _value;} | |
134 void set_value(ArgType v) { _value = v; } | |
135 void reset(TRAPS) { | |
136 destroy_value(); | |
137 init_value(CHECK); | |
138 _is_set = false; | |
139 } | |
140 void cleanup() { | |
141 destroy_value(); | |
142 } | |
143 void parse_value(const char* str, size_t len, TRAPS); | |
144 void init_value(TRAPS); | |
145 void destroy_value(); | |
146 }; | |
147 | |
148 #endif /* SHARE_VM_SERVICES_DIAGNOSTICARGUMENT_HPP */ |