summaryrefslogtreecommitdiff
path: root/tools/libdol2asm/data/vtable.py
blob: f7d1ff81ba51b26c43e10a11c3be393ed63c5f3b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import struct

from dataclasses import dataclass, field
from typing import List, Tuple

from ..builder import AsyncBuilder
from .. import util
from .base import *
from .identifier import *
from .reference_array import *

@dataclass(eq=False)
class VirtualTable(ReferenceArray):
    @property
    def is_static(self):
        return False

    def export_reference_value(self, symbol_table, index, addr) -> str:
        base = super().export_reference_value(symbol_table,index,  addr)
        if index == 0:
            base = f"{base} /* RTTI */"
        return base

    @staticmethod
    def create(identifier: Identifier, addr: int, data: bytearray, padding_data: bytearray) -> "VirtualTable":
        assert sum(padding_data) == 0
        assert len(data) % 4 == 0
        assert len(padding_data) % 4 == 0
        return VirtualTable(
            identifier=identifier,
            data_type=PointerType(VOID),
            addr=addr,
            data = data,
            size=len(data),
            padding_data = padding_data,
            padding = len(padding_data),
        )