Adding inspector module and macro-ized object type list.

Patch by Mark Lam from Hewlett-Packard Development Company, LP

Review URL: http://codereview.chromium.org/6261012


git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@6379 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
sgjesse@chromium.org 2011-01-19 08:04:48 +00:00
parent 9ab1970860
commit 9e23f65bec
5 changed files with 203 additions and 61 deletions

View File

@ -124,6 +124,9 @@ LIBRARY_FLAGS = {
},
'debuggersupport:on': {
'CPPDEFINES': ['ENABLE_DEBUGGER_SUPPORT'],
},
'inspector:on': {
'CPPDEFINES': ['INSPECTOR'],
}
},
'gcc': {
@ -744,6 +747,11 @@ SIMPLE_OPTIONS = {
'default': 'on',
'help': 'enable debugging of JavaScript code'
},
'inspector': {
'values': ['on', 'off'],
'default': 'off',
'help': 'enable inspector features'
},
'soname': {
'values': ['on', 'off'],
'default': 'off',

View File

@ -82,6 +82,7 @@ SOURCES = {
hydrogen.cc
hydrogen-instructions.cc
ic.cc
inspector.cc
interpreter-irregexp.cc
jsregexp.cc
jump-target.cc

63
src/inspector.cc Normal file
View File

@ -0,0 +1,63 @@
// Copyright 2011 the V8 project authors. All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following
// disclaimer in the documentation and/or other materials provided
// with the distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "v8.h"
#include "inspector.h"
namespace v8 {
namespace internal {
#ifdef INSPECTOR
//============================================================================
// The Inspector.
void Inspector::DumpObjectType(FILE* out, Object *obj, bool print_more) {
// Dump the object pointer.
OS::FPrint(out, "%p:", reinterpret_cast<void*>(obj));
if (obj->IsHeapObject()) {
HeapObject *hobj = HeapObject::cast(obj);
OS::FPrint(out, " size %d :", hobj->Size());
}
// Dump each object classification that matches this object.
#define FOR_EACH_TYPE(type) \
if (obj->Is##type()) { \
OS::FPrint(out, " %s", #type); \
}
OBJECT_TYPE_LIST(FOR_EACH_TYPE)
HEAP_OBJECT_TYPE_LIST(FOR_EACH_TYPE)
#undef FOR_EACH_TYPE
}
#endif // INSPECTOR
} } // namespace v8::internal

62
src/inspector.h Normal file
View File

@ -0,0 +1,62 @@
// Copyright 2011 the V8 project authors. All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following
// disclaimer in the documentation and/or other materials provided
// with the distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef V8_INSPECTOR_H_
#define V8_INSPECTOR_H_
// Only build this code if we're configured with the INSPECTOR.
#ifdef INSPECTOR
#include "v8.h"
#include "objects.h"
namespace v8 {
namespace internal {
class Inspector {
public:
static void DumpObjectType(FILE* out, Object *obj, bool print_more);
static void DumpObjectType(FILE* out, Object *obj) {
DumpObjectType(out, obj, false);
}
static void DumpObjectType(Object *obj, bool print_more) {
DumpObjectType(stdout, obj, print_more);
}
static void DumpObjectType(Object *obj) {
DumpObjectType(stdout, obj, false);
}
};
} } // namespace v8::internal
#endif // INSPECTOR
#endif // V8_INSPECTOR_H_

View File

@ -624,6 +624,71 @@ class MaybeObject BASE_EMBEDDED {
#endif
};
#define OBJECT_TYPE_LIST(V) \
V(Smi) \
V(HeapObject) \
V(Number) \
#define HEAP_OBJECT_TYPE_LIST(V) \
V(HeapNumber) \
V(String) \
V(Symbol) \
V(SeqString) \
V(ExternalString) \
V(ConsString) \
V(ExternalTwoByteString) \
V(ExternalAsciiString) \
V(SeqTwoByteString) \
V(SeqAsciiString) \
\
V(PixelArray) \
V(ExternalArray) \
V(ExternalByteArray) \
V(ExternalUnsignedByteArray) \
V(ExternalShortArray) \
V(ExternalUnsignedShortArray) \
V(ExternalIntArray) \
V(ExternalUnsignedIntArray) \
V(ExternalFloatArray) \
V(ByteArray) \
V(JSObject) \
V(JSContextExtensionObject) \
V(Map) \
V(DescriptorArray) \
V(DeoptimizationInputData) \
V(DeoptimizationOutputData) \
V(FixedArray) \
V(Context) \
V(CatchContext) \
V(GlobalContext) \
V(JSFunction) \
V(Code) \
V(Oddball) \
V(SharedFunctionInfo) \
V(JSValue) \
V(StringWrapper) \
V(Proxy) \
V(Boolean) \
V(JSArray) \
V(JSRegExp) \
V(HashTable) \
V(Dictionary) \
V(SymbolTable) \
V(JSFunctionResultCache) \
V(NormalizedMapCache) \
V(CompilationCacheTable) \
V(CodeCacheHashTable) \
V(MapCache) \
V(Primitive) \
V(GlobalObject) \
V(JSGlobalObject) \
V(JSBuiltinsObject) \
V(JSGlobalProxy) \
V(UndetectableObject) \
V(AccessCheckNeeded) \
V(JSGlobalPropertyCell) \
// Object is the abstract superclass for all classes in the
// object hierarchy.
// Object does not use any virtual functions to avoid the
@ -633,67 +698,10 @@ class MaybeObject BASE_EMBEDDED {
class Object : public MaybeObject {
public:
// Type testing.
inline bool IsSmi();
inline bool IsHeapObject();
inline bool IsHeapNumber();
inline bool IsString();
inline bool IsSymbol();
// See objects-inl.h for more details
inline bool IsSeqString();
inline bool IsExternalString();
inline bool IsExternalTwoByteString();
inline bool IsExternalAsciiString();
inline bool IsSeqTwoByteString();
inline bool IsSeqAsciiString();
inline bool IsConsString();
inline bool IsNumber();
inline bool IsByteArray();
inline bool IsPixelArray();
inline bool IsExternalArray();
inline bool IsExternalByteArray();
inline bool IsExternalUnsignedByteArray();
inline bool IsExternalShortArray();
inline bool IsExternalUnsignedShortArray();
inline bool IsExternalIntArray();
inline bool IsExternalUnsignedIntArray();
inline bool IsExternalFloatArray();
inline bool IsJSObject();
inline bool IsJSContextExtensionObject();
inline bool IsMap();
inline bool IsFixedArray();
inline bool IsDescriptorArray();
inline bool IsDeoptimizationInputData();
inline bool IsDeoptimizationOutputData();
inline bool IsContext();
inline bool IsCatchContext();
inline bool IsGlobalContext();
inline bool IsJSFunction();
inline bool IsCode();
inline bool IsOddball();
inline bool IsSharedFunctionInfo();
inline bool IsJSValue();
inline bool IsStringWrapper();
inline bool IsProxy();
inline bool IsBoolean();
inline bool IsJSArray();
inline bool IsJSRegExp();
inline bool IsHashTable();
inline bool IsDictionary();
inline bool IsSymbolTable();
inline bool IsJSFunctionResultCache();
inline bool IsNormalizedMapCache();
inline bool IsCompilationCacheTable();
inline bool IsCodeCacheHashTable();
inline bool IsMapCache();
inline bool IsPrimitive();
inline bool IsGlobalObject();
inline bool IsJSGlobalObject();
inline bool IsJSBuiltinsObject();
inline bool IsJSGlobalProxy();
inline bool IsUndetectableObject();
inline bool IsAccessCheckNeeded();
inline bool IsJSGlobalPropertyCell();
#define IS_TYPE_FUNCTION_DECL(type_) inline bool Is##type_();
OBJECT_TYPE_LIST(IS_TYPE_FUNCTION_DECL)
HEAP_OBJECT_TYPE_LIST(IS_TYPE_FUNCTION_DECL)
#undef IS_TYPE_FUNCTION_DECL
// Returns true if this object is an instance of the specified
// function template.