Несколько тегов DoABC для повторного использования шаблона.

Я работаю над инструментом для компиляции TypeScript в SWF. Например, я еще не разобрался с преобразователем, но мне хотелось повторно использовать немного шаблонного кода из другогоabc. Я просто добавляю ABC из SWC в выходной SWF, но работает ли это?

      // ...
public mergeSWF(file: Buffer | string) {
    let swf = SwfReader.readSync(file);
    let symbolClasses = swf.tags.filter(tag => tag.code == SwfTagCode.SYMBOL_CLASS);
    let reassignedCharTagIds = new Map<number, number>();
    for (let tag of swf.tags) {
        if (tag.code == SwfTagCode.DO_ABC) {
            this.swfTags.push(tag);
        } else if (tag.code == SwfTagCode.DEFINE_BINARY_DATA) {
            // re-assign the character tag ID if already used.
            let binaryData = new SwfReader(ByteArray.from(tag.data!)).defineBinaryData();
            let prevTag = binaryData.tag;
            binaryData.tag = this.swfAlreadyUsedCharTagIds.has(binaryData.tag) ? this.nextSWFCharTagId() : binaryData.tag;
            this.swfAlreadyUsedCharTagIds.add(binaryData.tag);
            reassignedCharTagIds.set(prevTag, binaryData.tag);
            let newData = new SwfWriter();
            newData.ui16(binaryData.tag);
            newData.ui32(0);
            newData.binary(binaryData.data);
            tag.data = newData.toNodejsBuffer();
        }
    }
    for (let symbolClass of symbolClasses) {
        // re-assign the character tag IDs
        for (let symbol of symbolClass.symbols!) {
            symbol.id = reassignedCharTagIds.get(symbol.id)!;
        }

        this.swfTags.push(symbolClass);
    }
}

Может ли a в SWF ссылаться на другойDoABCв том же SWF без объединения байт-кодов (например, пула констант)?

Пример:

    • Mainотносится кq.b::Cот

Ожидается ли, что это будет работать на AVM2, учитывая, чтоlib.abcпоявляется раньшеapp.abc?

0 ответов

Другие вопросы по тегам