fune/js/rust/etc/wrapper.hpp
Jon Coppeard 4c9a0dab80 Bug 1634459 - Simplify the wrapper used for rooting non-GC thing types r=jandem
Previously this stored a function pointer to do the tracing along with the rooted thing. The patch changes this to use a virtual method for the tracing. Calling the method on the base class means we don't need to do address arithmetic to find wher the trace function is stored and we don't need the alignment restrictions, because the virtual trace method knows the layout of its class.

I had to add a traits class, mainly to get the address of the rooted thing inside the wrapper since we need to be able to get the address of the wrapper itself now for tracing.

The wrapper class is renamed from DispatchWrapper to RootedTraceable.

Differential Revision: https://phabricator.services.mozilla.com/D73421
2020-05-04 16:53:56 +00:00

41 lines
1.2 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
* vim: set ts=8 sts=4 et sw=4 tw=99:
* 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/. */
#include <stdint.h>
#ifndef _MSC_VER
#include <unistd.h>
#endif
typedef uint32_t HashNumber;
#include "jsapi.h"
#include "jsfriendapi.h"
#include "js/Array.h"
#include "js/ArrayBuffer.h"
#include "js/CompilationAndEvaluation.h"
#include "js/CompileOptions.h"
#include "js/ContextOptions.h"
#include "js/Conversions.h"
#include "js/Date.h"
#include "js/ForOfIterator.h"
#include "js/Initialization.h"
#include "js/MemoryMetrics.h"
#include "js/PropertySpec.h"
#include "js/SourceText.h"
#include "js/StructuredClone.h"
#include "js/ValueArray.h"
#include "js/Warnings.h"
// Replacements for types that are too difficult for rust-bindgen.
/// <div rustbindgen replaces="JS::detail::RootedPtr" />
template <typename T>
using replaces_RootedPtr = T;
/// <div rustbindgen replaces="JS::MutableHandleIdVector" />
struct MutableHandleIdVector_Simple {
uintptr_t handle_mut;
};