MONO_BEGIN_DECLS
enum {
- SGEN_BRIDGE_VERSION = 2
+ SGEN_BRIDGE_VERSION = 4
};
+typedef enum {
+ /* Instances of this class should be scanned when computing the transitive dependency among bridges. E.g. List<object>*/
+ GC_BRIDGE_TRANSPARENT_CLASS,
+ /* Instances of this class should not be scanned when computing the transitive dependency among bridges. E.g. String*/
+ GC_BRIDGE_OPAQUE_CLASS,
+ /* Instances of this class should be bridged and have their dependency computed. */
+ GC_BRIDGE_TRANSPARENT_BRIDGE_CLASS,
+ /* Instances of this class should be bridged but no dependencies should not be calculated. */
+ GC_BRIDGE_OPAQUE_BRIDGE_CLASS,
+} MonoGCBridgeObjectKind;
+
typedef struct {
+ mono_bool is_alive; /* to be set by the cross reference callback */
int num_objs;
MonoObject *objs [MONO_ZERO_LEN_ARRAY];
} MonoGCBridgeSCC;
typedef struct {
int bridge_version;
- mono_bool (*is_bridge_class) (MonoClass *class);
+ MonoGCBridgeObjectKind (*bridge_class_kind) (MonoClass *klass);
mono_bool (*is_bridge_object) (MonoObject *object);
void (*cross_references) (int num_sccs, MonoGCBridgeSCC **sccs, int num_xrefs, MonoGCBridgeXRef *xrefs);
} MonoGCBridgeCallbacks;
-void mono_gc_register_bridge_callbacks (MonoGCBridgeCallbacks *callbacks);
+MONO_API void mono_gc_register_bridge_callbacks (MonoGCBridgeCallbacks *callbacks);
-void mono_gc_wait_for_bridge_processing (void);
+MONO_API void mono_gc_wait_for_bridge_processing (void);
MONO_END_DECLS