def TypeEntry(type_, params, rets): p = varuint(len(params)) for param in params: p += varuint(param) r = varuint(len(rets)) for ret in rets: r += varuint(ret) return varuint(type_) + p + r
def ImportEntry(module, field, kind, *ext): prefix = varuint(len(module)) + module + varuint( len(field)) + field + varuint(kind) payload = '' if kind == KIND_FUNCTION: payload = varuint(ext[0]) elif kind == KIND_MEMORY: min_units = ext[0] flags = 0 if len(ext) > 1: flags = 1 max_units = ext[1] payload = varuint(flags) + varuint(min_units) + varuint(max_units) else: payload = varuint(flags) + varuint(min_units) return prefix + payload
def ElemEntry(idx, expr, indices): elems = '' for indice in indices: elems += chr(indice) return varuint(idx) + expr + varuint(len(indices)) + elems
def CodeEntry(locals_, body): l = varuint(len(locals_.keys())) for k in locals_.keys(): l += varuint(locals_[k]) l += varuint(k) return varuint(len(l) + len(body) + 1) + l + body + '\x0b'
def GlobalEntry(type_, mutable, expr): return varuint(type_) + varuint(mutable) + expr
def MemoryEntry(min_units, max_units=0): flags = 0 if max_units != 0: flags = 1 return varuint(flags) + varuint(min_units) + varuint(max_units) return varuint(flags) + varuint(min_units)
def CONST_i64(value): return varuint(0x42) + varuint(value) + '\x0b'
def CONST_i32(value): return varuint(0x41) + varuint(value) + '\x0b'
def DataEntry(idx, expr, data): return varuint(idx) + expr + varuint(len(data)) + data
def ArraySection(_id, args): data = '' for e in args: data += e return Section(_id, varuint(len(args)) + data)
def Section(_id, payload): return varuint(_id) + varuint(len(payload)) + payload
def FunctionEntry(type_idx): return varuint(type_idx)
def UserSection(name, payload): section_data = varuint(len(name)) + name + payload return varuint(SECTION_USER) + varuint(len(section_data)) + section_data
def TableEntry(type_, min_units, max_units = 0): flags = 0 if max_units != 0: flags = 1 return varuint(type_) + varuint(flags) + varuint(min_units) + varuint(max_units) return varuint(type_) + varuint(flags) + varuint(min_units)