digraph {
rankdir=LR;
labelloc="t";
label="Reachability Graph Schema";
fontsize=30;
subgraph clusterLegend {
label="";
style=solid;
PerCompartmentObject [shape=record, label="Per-compartment object"];
CrossCompartmentObject [shape=record, style=filled, label="Cross-compartment object"];
PerCompartmentObject->CrossCompartmentObject [style=invisible, dir=none];
anyrefSinkLegend [shape=record, style="rounded, dashed", label=<anyref>];
ReferenceableObject [shape=record, style=rounded, label="Any referenceable object"];
anyrefSinkLegend:e -> ReferenceableObject:w [color="black:invis:black", dir=none];
}
anyrefSink1 [shape=record, style="rounded, dashed", label=<anyref>];
anyrefSink2 [shape=record, style="rounded, dashed", label=<anyref>];
anyrefSink3 [shape=record, style="rounded, dashed", label=<anyref>];
anyrefSink4 [shape=record, style="rounded, dashed", label=<anyref>];
anyrefSink5 [shape=record, style="rounded, dashed", label=<anyref>];
anyrefSink6 [shape=record, style="rounded, dashed", label=<anyref>];
Exception [shape=record, style=rounded, label="{[Runtime::Exception}|arguments|type"];
Compartment [shape=record, style=rounded, label="{][Runtime::Compartment}| idToModuleInstanceMap|mutableGlobalInitialValues}"];
ModuleInstance [shape=record, style=rounded, label="{][Runtime::ModuleInstance}|...| jitModule"];
Context [shape=record, style=rounded, label="{][Runtime::Context}| compartment| mutableGlobalValues| stack"];
Memory [shape=record, style=rounded, label="{][Runtime::Memory}"];
Global [shape=record, style=rounded, label="{][Runtime::Global}| immutableValue"];
Table [shape=record, style=rounded, label="{][Runtime::Table}| elements"];
ExceptionType [shape=record, style=rounded, label="{][Runtime::ExceptionType}"];
Function [shape=record, style="filled, rounded", label="{][Runtime::Function}| mutableData| moduleInstanceId|]code"];
moduleInstanceIdSink [shape=plaintext, label=<moduleInstanceId>];
moduleInstanceIdSource [shape=plaintext, label=<moduleInstanceId>];
LLVMJITModule [shape=record, style=filled, label="{[LLVMJIT::Module}|functions"];
FunctionMutableData [shape=record, style=filled, label="{][Runtime::FunctionMutableData}"];
Context:compartment:e -> Compartment:ref:w;
Context:mutableGlobalValues:e -> anyrefSink1:w;
Context:stack:e -> Function:code:w;
Context:stack:e -> anyrefSink5:w;
Compartment:mutableGlobalInitialValues:e -> anyrefSink6:w
ModuleInstance:environment:e -> Function:ref:w;
ModuleInstance:environment:e -> Global:ref:w;
ModuleInstance:environment:e -> Memory:ref:w;
ModuleInstance:environment:e -> Table:ref:w;
ModuleInstance:environment:e -> ExceptionType:ref:w;
ModuleInstance:jitModule:e -> LLVMJITModule:ref:w;
Global:immutableValue:e -> anyrefSink2:w;
Table:elements:e -> anyrefSink3:w;
Function:moduleInstanceId:e -> moduleInstanceIdSink:w;
moduleInstanceIdSource:e:e -> Compartment:idToModuleInstanceMap:w;
Compartment:idToModuleInstanceMap:e -> ModuleInstance:ref:w;
LLVMJITModule:functions:e -> Function:ref:w;
Function:mutableData:e -> FunctionMutableData:ref:w;
Exception:type:e -> ExceptionType:ref:w;
Exception:arguments:e -> anyrefSink4:w;
}]