Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
def ElemEntry(idx, expr, indices):
    elems = ''
    for indice in indices:
        elems += chr(indice)
    return varuint(idx) + expr + varuint(len(indices)) + elems
Beispiel #4
0
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'
Beispiel #5
0
def GlobalEntry(type_, mutable, expr):
    return varuint(type_) + varuint(mutable) + expr
Beispiel #6
0
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)
Beispiel #7
0
def CONST_i64(value):
    return varuint(0x42) + varuint(value) + '\x0b'
Beispiel #8
0
def CONST_i32(value):
    return varuint(0x41) + varuint(value) + '\x0b'
Beispiel #9
0
def DataEntry(idx, expr, data):
    return varuint(idx) + expr + varuint(len(data)) + data
Beispiel #10
0
def ArraySection(_id, args):
    data = ''
    for e in args:
        data += e
    return Section(_id, varuint(len(args)) + data)
Beispiel #11
0
def Section(_id, payload):
    return varuint(_id) + varuint(len(payload)) + payload
Beispiel #12
0
def FunctionEntry(type_idx):
    return varuint(type_idx)
Beispiel #13
0
def UserSection(name, payload):
    section_data = varuint(len(name)) + name + payload
    return varuint(SECTION_USER) + varuint(len(section_data)) + section_data
Beispiel #14
0
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)