# 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
'''