From 9e23f65bec299d1656785dad24d53a73f05403e8 Mon Sep 17 00:00:00 2001 From: "sgjesse@chromium.org" Date: Wed, 19 Jan 2011 08:04:48 +0000 Subject: [PATCH] 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 --- SConstruct | 8 ++++ src/SConscript | 1 + src/inspector.cc | 63 +++++++++++++++++++++++++++ src/inspector.h | 62 ++++++++++++++++++++++++++ src/objects.h | 130 +++++++++++++++++++++++++++++-------------------------- 5 files changed, 203 insertions(+), 61 deletions(-) create mode 100644 src/inspector.cc create mode 100644 src/inspector.h diff --git a/SConstruct b/SConstruct index 0b31d5c..e84db84 100644 --- a/SConstruct +++ b/SConstruct @@ -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', diff --git a/src/SConscript b/src/SConscript index 7ff4259..708edef 100755 --- a/src/SConscript +++ b/src/SConscript @@ -82,6 +82,7 @@ SOURCES = { hydrogen.cc hydrogen-instructions.cc ic.cc + inspector.cc interpreter-irregexp.cc jsregexp.cc jump-target.cc diff --git a/src/inspector.cc b/src/inspector.cc new file mode 100644 index 0000000..8fb80f1 --- /dev/null +++ b/src/inspector.cc @@ -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(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 + diff --git a/src/inspector.h b/src/inspector.h new file mode 100644 index 0000000..f8b3042 --- /dev/null +++ b/src/inspector.h @@ -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_ + diff --git a/src/objects.h b/src/objects.h index c919513..f9cab45 100644 --- a/src/objects.h +++ b/src/objects.h @@ -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. -- 2.7.4