Пример #1
0
 def to_bytes(tag):
     out_stream = ABCFileOutputStream()
     out_stream.write(TagHeaderConverter.to_bytes(tag.type, tag.header))
     out_stream.writeUI16(tag.characterId)
     out_stream.writeUI32(tag.reserved)
     out_stream.write(tag.data)
     return out_stream.getvalue()
Пример #2
0
 def to_bytes(tag):
     out_stream = ABCFileOutputStream()
     out_stream.write(TagHeaderConverter.to_bytes(tag.type, tag.header))
     out_stream.writeUI16(len(tag.symbols))
     for symbol in tag.symbols:
         out_stream.writeUI16(symbol.tagId)
         out_stream.write(symbol.name + '\x00')
     return out_stream.getvalue()
Пример #3
0
 def to_bytes(class_):
     out_stream = ABCFileOutputStream()
     out_stream.writeU30(class_.cinit)
     trait_count = len(class_.traits)
     out_stream.writeU30(trait_count)
     for trait in class_.traits:
         trait_bytes = StTraitConverter.to_bytes(trait)
         out_stream.write(trait_bytes)
     return out_stream.getvalue()
Пример #4
0
 def to_bytes(instance):
     out_stream = ABCFileOutputStream()
     out_stream.writeU30(instance.name)
     out_stream.writeU30(instance.super_name)
     out_stream.writeU8(instance.flags)
     if instance.flags & StInstanceInfo.CONSTANT_ClassProtectedNs:
         out_stream.writeU30(instance.protectedNs)
     out_stream.writeU30(instance.intrf_count)
     for interf in instance.interfaces:
         out_stream.writeU30(interf)
     out_stream.writeU30(instance.iinit)
     # Trait
     out_stream.writeU30(instance.trait_count)
     for trait in instance.traits:
         trait_bytes = StTraitConverter.to_bytes(trait)
         out_stream.write(trait_bytes)
     return out_stream.getvalue()
Пример #5
0
 def to_bytes(tag):
     out_stream = ABCFileOutputStream()
     out_stream.write(TagHeaderConverter.to_bytes(tag.type, tag.header))
     out_stream.writeSI32(tag.lazyInitializeFlag)
     out_stream.write(tag.abcName + '\x00')
     out_stream.write(tag.bytes)
     return out_stream.getvalue()
Пример #6
0
 def to_bytes(body):
     out_stream = ABCFileOutputStream()
     out_stream.writeU30(body.method)
     out_stream.writeU30(body.max_stack)
     out_stream.writeU30(body.local_count)
     out_stream.writeU30(body.init_scope_depth)
     out_stream.writeU30(body.max_scope_depth)
     code_length = len(body.code)
     out_stream.writeU30(code_length)
     out_stream.write(body.code)
     exception_count = len(body.exceptions)
     out_stream.writeU30(exception_count)
     for exception in body.exceptions:
         out_stream.writeU30(exception.from_)
         out_stream.writeU30(exception.to)
         out_stream.writeU30(exception.target)
         out_stream.writeU30(exception.exc_type)
         out_stream.writeU30(exception.var_name)
     trait_count = len(body.traits)
     out_stream.writeU30(trait_count)
     for trait in body.traits:
         trait_bytes = StTraitConverter.to_bytes(trait)
         out_stream.write(trait_bytes)
     return out_stream.getvalue()
Пример #7
0
    def to_bytes(pool):
        out_stream = ABCFileOutputStream()

        count = len(pool.integers)
        if count <= 1:
            out_stream.writeU30(0)
        else:
            out_stream.writeU30(count)
            for integer in pool.integers[1:]:
                out_stream.writeS32(integer)

        count = len(pool.uintegers)
        if count <= 1:
            out_stream.writeU30(0)
        else:
            out_stream.writeU30(count)
            for uinteger in pool.uintegers[1:]:
                out_stream.writeU32(uinteger)

        count = len(pool.doubles)
        if count <= 1:
            out_stream.writeU30(0)
        else:
            out_stream.writeU30(count)
            for d in pool.doubles[1:]:
                out_stream.writeD64(d)

        count = len(pool._strings)
        if count <= 1:
            out_stream.writeU30(0)
        else:
            out_stream.writeU30(count)
            for s in pool._strings[1:]:
                str_size = len(s)
                out_stream.writeU30(str_size)
                out_stream.write(s)

        count = len(pool._namespaces)
        if count <= 1:
            out_stream.writeU30(0)
        else:
            out_stream.writeU30(count)
            for kind, name in pool._namespaces[1:]:
                out_stream.writeU8(kind)
                out_stream.writeU30(name)

        count = len(pool._ns_sets)
        if count <= 1:
            out_stream.writeU30(0)
        else:
            out_stream.writeU30(count)
            for ns_set in pool._ns_sets[1:]:
                ns_count = len(ns_set)
                out_stream.writeU30(ns_count)
                for ns in ns_set:
                    out_stream.writeU30(ns)

        count = len(pool._multinames)
        if count <= 1:
            out_stream.writeU30(0)
        else:
            out_stream.writeU30(count)
            for multiname in pool._multinames[1:]:
                m_bytes = MultinameConverter.to_bytes(multiname)
                out_stream.write(m_bytes)

        return out_stream.getvalue()
Пример #8
0
 def to_bytes(abcfile):
     out_stream = ABCFileOutputStream()
     out_stream.writeU16(abcfile._version['minor'])
     out_stream.writeU16(abcfile._version['major'])
     pool_bytes = ConstantPoolConverter.to_bytes(abcfile.const_pool)
     out_stream.write(pool_bytes)
     # method
     count = len(abcfile.methods)
     out_stream.writeU30(count)
     for method in abcfile.methods:
         method_bytes = StMethodInfoConverter.to_bytes(method)
         out_stream.write(method_bytes)
     # metadata
     count = len(abcfile.metadatas)
     out_stream.writeU30(count)
     for metadata in abcfile.metadatas:
         out_stream.writeU30(metadata['name'])
         item_count = len(metadata['items'])
         out_stream.writeU30(item_count)
         for item in metadata['items']:
             out_stream.writeU30(item['key'])
             out_stream.writeU30(item['value'])
     # class/instance
     count = len(abcfile.instances)
     out_stream.writeU30(count)
     for instance in abcfile.instances:
         instance_bytes = StInstanceInfoConverter.to_bytes(instance)
         out_stream.write(instance_bytes)
     for class_ in abcfile.classes:
         class_bytes = StClassInfoConverter.to_bytes(class_)
         out_stream.write(class_bytes)
     # script
     count = len(abcfile.scripts)
     out_stream.writeU30(count)
     for script in abcfile.scripts:
         out_stream.writeU30(script['init'])
         trait_count = len(script['traits'])
         out_stream.writeU30(trait_count)
         for trait in script['traits']:
             trait_bytes = StTraitConverter.to_bytes(trait)
             out_stream.write(trait_bytes)
     # method body
     count = len(abcfile.method_bodies)
     out_stream.writeU30(count)
     for body in abcfile.method_bodies:
         body_bytes = StMethodBodyConverter.to_bytes(body)
         out_stream.write(body_bytes)
     return out_stream.getvalue()