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; }