# contains the data classes we use to hold the information of a module
class WASM_SECTION(object):
def __init__(self):
self.section_id = int()
self.string = str()
self.payload_length = int()
self.is_custom_section = bool()
self.name_len = int()
self.name = str()
self.payload_data = bytes()
class WASM_SEGMENT_INFO:
def __int__(self):
self.count = int()
self.segments = []
class WASM_SEGMENT_INFO_SEGMENT:
def __init__(self):
self.name_len = int()
self.name_data = str()
self.alignment = int()
self.flags = int()
class WASM_COMDAT_INFO_SUB:
def __init__(self):
self.count = int()
self.comdats = []
class COMDAT:
def __init(self):
self.name_len = int()
self.name_str = str()
self.flags = int()
self.count = int()
self.comdat_syms = []
class COMDAT_SYM:
def __init(self):
self.kind = int()
self.index = int()
class WASM_COMDAT_KIND:
WASM_COMDAT_DATA = 0
WASM_COMDAT_FUNCTION = 1
WASM_COMDAT_GLOBAL = 2
class WASM_INIT_FUNCS:
def __init__(self):
self.count = int()
self.functions = []
class WASM_SYMBOL_TABLE:
def __init__(self):
self.count = int()
self.syminfo = []
class SYM_INFO:
def __init__(self):
self.kind = int()
self.flags = int()
class SYM_INFO_FLAGS:
WASM_SYM_BINDING_WEAK = 1
WASM_SYM_BINDING_LOCAL = 2
WASM_SYM_VISIBILITY_HIDDEN = 4
WASM_SYM_UNDEFINED = 16
class Rel_Entry:
def __int__(self):
self.type = int()
self.offset = int()
self.index = int()
class RelA_Entry:
def __int__(self):
self.type = int()
self.offset = int()
self.index = int()
self.addend = int()
class Relocation_Section:
def __int__(self):
self.section_id = int()
self.name_length = int()
self.name = str()
self.count = int()
self.entries = int()
class Func_Type:
def __init__(self):
self.form = int()
self.param_cnt = int()
self.param_types = []
self.return_cnt = int()
self.return_type = []
class Global_Type:
def __init__(self):
self.content_type = int()
self.mutability = int()
class Resizable_Limits:
def __init__(self):
self.flags = int()
self.initial = int()
self.maximum = int()
class Table_Type:
def __init__(self):
self.element_type = int()
self.limit = Resizable_Limits()
class External_Kind:
def __init__(self):
self.Function = 0
self.Table = 1
self.Memory = 2
self.Global = 3
class Memory_Type:
def __init__(self):
self.limits = [Resizable_Limits()]
# @DEVI-FIXME-
class Init_Expr:
pass
class Type_Section:
def __init__(self):
self.count = []
self.func_types = []
class Import_Entry:
def __init__(self):
self.module_len = int()
self.module_str = []
self.field_len = int()
self.field_str = []
self.kind = int()
self.type = int()
class Import_Section:
def __init__(self):
self.count = []
self.import_entry = []
class Function_Section:
def __init__(self):
self.count = []
self.type_section_index = [int()]
class Table_Section:
def __init__(self):
self.count = []
self.table_types = []
class Memory_Section:
def __init__(self):
self.count = []
# Resizable_Limits
self.memory_types = []
class Global_Variable:
def __init__(self):
self.global_type = Global_Type()
self.init_expr = []
class Global_Section:
def __init__(self):
self.count = []
# Global_Variable
self.global_variables = []
class Export_Entry:
def __init__(self):
self.field_len = int()
self.field_str = []
self.kind = int()
self.index = int()
class Export_Section:
def __init__(self):
self.count = []
# Export_Entry
self.export_entries = []
class Start_Section:
def __init__(self):
self.function_section_index = []
class Elem_Segment:
def __init__(self):
self.index = int()
self.offset = []
self.num_elem = int()
self.elems = []
class Element_Section:
def __init__(self):
self.count = []
# Elem_Segment
self.elem_segments = []
class Local_Entry:
def __init__(self):
self.count = int()
self.type = int()
class WASM_Ins:
def __init__(self):
self.opcode = str()
self.opcodeint = int()
self.operands = []
class Func_Body:
def __init__(self):
self.body_size = int()
self.local_count = int()
# Local_Entry
self.locals = []
# WASM_Ins
self.code = []
self.end = int()
class Code_Section:
def __init__(self):
self.count = []
# Func_Body
self.func_bodies = []
class Data_Segment:
def __init__(self):
self.index = int()
self.offset = []
self.size = int()
self.data = []
class Data_Section:
def __init__(self):
self.count = []
# Data_Segment
self.data_segments = []
class Name_Type:
Module = 0
Function = 1
Local = 2
class Name_Section_Entry(object):
def __init__(self, name_type, name_payload_len, name_payload_data):
self.name_type = name_type
self.name_payload_len = name_payload_len
self.name_payload_data = name_payload_data
class Name_Section(object):
def __init__(self, name_section_entry):
self.name_section_entry = []
self.name_section_entry = name_section_entry
class Module_Name(object):
def __init__(self, name_len, name_str):
self.name_len = name_len
self.name_str = name_str
class Naming(object):
def __init__(self, index, name_len, name_str):
self.index = index
self.name_len = name_len
self.name_str = name_str
class Name_Map(object):
def __init__(self, count, naming):
self.count = count
self.naming = []
self.naming = naming
# the module class
class Module:
def __init__(
self,
type_section,
import_section,
function_section,
table_section,
memory_section,
global_section,
export_section,
start_section,
element_section,
code_section,
data_section,
):
self.type_section = type_section
self.import_section = import_section
self.function_section = function_section
self.table_section = table_section
self.memory_section = memory_section
self.global_section = global_section
self.export_section = export_section
self.start_section = start_section
self.element_section = element_section
self.code_section = code_section
self.data_section = data_section
"""
class RT_INS_CELL(object):
def __init__(self):
label : str
mnemonic : str
ops : list
"""