blob: 06b354404d100c69d2ac3fe4eacf04c08b51fedf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.
# Pretty-printer for SpiderMonkey symbols.
import mozilla.prettyprinters
from mozilla.prettyprinters import ptr_pretty_printer
from mozilla.CellHeader import get_header_ptr
# Forget any printers from previous loads of this module.
mozilla.prettyprinters.clear_module_printers(__name__)
# JS::SymbolCode enumerators
PrivateNameSymbol = 0xFFFFFFFD
InSymbolRegistry = 0xFFFFFFFE
UniqueSymbol = 0xFFFFFFFF
@ptr_pretty_printer("JS::Symbol")
class JSSymbolPtr(mozilla.prettyprinters.Pointer):
def __init__(self, value, cache):
super(JSSymbolPtr, self).__init__(value, cache)
self.value = value
def to_string(self):
code = int(self.value["code_"]) & 0xFFFFFFFF
desc = str(get_header_ptr(self.value, self.cache.JSString_ptr_t))
if code == InSymbolRegistry:
return "Symbol.for({})".format(desc)
elif code == UniqueSymbol:
return "Symbol({})".format(desc)
elif code == PrivateNameSymbol:
return "#{}".format(desc)
else:
# Well-known symbol. Strip off the quotes added by the JSString *
# pretty-printer.
assert desc[0] == '"'
assert desc[-1] == '"'
return desc[1:-1]
|