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
*/
export function generateReaderCodeForTlEntry(entry: TlEntry, includeFlags = false): string {
export function generateReaderCodeForTlEntry(
entry: TlEntry,
includeFlags = false
): string {
if (entry.id === 0) entry.id = computeConstructorIdFromEntry(entry)
let ret = `${entry.id}:function(r){`
const pre = `${entry.id}:function(r){`
if (!entry.arguments.length) {
return ret + `return{_:'${entry.name}'}},`
return pre + `return{_:'${entry.name}'}},`
}
let beforeReturn = ''
@ -105,7 +108,6 @@ export function generateReaderCodeForTlEntry(entry: TlEntry, includeFlags = fals
code += ':void 0'
}
if (isBeforeLastFlag) {
beforeReturn += code + ';'
} 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(

View file

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