fix(tl-utils): optimize readers code size by merging pre-return vars

This commit is contained in:
teidesu 2022-06-28 19:26:11 +03:00
parent dd4cc471f6
commit a2dbccada6
2 changed files with 13 additions and 11 deletions

View file

@ -5,13 +5,16 @@ import { snakeToCamel } from './utils'
/** /**
* Returns code as an object entry * Returns code as an object entry
*/ */
export function generateReaderCodeForTlEntry(entry: TlEntry, includeFlags = false): string { export function generateReaderCodeForTlEntry(
entry: TlEntry,
includeFlags = false
): string {
if (entry.id === 0) entry.id = computeConstructorIdFromEntry(entry) if (entry.id === 0) entry.id = computeConstructorIdFromEntry(entry)
let ret = `${entry.id}:function(r){` const pre = `${entry.id}:function(r){`
if (!entry.arguments.length) { if (!entry.arguments.length) {
return ret + `return{_:'${entry.name}'}},` return pre + `return{_:'${entry.name}'}},`
} }
let beforeReturn = '' let beforeReturn = ''
@ -105,7 +108,6 @@ export function generateReaderCodeForTlEntry(entry: TlEntry, includeFlags = fals
code += ':void 0' code += ':void 0'
} }
if (isBeforeLastFlag) { if (isBeforeLastFlag) {
beforeReturn += code + ';' beforeReturn += code + ';'
} else { } else {
@ -113,7 +115,7 @@ export function generateReaderCodeForTlEntry(entry: TlEntry, includeFlags = fals
} }
}) })
return `${ret}${beforeReturn}return{${returnCode}}},` return `${pre}${beforeReturn.replace(/;var /g, ',')}return{${returnCode}}},`
} }
export function generateReaderCodeForTlEntries( export function generateReaderCodeForTlEntries(

View file

@ -75,10 +75,10 @@ describe('generateReaderCodeForTlEntry', () => {
it('generates code for constructors with multiple flags fields', () => { it('generates code for constructors with multiple flags fields', () => {
test( test(
'updates.channelDifferenceEmpty#3e11affb flags:# final:flags.0?true pts:int timeout:flags.1?int flags2:# can_delete_channel:flags2.0?true = updates.ChannelDifference;', 'updates.channelDifferenceEmpty#3e11affb flags:# final:flags.0?true pts:int timeout:flags.1?int flags2:# can_delete_channel:flags2.0?true = updates.ChannelDifference;',
'var flags=r.uint();', 'var flags=r.uint(),',
'var pts=r.int();', 'pts=r.int(),',
'var timeout=flags&2?r.int():void 0;', 'timeout=flags&2?r.int():void 0,',
'var flags2=r.uint();', 'flags2=r.uint();',
'return{', 'return{',
"_:'updates.channelDifferenceEmpty',", "_:'updates.channelDifferenceEmpty',",
'final:!!(flags&1),', 'final:!!(flags&1),',
@ -128,8 +128,8 @@ describe('generateReaderCodeForTlEntry', () => {
const entry = parseTlToEntries('test flags:# flags2:# = Test;')[0] const entry = parseTlToEntries('test flags:# flags2:# = Test;')[0]
expect(generateReaderCodeForTlEntry(entry, true)).eq( expect(generateReaderCodeForTlEntry(entry, true)).eq(
`${entry.id}:function(r){${[ `${entry.id}:function(r){${[
'var flags=r.uint();', 'var flags=r.uint(),',
'var flags2=r.uint();', 'flags2=r.uint();',
'return{', 'return{',
"_:'test',", "_:'test',",
'flags:flags,', 'flags:flags,',