MOSA Runtime Tables

This diagram represents the internal runtime tables within the MOSA virtual machine:

digraph "MOSA Runtime Tables" { graph [rankdir = "LR"]; node [fontsize = "16" shape = "ellipse"]; edge [minlen = "4"]; "Key" [ label = "<f0>Key|<f1>~ Denotes field may be zero filled\ndue to no value being available." shape = "record" ]; "NameString" [ label = "<f0>String Object|<f1>Object Header|<f2>Pointer to Method Table|<f3>String Length|<f4>Unicode String" shape = "record" color = "red" ]; "AssemblyListTable" [ label = "<f0>Assembly Table|<f1>Number of Assemblies|<f2>Pointer to Assembly 1|..|Pointer to Assembly N" shape = "record" ]; "AssemblyListTable":f2 -> "AssemblyDefinition":f0 [ id = 0 ]; "AssemblyDefinition" [ label = "<f0>Assembly|<f1>Pointer to Assembly Name|<f2>~Pointer to Custom Attributes|<f3>Flags: IsReflectionOnly|<f4>Number of Types|<f5>Pointer to Type Definition 1|...|Pointer to Type Definition N" shape = "record" ]; "AssemblyDefinition":f1 -> "NameString":f0 [ id = 0 color = "red" ]; "AssemblyDefinition":f2 -> "CustomAttributesTable":f0 [ id = 0 ]; "AssemblyDefinition":f5 -> "TypeDefinition":f0 [ id = 0 color = "blue" ]; "TypeDefinition" [ label = "<f0>Type Definition\n(contains Method Table)|<f1>Pointer to Type Name|<f2>~Pointer to Custom Attributes|<f3>Type Code & Attributes|<f4>Type Size|<f5>Pointer to Assembly|<f6>~Pointer to Parent Type|<f7>~Pointer to Declaring Type|<f8>~Pointer to Element Type|<f9>~Pointer to Default Constructor Method|<f10>~Pointer to Properties Table|<f11>~Pointer to Fields Table|<f12>~Pointer to Interface Slot Table|<f13>~Pointer to Interface Bitmap|<f14>Number of Methods|<f15>Pointer to Method 1|...|Pointer to Method N|<f16>Pointer to Method Definition 1|...|Pointer to Method Definition N" shape = "record" color = "blue" ]; "TypeDefinition":f1 -> "NameString":f0 [ id = 0 color = "red" ]; "TypeDefinition":f2 -> "CustomAttributesTable":f0 [ id = 0 ]; "TypeDefinition":f5 -> "AssemblyDefinition":f0 [ id = 0 ]; "TypeDefinition":f6 -> "TypeDefinition":f0 [ id = 0 color = "blue" ]; "TypeDefinition":f9 -> "MethodDefinition":f0 [ id = 0 color = "green" ]; "TypeDefinition":f10 -> "PropertiesTable":f0 [ id = 0 ]; "TypeDefinition":f11 -> "FieldsTable":f0 [ id = 0 ]; "TypeDefinition":f12 -> "InterfaceSlotTable":f0 [ id = 0 ]; "TypeDefinition":f16 -> "MethodDefinition":f0 [ id = 0 ]; "FieldsTable" [ label = "<f0>Fields Table|<f1>Number of Fields|<f1>Pointer to Field Definition 1|...|Pointer to Field Definition N" shape = "record" ]; "FieldsTable":f2 -> "FieldDefinition":f0 [ id = 0 ]; "FieldDefinition" [ label = "<f0>Field Definition|<f1>Pointer to Field Name|<f2>~Pointer to Custom Attributes|<f3>Field Attributes|<f4>Pointer to Field Type|<f5>~Address|<f6>Offset / Size" shape = "record" ]; "FieldDefinition":f1 -> "NameString":f0 [ id = 0 color = "red" ]; "FieldDefinition":f2 -> "CustomAttributesTable":f0 [ id = 0 ]; "FieldDefinition":f4 -> "TypeDefinition":f0 [ id = 0 color = "blue" ]; "PropertiesTable" [ label = "<f0>Properties Table|<f1>Number of Properties|<f1>Pointer to Property Definition 1|...|Pointer to Property Definition N" shape = "record" ]; "PropertiesTable":f2 -> "PropertyDefinition":f0 [ id = 0 ]; "PropertyDefinition" [ label = "<f0>Property Definition|<f1>Pointer to Property Name|<f2>~Pointer to Custom Attributes|<f3>Property Attributes|<f4>Pointer to Property Type|<f5>~Pointer to Getter Method Definition|<f6>~Pointer to Setter Method Defiinition" shape = "record" ]; "PropertyDefinition":f1 -> "NameString":f0 [ id = 0 color = "red" ]; "PropertyDefinition":f2 -> "CustomAttributesTable":f0 [ id = 0 ]; "PropertyDefinition":f4 -> "TypeDefinition":f0 [ id = 0 color = "blue" ]; "PropertyDefinition":f5 -> "MethodDefinition":f0 [ id = 0 color = "green" ]; "PropertyDefinition":f6 -> "MethodDefinition":f0 [ id = 0 color = "green" ]; "MethodLookupTable" [ label = "<f0>Method Lookup Table|Number of Methods|<f1>Pointer to Method (Starting Address)|<f2>Method Size|<f3>Pointer to Method Definition" shape = "record" ]; "MethodLookupTable":f3 -> "MethodDefinition":f0 [ id = 0 color = "green" ]; "ProtectedRegionTable" [ label = "<f0>Protected Region Table|<f1>Number of Regions|<f2>Pointer to Protected Region Definition 1|...|Protected Region Definition N" shape = "record" ]; "ProtectedRegionTable":f2 -> "ProtectedRegionDefinition":f0 [ id = 0 ]; "ProtectedRegionDefinition" [ label = "<f0>Protected Region Definition|<f1>Region Start|<f2>Region End|<f3>Region Handler|<f4>Exception Handler Type|<f5>Pointer to Exception Type" shape = "record" ]; "ProtectedRegionDefinition":f5 -> "TypeDefinition":f0 [ id = 0 color = "blue" ]; "InterfaceSlotTable" [ label = "<f0>Interface Slot Table|<f1>Number of Interface Method Tables|<f2>Pointer to Interface Method Table 1|...|Pointer to Interface Method Table N" shape = "record" ]; "InterfaceSlotTable":f2 -> "InterfaceMethodTable":f0 [ id = 0 ]; "InterfaceMethodTable" [ label = "<f0>Interface Method Table|<f1>Pointer to Interface Type|<f2>Number of Methods|<f3>Pointer to Method Definition 1|..|Pointer to Method Definition N" shape = "record" ]; "InterfaceMethodTable":f1 -> "TypeDefinition":f0 [ id = 0 color = "blue" ]; "InterfaceMethodTable":f3 -> "MethodDefinition":f0 [ id = 0 color = "green" ]; "MethodDefinition" [ label = "<f0>Method Definition|<f1>Pointer to Method Name|<f2>~Pointer to Custom Attributes|<f3>Method Attributes|<f4>Local & Parameter Stack Size|<f5>Pointer to Method|<f6>Pointer to Return Type Definition|<f7>~Pointer to Protected Region Table|<f8>Pointer to GC Tracking Information|<f9>Number of Parameters|<f10>Pointer to Parameter Definition 1|...|Pointer to Parameter Definition N" shape = "record" color = "green" ]; "MethodDefinition":f7 -> "ProtectedRegionTable":f0 [ id = 0 ]; "MethodDefinition":f1 -> "NameString":f0 [ id = 0 color = "red" ]; "MethodDefinition":f2 -> "CustomAttributesTable":f0 [ id = 0 ]; "MethodDefinition":f6 -> "TypeDefinition":f0 [ id = 0 color = "blue" ]; "MethodDefinition":f8 -> "GCTrackingInformation":f0 [ id = 0 ]; "MethodDefinition":f10 -> "ParameterDefinition":f0 [ id = 0 ]; "ParameterDefinition" [ label = "<f0>Parameter Definition|<f1>Pointer to Parameter Name|<f2>~Pointer to Custom Attributes|<f3>Parameter Attributes|<f4>Pointer to Parameter Type" shape = "record" ]; "ParameterDefinition":f1 -> "NameString":f0 [ id = 0 color = "red" ]; "ParameterDefinition":f2 -> "CustomAttributesTable":f0 [ id = 0 ]; "ParameterDefinition":f4 -> "TypeDefinition":f0 [ id = 0 color = "blue" ]; "GCTrackingInformation" [ label = "<f0>GC Tracking Information|TODO" shape = "record" ]; "CustomAttributesTable" [ label = "<f0>Custom Attributes Table|<f1>Number of Attributes|<f2>Pointer to Custom Attribute 1|...|Pointer to Custom Attribute N" shape = "record" ]; "CustomAttributesTable":f2 -> "CustomAttribute":f0 [ id = 0 ]; "CustomAttribute" [ label = "<f0>Custom Attribute|<f1>Pointer to Attribute Type|<f2>Pointer to Constructor Method|<f3>Number of Arguments|<f4>Pointer to Argument 1|...|Pointer to Argument N" shape = "record" ]; "CustomAttribute":f1 -> "TypeDefinition":f0 [ id = 0 color = "blue" ]; "CustomAttribute":f2 -> "MethodDefinition":f0 [ id = 0 color = "green" ]; "CustomAttribute":f4 -> "CustomAttributeArgument":f0 [ id = 0 ]; "CustomAttributeArgument" [ label = "<f0>Custom Attribute Argument|<f1>~Pointer to Argument Name|<f2>Is Argument a Field|<f3>Pointer to Argument Type|<f4>Argument Size|<f3>Argument" shape = "record" ]; "CustomAttributeArgument":f1 -> "NameString":f0 [ id = 0 color = "red" ]; "CustomAttributeArgument":f3 -> "TypeDefinition":f0 [ id = 0 color = "blue" ]; }