diff --git a/js/public/RootingAPI.h b/js/public/RootingAPI.h index 62d3f0f1cb68..9b64ff5ded3e 100644 --- a/js/public/RootingAPI.h +++ b/js/public/RootingAPI.h @@ -867,6 +867,9 @@ class JS_PUBLIC_API(AutoGCRooter) enum { VALARRAY = -2, /* js::AutoValueArray */ PARSER = -3, /* js::frontend::Parser */ +#if defined(JS_BUILD_BINAST) + BINPARSER = -4, /* js::frontend::BinSource */ +#endif // defined(JS_BUILD_BINAST) VALVECTOR = -10, /* js::AutoValueVector */ IDVECTOR = -11, /* js::AutoIdVector */ OBJVECTOR = -14, /* js::AutoObjectVector */ diff --git a/js/src/frontend/BytecodeCompiler.h b/js/src/frontend/BytecodeCompiler.h index 82ea548279cc..97578ed4f7a7 100644 --- a/js/src/frontend/BytecodeCompiler.h +++ b/js/src/frontend/BytecodeCompiler.h @@ -124,6 +124,11 @@ IsKeyword(JSLinearString* str); void TraceParser(JSTracer* trc, JS::AutoGCRooter* parser); +/* Trace all GC things reachable from binjs parser. Defined in BinSource.cpp. */ +void +TraceBinParser(JSTracer* trc, JS::AutoGCRooter* parser); + + class MOZ_STACK_CLASS AutoFrontendTraceLog { #ifdef JS_TRACE_LOGGING diff --git a/js/src/gc/RootMarking.cpp b/js/src/gc/RootMarking.cpp index c0ee94921941..ac9e2a2f0a58 100644 --- a/js/src/gc/RootMarking.cpp +++ b/js/src/gc/RootMarking.cpp @@ -153,6 +153,12 @@ AutoGCRooter::trace(JSTracer* trc) frontend::TraceParser(trc, this); return; +#if defined(JS_BUILD_BINAST) + case BINPARSER: + frontend::TraceBinParser(trc, this); + return; +#endif // defined(JS_BUILD_BINAST) + case VALARRAY: { /* * We don't know the template size parameter, but we can safely treat it