Use the operator<< generator more widely.
Change-Id: Iae3b8f32f49f4c91cd41c53bbafb95db071d57bb
diff --git a/build/Android.common.mk b/build/Android.common.mk
index 28ac65b..8191b43 100644
--- a/build/Android.common.mk
+++ b/build/Android.common.mk
@@ -145,7 +145,6 @@
src/java_lang_reflect_Method.cc \
src/java_lang_reflect_Proxy.cc \
src/java_util_concurrent_atomic_AtomicLong.cc \
- src/jdwp/jdwp_constants.cc \
src/jdwp/jdwp_event.cc \
src/jdwp/jdwp_expand_buf.cc \
src/jdwp/jdwp_handler.cc \
@@ -268,9 +267,12 @@
endif # HOST_ARCH != x86
LIBART_ENUM_OPERATOR_OUT_HEADER_FILES := \
+ src/dex_verifier.h \
src/indirect_reference_table.h \
src/instruction_set.h \
src/invoke_type.h \
+ src/jdwp/jdwp.h \
+ src/jdwp/jdwp_constants.h \
src/mutex.h
LIBARTTEST_COMMON_SRC_FILES := \
diff --git a/jdwpspy/Android.mk b/jdwpspy/Android.mk
index 60ccb38..a6c2f64 100644
--- a/jdwpspy/Android.mk
+++ b/jdwpspy/Android.mk
@@ -5,8 +5,7 @@
LOCAL_SRC_FILES:= \
Main.cpp \
- Net.cpp \
- find_JdwpConstants.cpp
+ Net.cpp
LOCAL_C_INCLUDES += \
art/src
@@ -14,4 +13,3 @@
LOCAL_MODULE := jdwpspy
include $(BUILD_HOST_EXECUTABLE)
-
diff --git a/jdwpspy/Net.cpp b/jdwpspy/Net.cpp
index abcae21..55515f1 100644
--- a/jdwpspy/Net.cpp
+++ b/jdwpspy/Net.cpp
@@ -510,7 +510,7 @@
printf("%s --> %s\n", prefix, getCommandName(cmdSet, cmd));
} else {
std::ostringstream ss;
- ss << error;
+ ss << "TODO"; // get access to the operator<<, or regenerate it for jdwpspy?
printf("%s REPLY dataLen=%-5u id=0x%08x flags=0x%02x err=%d (%s) [%02d:%02d]\n",
prefix, dataLen, id, flags, error, ss.str().c_str(), min,sec);
}
diff --git a/jdwpspy/find_JdwpConstants.cpp b/jdwpspy/find_JdwpConstants.cpp
deleted file mode 100644
index d035d2e..0000000
--- a/jdwpspy/find_JdwpConstants.cpp
+++ /dev/null
@@ -1 +0,0 @@
-#include "jdwp/jdwp_constants.cc"
diff --git a/src/dex_verifier.cc b/src/dex_verifier.cc
index 987777c..f02379c 100644
--- a/src/dex_verifier.cc
+++ b/src/dex_verifier.cc
@@ -43,26 +43,6 @@
static const bool gDebugVerify = false;
-std::ostream& operator<<(std::ostream& os, const VerifyError& rhs) {
- switch (rhs) {
- case VERIFY_ERROR_NONE: os << "VERIFY_ERROR_NONE"; break;
- case VERIFY_ERROR_BAD_CLASS_HARD: os << "VERIFY_ERROR_BAD_CLASS_HARD"; break;
- case VERIFY_ERROR_BAD_CLASS_SOFT: os << "VERIFY_ERROR_BAD_CLASS_SOFT"; break;
- case VERIFY_ERROR_NO_CLASS: os << "VERIFY_ERROR_NO_CLASS"; break;
- case VERIFY_ERROR_NO_FIELD: os << "VERIFY_ERROR_NO_FIELD"; break;
- case VERIFY_ERROR_NO_METHOD: os << "VERIFY_ERROR_NO_METHOD"; break;
- case VERIFY_ERROR_ACCESS_CLASS: os << "VERIFY_ERROR_ACCESS_CLASS"; break;
- case VERIFY_ERROR_ACCESS_FIELD: os << "VERIFY_ERROR_ACCESS_FIELD"; break;
- case VERIFY_ERROR_ACCESS_METHOD: os << "VERIFY_ERROR_ACCESS_METHOD"; break;
- case VERIFY_ERROR_CLASS_CHANGE: os << "VERIFY_ERROR_CLASS_CHANGE"; break;
- case VERIFY_ERROR_INSTANTIATION: os << "VERIFY_ERROR_INSTANTIATION"; break;
- default:
- os << "VerifyError[" << static_cast<int>(rhs) << "]";
- break;
- }
- return os;
-}
-
static const char* type_strings[] = {
"Unknown",
"Conflict",
@@ -1681,8 +1661,7 @@
<< " insns_size=" << insns_size << ")";
}
/* Create and initialize table holding register status */
- reg_table_.Init(PcToRegisterLineTable::kTrackRegsGcPoints, insn_flags_.get(), insns_size,
- registers_size, this);
+ reg_table_.Init(kTrackRegsGcPoints, insn_flags_.get(), insns_size, registers_size, this);
work_line_.reset(new RegisterLine(registers_size, this));
saved_line_.reset(new RegisterLine(registers_size, this));
diff --git a/src/dex_verifier.h b/src/dex_verifier.h
index ee36f53..ce6963d 100644
--- a/src/dex_verifier.h
+++ b/src/dex_verifier.h
@@ -39,7 +39,7 @@
#if defined(ART_USE_LLVM_COMPILER)
namespace compiler_llvm {
class InferredRegCategoryMap;
-}
+} // namespace compiler_llvm
#endif
namespace verifier {
@@ -61,31 +61,31 @@
class RegType {
public:
enum Type {
- kRegTypeUnknown = 0, /* initial state */
- kRegTypeConflict, /* merge clash makes this reg's type unknowable */
- kRegTypeBoolean, /* Z */
+ kRegTypeUnknown = 0, // Initial state.
+ kRegTypeConflict, // Merge clash makes this reg's type unknowable.
+ kRegTypeBoolean, // Z.
kRegType1nrSTART = kRegTypeBoolean,
kRegTypeIntegralSTART = kRegTypeBoolean,
- kRegTypeByte, /* B */
- kRegTypeShort, /* S */
- kRegTypeChar, /* C */
- kRegTypeInteger, /* I */
+ kRegTypeByte, // B.
+ kRegTypeShort, // S.
+ kRegTypeChar, // C.
+ kRegTypeInteger, // I.
kRegTypeIntegralEND = kRegTypeInteger,
- kRegTypeFloat, /* F */
+ kRegTypeFloat, // F.
kRegType1nrEND = kRegTypeFloat,
- kRegTypeLongLo, /* J - lower-numbered register; endian-independent */
+ kRegTypeLongLo, // J - lower-numbered register; endian-independent.
kRegTypeLongHi,
- kRegTypeDoubleLo, /* D */
+ kRegTypeDoubleLo, // D.
kRegTypeDoubleHi,
- kRegTypeConstLo, /* const derived wide, lower half - could be long or double */
- kRegTypeConstHi, /* const derived wide, upper half - could be long or double */
+ kRegTypeConstLo, // Const derived wide, lower half - could be long or double.
+ kRegTypeConstHi, // Const derived wide, upper half - could be long or double.
kRegTypeLastFixedLocation = kRegTypeConstHi,
- kRegTypeConst, /* 32-bit constant derived value - could be float or int */
- kRegTypeUnresolvedReference, // Reference type that couldn't be resolved
- kRegTypeUninitializedReference, // Freshly allocated reference type
- kRegTypeUninitializedThisReference, // Freshly allocated reference passed as "this"
- kRegTypeUnresolvedAndUninitializedReference, // Freshly allocated unresolved reference type
- kRegTypeReference, // Reference type
+ kRegTypeConst, // 32-bit constant derived value - could be float or int.
+ kRegTypeUnresolvedReference, // Reference type that couldn't be resolved.
+ kRegTypeUninitializedReference, // Freshly allocated reference type.
+ kRegTypeUninitializedThisReference, // Freshly allocated reference passed as "this".
+ kRegTypeUnresolvedAndUninitializedReference, // Freshly allocated unresolved reference type.
+ kRegTypeReference, // Reference type.
};
Type GetType() const {
@@ -422,53 +422,53 @@
}
void SetInTry() {
- flags_ |= 1 << kInsnFlagInTry;
+ flags_ |= 1 << kInTry;
}
void ClearInTry() {
- flags_ &= ~(1 << kInsnFlagInTry);
+ flags_ &= ~(1 << kInTry);
}
bool IsInTry() const {
- return (flags_ & (1 << kInsnFlagInTry)) != 0;
+ return (flags_ & (1 << kInTry)) != 0;
}
void SetBranchTarget() {
- flags_ |= 1 << kInsnFlagBranchTarget;
+ flags_ |= 1 << kBranchTarget;
}
void ClearBranchTarget() {
- flags_ &= ~(1 << kInsnFlagBranchTarget);
+ flags_ &= ~(1 << kBranchTarget);
}
bool IsBranchTarget() const {
- return (flags_ & (1 << kInsnFlagBranchTarget)) != 0;
+ return (flags_ & (1 << kBranchTarget)) != 0;
}
void SetGcPoint() {
- flags_ |= 1 << kInsnFlagGcPoint;
+ flags_ |= 1 << kGcPoint;
}
void ClearGcPoint() {
- flags_ &= ~(1 << kInsnFlagGcPoint);
+ flags_ &= ~(1 << kGcPoint);
}
bool IsGcPoint() const {
- return (flags_ & (1 << kInsnFlagGcPoint)) != 0;
+ return (flags_ & (1 << kGcPoint)) != 0;
}
void SetVisited() {
- flags_ |= 1 << kInsnFlagVisited;
+ flags_ |= 1 << kVisited;
}
void ClearVisited() {
- flags_ &= ~(1 << kInsnFlagVisited);
+ flags_ &= ~(1 << kVisited);
}
bool IsVisited() const {
- return (flags_ & (1 << kInsnFlagVisited)) != 0;
+ return (flags_ & (1 << kVisited)) != 0;
}
void SetChanged() {
- flags_ |= 1 << kInsnFlagChanged;
+ flags_ |= 1 << kChanged;
}
void ClearChanged() {
- flags_ &= ~(1 << kInsnFlagChanged);
+ flags_ &= ~(1 << kChanged);
}
bool IsChanged() const {
- return (flags_ & (1 << kInsnFlagChanged)) != 0;
+ return (flags_ & (1 << kChanged)) != 0;
}
bool IsVisitedOrChanged() const {
@@ -481,21 +481,21 @@
strncpy(encoding, "XXXXX", sizeof(encoding));
} else {
strncpy(encoding, "-----", sizeof(encoding));
- if (IsInTry()) encoding[kInsnFlagInTry] = 'T';
- if (IsBranchTarget()) encoding[kInsnFlagBranchTarget] = 'B';
- if (IsGcPoint()) encoding[kInsnFlagGcPoint] = 'G';
- if (IsVisited()) encoding[kInsnFlagVisited] = 'V';
- if (IsChanged()) encoding[kInsnFlagChanged] = 'C';
+ if (IsInTry()) encoding[kInTry] = 'T';
+ if (IsBranchTarget()) encoding[kBranchTarget] = 'B';
+ if (IsGcPoint()) encoding[kGcPoint] = 'G';
+ if (IsVisited()) encoding[kVisited] = 'V';
+ if (IsChanged()) encoding[kChanged] = 'C';
}
return std::string(encoding);
}
private:
- enum InsnFlag {
- kInsnFlagInTry,
- kInsnFlagBranchTarget,
- kInsnFlagGcPoint,
- kInsnFlagVisited,
- kInsnFlagChanged,
+ enum {
+ kInTry,
+ kBranchTarget,
+ kGcPoint,
+ kVisited,
+ kChanged,
};
// Size of instruction in code units
@@ -547,18 +547,18 @@
* to be rewritten to fail at runtime.
*/
enum VerifyError {
- VERIFY_ERROR_NONE = 0, /* no error; must be zero */
- VERIFY_ERROR_BAD_CLASS_HARD, /* VerifyError; hard error that skips compilation */
- VERIFY_ERROR_BAD_CLASS_SOFT, /* VerifyError; soft error that verifies again at runtime */
+ VERIFY_ERROR_NONE = 0, // No error; must be zero.
+ VERIFY_ERROR_BAD_CLASS_HARD, // VerifyError; hard error that skips compilation.
+ VERIFY_ERROR_BAD_CLASS_SOFT, // VerifyError; soft error that verifies again at runtime.
- VERIFY_ERROR_NO_CLASS, /* NoClassDefFoundError */
- VERIFY_ERROR_NO_FIELD, /* NoSuchFieldError */
- VERIFY_ERROR_NO_METHOD, /* NoSuchMethodError */
- VERIFY_ERROR_ACCESS_CLASS, /* IllegalAccessError */
- VERIFY_ERROR_ACCESS_FIELD, /* IllegalAccessError */
- VERIFY_ERROR_ACCESS_METHOD, /* IllegalAccessError */
- VERIFY_ERROR_CLASS_CHANGE, /* IncompatibleClassChangeError */
- VERIFY_ERROR_INSTANTIATION, /* InstantiationError */
+ VERIFY_ERROR_NO_CLASS, // NoClassDefFoundError.
+ VERIFY_ERROR_NO_FIELD, // NoSuchFieldError.
+ VERIFY_ERROR_NO_METHOD, // NoSuchMethodError.
+ VERIFY_ERROR_ACCESS_CLASS, // IllegalAccessError.
+ VERIFY_ERROR_ACCESS_FIELD, // IllegalAccessError.
+ VERIFY_ERROR_ACCESS_METHOD, // IllegalAccessError.
+ VERIFY_ERROR_CLASS_CHANGE, // IncompatibleClassChangeError.
+ VERIFY_ERROR_INSTANTIATION, // InstantiationError.
};
std::ostream& operator<<(std::ostream& os, const VerifyError& rhs);
@@ -580,9 +580,9 @@
*/
enum RegisterMapFormat {
kRegMapFormatUnknown = 0,
- kRegMapFormatNone = 1, /* indicates no map data follows */
- kRegMapFormatCompact8 = 2, /* compact layout, 8-bit addresses */
- kRegMapFormatCompact16 = 3, /* compact layout, 16-bit addresses */
+ kRegMapFormatNone = 1, // Indicates no map data follows.
+ kRegMapFormatCompact8 = 2, // Compact layout, 8-bit addresses.
+ kRegMapFormatCompact16 = 3, // Compact layout, 16-bit addresses.
};
const int kRegMapFormatShift = 5;
const uint8_t kRegMapFormatMask = 0x7;
@@ -838,16 +838,17 @@
};
std::ostream& operator<<(std::ostream& os, const RegisterLine& rhs);
+// We don't need to store the register data for many instructions, because we either only need
+// it at branch points (for verification) or GC points and branches (for verification +
+// type-precise register analysis).
+enum RegisterTrackingMode {
+ kTrackRegsBranches,
+ kTrackRegsGcPoints,
+ kTrackRegsAll,
+};
+
class PcToRegisterLineTable {
public:
- // We don't need to store the register data for many instructions, because we either only need
- // it at branch points (for verification) or GC points and branches (for verification +
- // type-precise register analysis).
- enum RegisterTrackingMode {
- kTrackRegsBranches,
- kTrackRegsGcPoints,
- kTrackRegsAll,
- };
PcToRegisterLineTable() {}
~PcToRegisterLineTable() {
STLDeleteValues(&pc_to_register_line_);
diff --git a/src/jdwp/jdwp_constants.cc b/src/jdwp/jdwp_constants.cc
deleted file mode 100644
index 15057ea..0000000
--- a/src/jdwp/jdwp_constants.cc
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * String constants to go along with enumerated values. (Pity we don't
- * have enumerated constant reflection in C.) These are only needed for
- * making the output human-readable.
- */
-#include "jdwp/jdwp_constants.h"
-
-#include <iostream>
-
-namespace art {
-
-namespace JDWP {
-
-std::ostream& operator<<(std::ostream& os, const JdwpError& rhs) {
- switch (rhs) {
- case ERR_NONE: os << "NONE"; break;
- case ERR_INVALID_THREAD: os << "INVALID_THREAD"; break;
- case ERR_INVALID_THREAD_GROUP: os << "INVALID_THREAD_GROUP"; break;
- case ERR_INVALID_PRIORITY: os << "INVALID_PRIORITY"; break;
- case ERR_THREAD_NOT_SUSPENDED: os << "THREAD_NOT_SUSPENDED"; break;
- case ERR_THREAD_SUSPENDED: os << "THREAD_SUSPENDED"; break;
- case ERR_THREAD_NOT_ALIVE: os << "THREAD_NOT_ALIVE"; break;
- case ERR_INVALID_OBJECT: os << "INVALID_OBJEC"; break;
- case ERR_INVALID_CLASS: os << "INVALID_CLASS"; break;
- case ERR_CLASS_NOT_PREPARED: os << "CLASS_NOT_PREPARED"; break;
- case ERR_INVALID_METHODID: os << "INVALID_METHODID"; break;
- case ERR_INVALID_LOCATION: os << "INVALID_LOCATION"; break;
- case ERR_INVALID_FIELDID: os << "INVALID_FIELDID"; break;
- case ERR_INVALID_FRAMEID: os << "INVALID_FRAMEID"; break;
- case ERR_NO_MORE_FRAMES: os << "NO_MORE_FRAMES"; break;
- case ERR_OPAQUE_FRAME: os << "OPAQUE_FRAME"; break;
- case ERR_NOT_CURRENT_FRAME: os << "NOT_CURRENT_FRAME"; break;
- case ERR_TYPE_MISMATCH: os << "TYPE_MISMATCH"; break;
- case ERR_INVALID_SLOT: os << "INVALID_SLOT"; break;
- case ERR_DUPLICATE: os << "DUPLICATE"; break;
- case ERR_NOT_FOUND: os << "NOT_FOUND"; break;
- case ERR_INVALID_MONITOR: os << "INVALID_MONITOR"; break;
- case ERR_NOT_MONITOR_OWNER: os << "NOT_MONITOR_OWNER"; break;
- case ERR_INTERRUPT: os << "INTERRUPT"; break;
- case ERR_INVALID_CLASS_FORMAT: os << "INVALID_CLASS_FORMAT"; break;
- case ERR_CIRCULAR_CLASS_DEFINITION: os << "CIRCULAR_CLASS_DEFINITION"; break;
- case ERR_FAILS_VERIFICATION: os << "FAILS_VERIFICATION"; break;
- case ERR_ADD_METHOD_NOT_IMPLEMENTED: os << "ADD_METHOD_NOT_IMPLEMENTED"; break;
- case ERR_SCHEMA_CHANGE_NOT_IMPLEMENTED: os << "SCHEMA_CHANGE_NOT_IMPLEMENTED"; break;
- case ERR_INVALID_TYPESTATE: os << "INVALID_TYPESTATE"; break;
- case ERR_HIERARCHY_CHANGE_NOT_IMPLEMENTED: os << "HIERARCHY_CHANGE_NOT_IMPLEMENTED"; break;
- case ERR_DELETE_METHOD_NOT_IMPLEMENTED: os << "DELETE_METHOD_NOT_IMPLEMENTED"; break;
- case ERR_UNSUPPORTED_VERSION: os << "UNSUPPORTED_VERSION"; break;
- case ERR_NAMES_DONT_MATCH: os << "NAMES_DONT_MATCH"; break;
- case ERR_CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED: os << "CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED"; break;
- case ERR_METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED: os << "METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED"; break;
- case ERR_NOT_IMPLEMENTED: os << "NOT_IMPLEMENTED"; break;
- case ERR_NULL_POINTER: os << "NULL_POINTER"; break;
- case ERR_ABSENT_INFORMATION: os << "ABSENT_INFORMATION"; break;
- case ERR_INVALID_EVENT_TYPE: os << "INVALID_EVENT_TYPE"; break;
- case ERR_ILLEGAL_ARGUMENT: os << "ILLEGAL_ARGUMENT"; break;
- case ERR_OUT_OF_MEMORY: os << "OUT_OF_MEMORY"; break;
- case ERR_ACCESS_DENIED: os << "ACCESS_DENIED"; break;
- case ERR_VM_DEAD: os << "VM_DEAD"; break;
- case ERR_INTERNAL: os << "INTERNAL"; break;
- case ERR_UNATTACHED_THREAD: os << "UNATTACHED_THREAD"; break;
- case ERR_INVALID_TAG: os << "INVALID_TAG"; break;
- case ERR_ALREADY_INVOKING: os << "ALREADY_INVOKING"; break;
- case ERR_INVALID_INDEX: os << "INVALID_INDEX"; break;
- case ERR_INVALID_LENGTH: os << "INVALID_LENGTH"; break;
- case ERR_INVALID_STRING: os << "INVALID_STRING"; break;
- case ERR_INVALID_CLASS_LOADER: os << "INVALID_CLASS_LOADER"; break;
- case ERR_INVALID_ARRAY: os << "INVALID_ARRAY"; break;
- case ERR_TRANSPORT_LOAD: os << "TRANSPORT_LOAD"; break;
- case ERR_TRANSPORT_INIT: os << "TRANSPORT_INIT"; break;
- case ERR_NATIVE_METHOD: os << "NATIVE_METHOD"; break;
- case ERR_INVALID_COUNT: os << "INVALID_COUNT"; break;
- default:
- os << "JdwpError[" << static_cast<int>(rhs) << "]";
- break;
- }
- return os;
-}
-
-std::ostream& operator<<(std::ostream& os, const JdwpEventKind& rhs) {
- switch (rhs) {
- case EK_SINGLE_STEP: os << "SINGLE_STEP"; break;
- case EK_BREAKPOINT: os << "BREAKPOINT"; break;
- case EK_FRAME_POP: os << "FRAME_POP"; break;
- case EK_EXCEPTION: os << "EXCEPTION"; break;
- case EK_USER_DEFINED: os << "USER_DEFINED"; break;
- case EK_THREAD_START: os << "THREAD_START"; break;
- case EK_THREAD_DEATH: os << "THREAD_DEATH"; break;
- case EK_CLASS_PREPARE: os << "CLASS_PREPARE"; break;
- case EK_CLASS_UNLOAD: os << "CLASS_UNLOAD"; break;
- case EK_CLASS_LOAD: os << "CLASS_LOAD"; break;
- case EK_FIELD_ACCESS: os << "FIELD_ACCESS"; break;
- case EK_FIELD_MODIFICATION: os << "FIELD_MODIFICATION"; break;
- case EK_EXCEPTION_CATCH: os << "EXCEPTION_CATCH"; break;
- case EK_METHOD_ENTRY: os << "METHOD_ENTRY"; break;
- case EK_METHOD_EXIT: os << "METHOD_EXIT"; break;
- case EK_METHOD_EXIT_WITH_RETURN_VALUE: os << "METHOD_EXIT_WITH_RETURN_VALUE"; break;
- case EK_MONITOR_CONTENDED_ENTER: os << "MONITOR_CONTENDED_ENTER"; break;
- case EK_MONITOR_CONTENDED_ENTERED: os << "MONITOR_CONTENDED_ENTERED"; break;
- case EK_MONITOR_WAIT: os << "MONITOR_WAIT"; break;
- case EK_MONITOR_WAITED: os << "MONITOR_WAITED"; break;
- case EK_VM_START: os << "VM_START"; break;
- case EK_VM_DEATH: os << "VM_DEATH"; break;
- case EK_VM_DISCONNECTED: os << "VM_DISCONNECTED"; break;
- default:
- os << "JdwpEventKind[" << static_cast<int>(rhs) << "]";
- break;
- }
- return os;
-}
-
-std::ostream& operator<<(std::ostream& os, const JdwpModKind& rhs) {
- switch (rhs) {
- case MK_COUNT: os << "COUNT"; break;
- case MK_CONDITIONAL: os << "CONDITIONAL"; break;
- case MK_THREAD_ONLY: os << "THREAD_ONLY"; break;
- case MK_CLASS_ONLY: os << "CLASS_ONLY"; break;
- case MK_CLASS_MATCH: os << "CLASS_MATCH"; break;
- case MK_CLASS_EXCLUDE: os << "CLASS_EXCLUDE"; break;
- case MK_LOCATION_ONLY: os << "LOCATION_ONLY"; break;
- case MK_EXCEPTION_ONLY: os << "EXCEPTION_ONLY"; break;
- case MK_FIELD_ONLY: os << "FIELD_ONLY"; break;
- case MK_STEP: os << "STEP"; break;
- case MK_INSTANCE_ONLY: os << "INSTANCE_ONLY"; break;
- case MK_SOURCE_NAME_MATCH: os << "SOURCE_NAME_MATCH"; break;
- default:
- os << "JdwpModKind[" << static_cast<int>(rhs) << "]";
- break;
- }
- return os;
-}
-
-std::ostream& operator<<(std::ostream& os, const JdwpStepDepth& rhs) {
- switch (rhs) {
- case SD_INTO: os << "INTO"; break;
- case SD_OVER: os << "OVER"; break;
- case SD_OUT: os << "OUT"; break;
- default:
- os << "JdwpStepDepth[" << static_cast<int>(rhs) << "]";
- break;
- }
- return os;
-}
-
-std::ostream& operator<<(std::ostream& os, const JdwpStepSize& rhs) {
- switch (rhs) {
- case SS_MIN: os << "MIN"; break;
- case SS_LINE: os << "LINE"; break;
- default:
- os << "JdwpStepSize[" << static_cast<int>(rhs) << "]";
- break;
- }
- return os;
-}
-
-std::ostream& operator<<(std::ostream& os, const JdwpSuspendPolicy& rhs) {
- switch (rhs) {
- case SP_NONE: os << "NONE"; break;
- case SP_EVENT_THREAD: os << "EVENT_THREAD"; break;
- case SP_ALL: os << "ALL"; break;
- default:
- os << "JdwpSuspendPolicy[" << static_cast<int>(rhs) << "]";
- break;
- }
- return os;
-}
-
-std::ostream& operator<<(std::ostream& os, const JdwpSuspendStatus& rhs) {
- switch (rhs) {
- case SUSPEND_STATUS_NOT_SUSPENDED: os << "NOT SUSPENDED"; break;
- case SUSPEND_STATUS_SUSPENDED: os << "SUSPENDED"; break;
- default:
- os << "JdwpSuspendStatus[" << static_cast<int>(rhs) << "]";
- break;
- }
- return os;
-}
-
-std::ostream& operator<<(std::ostream& os, const JdwpThreadStatus& rhs) {
- switch (rhs) {
- case TS_ZOMBIE: os << "ZOMBIE"; break;
- case TS_RUNNING: os << "RUNNING"; break;
- case TS_SLEEPING: os << "SLEEPING"; break;
- case TS_MONITOR: os << "MONITOR"; break;
- case TS_WAIT: os << "WAIT"; break;
- default:
- os << "JdwpThreadStatus[" << static_cast<int>(rhs) << "]";
- break;
- }
- return os;
-}
-
-} // namespace JDWP
-
-} // namespace art
diff --git a/src/jdwp/jdwp_constants.h b/src/jdwp/jdwp_constants.h
index 14dc6cf..ebc575b 100644
--- a/src/jdwp/jdwp_constants.h
+++ b/src/jdwp/jdwp_constants.h
@@ -163,9 +163,9 @@
* StepDepth constants.
*/
enum JdwpStepDepth {
- SD_INTO = 0, /* step into method calls */
- SD_OVER = 1, /* step over method calls */
- SD_OUT = 2, /* step out of current method */
+ SD_INTO = 0, // Step into method calls.
+ SD_OVER = 1, // Step over method calls.
+ SD_OUT = 2, // Step out of current method.
};
std::ostream& operator<<(std::ostream& os, const JdwpStepDepth& value);
@@ -173,8 +173,8 @@
* StepSize constants.
*/
enum JdwpStepSize {
- SS_MIN = 0, /* step by minimum (e.g. 1 bytecode inst) */
- SS_LINE = 1, /* if possible, step to next line */
+ SS_MIN = 0, // Step by minimum (for example, one bytecode).
+ SS_LINE = 1, // If possible, step to next line.
};
std::ostream& operator<<(std::ostream& os, const JdwpStepSize& value);
@@ -182,9 +182,9 @@
* SuspendPolicy constants.
*/
enum JdwpSuspendPolicy {
- SP_NONE = 0, /* suspend no threads */
- SP_EVENT_THREAD = 1, /* suspend event thread */
- SP_ALL = 2, /* suspend all threads */
+ SP_NONE = 0, // Suspend no threads.
+ SP_EVENT_THREAD = 1, // Suspend event thread.
+ SP_ALL = 2, // Suspend all threads.
};
std::ostream& operator<<(std::ostream& os, const JdwpSuspendPolicy& value);
diff --git a/src/jdwp/jdwp_main.cc b/src/jdwp/jdwp_main.cc
index ad2281f..ec85aa8 100644
--- a/src/jdwp/jdwp_main.cc
+++ b/src/jdwp/jdwp_main.cc
@@ -435,21 +435,6 @@
return now - last;
}
-static const char* kTransportNames[] = {
- "Unknown",
- "Socket",
- "AndroidAdb",
-};
-std::ostream& operator<<(std::ostream& os, const JdwpTransportType& value) {
- int32_t int_value = static_cast<int32_t>(value);
- if (value >= kJdwpTransportUnknown && value <= kJdwpTransportAndroidAdb) {
- os << kTransportNames[int_value];
- } else {
- os << "JdwpTransportType[" << int_value << "]";
- }
- return os;
-}
-
std::ostream& operator<<(std::ostream& os, const JdwpLocation& rhs) {
os << "JdwpLocation["
<< Dbg::GetClassName(rhs.classId) << "." << Dbg::GetMethodName(rhs.classId, rhs.methodId)
@@ -466,41 +451,6 @@
return !(lhs == rhs);
}
-std::ostream& operator<<(std::ostream& os, const JdwpTag& value) {
- switch (value) {
- case JT_ARRAY: os << "JT_ARRAY"; break;
- case JT_BYTE: os << "JT_BYTE"; break;
- case JT_CHAR: os << "JT_CHAR"; break;
- case JT_OBJECT: os << "JT_OBJECT"; break;
- case JT_FLOAT: os << "JT_FLOAT"; break;
- case JT_DOUBLE: os << "JT_DOUBLE"; break;
- case JT_INT: os << "JT_INT"; break;
- case JT_LONG: os << "JT_LONG"; break;
- case JT_SHORT: os << "JT_SHORT"; break;
- case JT_VOID: os << "JT_VOID"; break;
- case JT_BOOLEAN: os << "JT_BOOLEAN"; break;
- case JT_STRING: os << "JT_STRING"; break;
- case JT_THREAD: os << "JT_THREAD"; break;
- case JT_THREAD_GROUP: os << "JT_THREAD_GROUP"; break;
- case JT_CLASS_LOADER: os << "JT_CLASS_LOADER"; break;
- case JT_CLASS_OBJECT: os << "JT_CLASS_OBJECT"; break;
- default:
- os << "JdwpTag[" << static_cast<int32_t>(value) << "]";
- }
- return os;
-}
-
-std::ostream& operator<<(std::ostream& os, const JdwpTypeTag& value) {
- switch (value) {
- case TT_CLASS: os << "TT_CLASS"; break;
- case TT_INTERFACE: os << "TT_INTERFACE"; break;
- case TT_ARRAY: os << "TT_ARRAY"; break;
- default:
- os << "JdwpTypeTag[" << static_cast<int32_t>(value) << "]";
- }
- return os;
-}
-
} // namespace JDWP
} // namespace art
diff --git a/tools/generate-operator-out.py b/tools/generate-operator-out.py
index ca7df1e..91d4669 100755
--- a/tools/generate-operator-out.py
+++ b/tools/generate-operator-out.py
@@ -41,6 +41,7 @@
_ENUM_VALUE_RE = re.compile(r'([A-Za-z0-9_]+)(.*)')
_ENUM_END_RE = re.compile(r'^\s*\};$')
_ENUMS = {}
+_NAMESPACES = {}
def Confused(filename, line_number, line):
sys.stderr.write('%s:%d: confused by:\n%s\n' % (filename, line_number, line))
@@ -51,19 +52,46 @@
lines = codecs.open(filename, 'r', 'utf8', 'replace').read().split('\n')
in_enum = False
line_number = 0
+
+ namespaces = []
+ enclosing_classes = []
+
for raw_line in lines:
line_number += 1
- # TODO: take namespaces and enclosing classes/structs into account.
-
- # Is this the start of a new enum?
if not in_enum:
+ # Is this the start of a new enum?
m = _ENUM_START_RE.search(raw_line)
if m:
# Yes, so add an empty entry to _ENUMS for this enum.
enum_name = m.group(1)
+ if len(enclosing_classes) > 0:
+ enum_name = '::'.join(enclosing_classes) + '::' + enum_name
_ENUMS[enum_name] = []
+ _NAMESPACES[enum_name] = '::'.join(namespaces)
in_enum = True
+ continue
+
+ # Is this the start or end of a namespace?
+ m = re.compile(r'^namespace (\S+) \{').search(raw_line)
+ if m:
+ namespaces.append(m.group(1))
+ continue
+ m = re.compile(r'^\}\s+// namespace').search(raw_line)
+ if m:
+ namespaces = namespaces[0:len(namespaces) - 1]
+ continue
+
+ # Is this the start or end of an enclosing class or struct?
+ m = re.compile(r'^(?:class|struct) (\S+) \{').search(raw_line)
+ if m:
+ enclosing_classes.append(m.group(1))
+ continue
+ m = re.compile(r'^\};').search(raw_line)
+ if m:
+ enclosing_classes = enclosing_classes[0:len(enclosing_classes) - 1]
+ continue
+
continue
# Is this the end of the current enum?
@@ -74,8 +102,13 @@
in_enum = False
continue
+ # Whitespace?
+ line = raw_line.strip()
+ if len(line) == 0:
+ continue
+
# Is this another enum value?
- m = _ENUM_VALUE_RE.search(raw_line.strip())
+ m = _ENUM_VALUE_RE.search(line)
if not m:
Confused(filename, line_number, raw_line)
@@ -88,7 +121,7 @@
# Lose literal values because we don't care; turn "= 123, // blah" into ", // blah".
rest = m.group(2).strip()
- m_literal = re.compile(r'= (0x[0-9a-f]+|-?[0-9]+)').search(rest)
+ m_literal = re.compile(r'= (0x[0-9a-f]+|-?[0-9]+|\'.\')').search(rest)
if m_literal:
rest = rest[(len(m_literal.group(0))):]
@@ -104,13 +137,15 @@
# Anything left should be a comment.
if len(rest) and not rest.startswith('// '):
- print rest
Confused(filename, line_number, raw_line)
m_comment = re.compile(r'<<(.*?)>>').search(rest)
if m_comment:
enum_text = m_comment.group(1)
+ if len(enclosing_classes) > 0:
+ enum_value = '::'.join(enclosing_classes) + '::' + enum_value
+
_ENUMS[enum_name].append((enum_value, enum_text))
def main():
@@ -129,11 +164,14 @@
print '#include "%s"' % header_file
print
- print 'namespace art {'
- print
for enum_name in _ENUMS:
print '// This was automatically generated by %s --- do not edit!' % sys.argv[0]
+
+ namespaces = _NAMESPACES[enum_name].split('::')
+ for namespace in namespaces:
+ print 'namespace %s {' % namespace
+
print 'std::ostream& operator<<(std::ostream& os, const %s& rhs) {' % enum_name
print ' switch (rhs) {'
for (enum_value, enum_text) in _ENUMS[enum_name]:
@@ -142,9 +180,10 @@
print ' }'
print ' return os;'
print '}'
- print
- print '} // namespace art'
+ for namespace in reversed(namespaces):
+ print '} // namespace %s' % namespace
+ print
sys.exit(0)