summaryrefslogtreecommitdiff
path: root/js/src/frontend/ParseNode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/frontend/ParseNode.cpp')
-rw-r--r--js/src/frontend/ParseNode.cpp66
1 files changed, 51 insertions, 15 deletions
diff --git a/js/src/frontend/ParseNode.cpp b/js/src/frontend/ParseNode.cpp
index 7ad470865f..065efa8380 100644
--- a/js/src/frontend/ParseNode.cpp
+++ b/js/src/frontend/ParseNode.cpp
@@ -218,6 +218,10 @@ PushNodeChildren(ParseNode* pn, NodeStack* stack)
MOZ_ASSERT(pn->is<NumericLiteral>());
return PushResult::Recyclable;
+ case PNK_BIGINT:
+ MOZ_ASSERT(pn->is<BigIntLiteral>());
+ return PushResult::Recyclable;
+
// Nodes with a single non-null child.
case PNK_TYPEOFNAME:
case PNK_TYPEOFEXPR:
@@ -716,6 +720,9 @@ ParseNode::dump(int indent)
case PN_NUMBER:
as<NumericLiteral>().dump(indent);
return;
+ case PN_BIGINT:
+ as<BigIntLiteral>().dump(indent);
+ return;
case PN_REGEXP:
as<RegExpLiteral>().dump(indent);
return;
@@ -760,6 +767,12 @@ NumericLiteral::dump(int indent)
}
void
+BigIntLiteral::dump(int indent)
+{
+ fprintf(stderr, "(%s)", parseNodeNames[size_t(getKind())]);
+}
+
+void
RegExpLiteral::dump(int indent)
{
fprintf(stderr, "(%s)", parseNodeNames[size_t(getKind())]);
@@ -962,23 +975,45 @@ LexicalScopeNode::dump(int indent)
}
#endif
-ObjectBox::ObjectBox(JSObject* object, ObjectBox* traceLink)
- : object(object),
- traceLink(traceLink),
+TraceListNode::TraceListNode(js::gc::Cell* gcThing, TraceListNode* traceLink)
+ : gcThing(gcThing),
+ traceLink(traceLink)
+{
+ MOZ_ASSERT(gcThing->isTenured());
+}
+
+BigIntBox*
+TraceListNode::asBigIntBox()
+{
+ MOZ_ASSERT(isBigIntBox());
+ return static_cast<BigIntBox*>(this);
+}
+
+ObjectBox*
+TraceListNode::asObjectBox()
+{
+ MOZ_ASSERT(isObjectBox());
+ return static_cast<ObjectBox*>(this);
+}
+
+BigIntBox::BigIntBox(BigInt* bi, TraceListNode* traceLink)
+ : TraceListNode(bi, traceLink)
+{
+}
+
+ObjectBox::ObjectBox(JSObject* obj, TraceListNode* traceLink)
+ : TraceListNode(obj, traceLink),
emitLink(nullptr)
{
- MOZ_ASSERT(!object->is<JSFunction>());
- MOZ_ASSERT(object->isTenured());
+ MOZ_ASSERT(!object()->is<JSFunction>());
}
-ObjectBox::ObjectBox(JSFunction* function, ObjectBox* traceLink)
- : object(function),
- traceLink(traceLink),
+ObjectBox::ObjectBox(JSFunction* function, TraceListNode* traceLink)
+ : TraceListNode(function, traceLink),
emitLink(nullptr)
{
- MOZ_ASSERT(object->is<JSFunction>());
+ MOZ_ASSERT(object()->is<JSFunction>());
MOZ_ASSERT(asFunctionBox()->function() == function);
- MOZ_ASSERT(object->isTenured());
}
FunctionBox*
@@ -989,16 +1024,17 @@ ObjectBox::asFunctionBox()
}
/* static */ void
-ObjectBox::TraceList(JSTracer* trc, ObjectBox* listHead)
+TraceListNode::TraceList(JSTracer* trc, TraceListNode* listHead)
{
- for (ObjectBox* box = listHead; box; box = box->traceLink)
- box->trace(trc);
+ for (TraceListNode* node = listHead; node; node = node->traceLink) {
+ node->trace(trc);
+ }
}
void
-ObjectBox::trace(JSTracer* trc)
+TraceListNode::trace(JSTracer* trc)
{
- TraceRoot(trc, &object, "parser.object");
+ TraceGenericPointerRoot(trc, &gcThing, "parser.traceListNode");
}
void