Bug 1783397 - Part 10: Add {JSString,JS::Symbol,JS::PropertyKey}::dumpStringContent methods. r=mgaudet
authorTooru Fujisawa <arai_a@mac.com>
Wed, 31 Jan 2024 08:54:45 +0000 (17 months ago)
changeset 694103 54687ab737ec033c1af34d9e81fc39f7812c106b
parent 694102 520e28927657161e397c465a7f713bcad8c90457
child 694104 03ce887fcd1acc5a429af18d4eac74bb44395589
push id199153
push userarai_a@mac.com
push dateWed, 31 Jan 2024 08:58:48 +0000 (17 months ago)
treeherderautoland@1cc0fa18c2bf [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmgaudet
bugs1783397
milestone124.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1783397 - Part 10: Add {JSString,JS::Symbol,JS::PropertyKey}::dumpStringContent methods. r=mgaudet Differential Revision: https://phabricator.services.mozilla.com/D199825
js/public/Id.h
js/src/vm/Id.cpp
js/src/vm/StringType.cpp
js/src/vm/StringType.h
js/src/vm/SymbolType.cpp
js/src/vm/SymbolType.h
--- a/js/public/Id.h
+++ b/js/public/Id.h
@@ -211,16 +211,17 @@ class PropertyKey {
 
 #if defined(DEBUG) || defined(JS_JITSPEW)
   void dump() const;
   void dump(js::GenericPrinter& out) const;
   void dump(js::JSONPrinter& json) const;
 
   void dumpFields(js::JSONPrinter& json) const;
   void dumpPropertyName(js::GenericPrinter& out) const;
+  void dumpStringContent(js::GenericPrinter& out) const;
 #endif
 
  private:
   static bool isNonIntAtom(JSAtom* atom);
   static bool isNonIntAtom(JSString* atom);
 } JS_HAZ_GC_POINTER;
 
 }  // namespace JS
--- a/js/src/vm/Id.cpp
+++ b/js/src/vm/Id.cpp
@@ -96,9 +96,23 @@ void JS::PropertyKey::dumpPropertyName(j
     toSymbol()->dumpPropertyName(out);
   } else if (isVoid()) {
     out.put("(void)");
   } else {
     out.printf("Unknown(%zx)", size_t(asRawBits()));
   }
 }
 
+void JS::PropertyKey::dumpStringContent(js::GenericPrinter& out) const {
+  if (isAtom()) {
+    toAtom()->dumpStringContent(out);
+  } else if (isInt()) {
+    out.printf("%d", toInt());
+  } else if (isSymbol()) {
+    toSymbol()->dumpStringContent(out);
+  } else if (isVoid()) {
+    out.put("(void)");
+  } else {
+    out.printf("Unknown(%zx)", size_t(asRawBits()));
+  }
+}
+
 #endif /* defined(DEBUG) || defined(JS_JITSPEW) */
--- a/js/src/vm/StringType.cpp
+++ b/js/src/vm/StringType.cpp
@@ -529,16 +529,22 @@ void JSString::dumpRepresentationFields(
     asRope().dumpOwnRepresentationFields(json);
     // Rope already shows the chars.
     return;
   }
 
   dumpCharsFields(json);
 }
 
+void JSString::dumpStringContent(js::GenericPrinter& out) const {
+  dumpCharsSingleQuote(out);
+
+  out.printf(" @ (%s*)0x%p", RepresentationToString(this), this);
+}
+
 void JSString::dumpPropertyName(js::GenericPrinter& out) const {
   dumpCharsNoQuote(out);
 }
 
 void JSString::dumpChars(js::GenericPrinter& out) const {
   out.putChar('"');
   dumpCharsNoQuote(out);
   out.putChar('"');
--- a/js/src/vm/StringType.h
+++ b/js/src/vm/StringType.h
@@ -743,16 +743,17 @@ class JSString : public js::gc::CellWith
   void dump() const;
   void dump(js::GenericPrinter& out) const;
   void dump(js::JSONPrinter& json) const;
 
   void dumpCommonFields(js::JSONPrinter& json) const;
   void dumpCharsFields(js::JSONPrinter& json) const;
 
   void dumpFields(js::JSONPrinter& json) const;
+  void dumpStringContent(js::GenericPrinter& out) const;
   void dumpPropertyName(js::GenericPrinter& out) const;
 
   void dumpChars(js::GenericPrinter& out) const;
   void dumpCharsSingleQuote(js::GenericPrinter& out) const;
   void dumpCharsNoQuote(js::GenericPrinter& out) const;
 
   template <typename CharT>
   static void dumpCharsNoQuote(const CharT* s, size_t len,
--- a/js/src/vm/SymbolType.cpp
+++ b/js/src/vm/SymbolType.cpp
@@ -140,16 +140,24 @@ void Symbol::dumpFields(js::JSONPrinter&
     js::GenericPrinter& out = json.beginStringProperty("description");
     description()->dumpCharsNoQuote(out);
     json.endStringProperty();
   } else {
     json.nullProperty("description");
   }
 }
 
+void Symbol::dumpStringContent(js::GenericPrinter& out) const {
+  dumpPropertyName(out);
+
+  if (!isWellKnownSymbol()) {
+    out.printf(" @ (JS::Symbol*)0x%p", this);
+  }
+}
+
 void Symbol::dumpPropertyName(js::GenericPrinter& out) const {
   if (isWellKnownSymbol()) {
     // All the well-known symbol names are ASCII.
     description()->dumpCharsNoQuote(out);
   } else if (code_ == SymbolCode::InSymbolRegistry ||
              code_ == SymbolCode::UniqueSymbol) {
     out.printf(code_ == SymbolCode::InSymbolRegistry ? "Symbol.for("
                                                      : "Symbol(");
--- a/js/src/vm/SymbolType.h
+++ b/js/src/vm/SymbolType.h
@@ -101,16 +101,17 @@ class Symbol
   }
 
 #if defined(DEBUG) || defined(JS_JITSPEW)
   void dump() const;  // Debugger-friendly stderr dump.
   void dump(js::GenericPrinter& out) const;
   void dump(js::JSONPrinter& json) const;
 
   void dumpFields(js::JSONPrinter& json) const;
+  void dumpStringContent(js::GenericPrinter& out) const;
   void dumpPropertyName(js::GenericPrinter& out) const;
 #endif
 
   static constexpr size_t offsetOfHash() { return offsetof(Symbol, hash_); }
 };
 
 } /* namespace JS */