diff --git a/Makefile b/Makefile index 3ddcc2c5..7442842f 100644 --- a/Makefile +++ b/Makefile @@ -26,13 +26,18 @@ BASIC_TL_PATH := github.com/vkcom/tl/pkg/basictl TL_BYTE_VERSIONS := ch_proxy.,ab. -.PHONY: build - all: build +.PHONY: build build: @$(GO) build -ldflags "$(COMMON_LDFLAGS)" -buildvcs=false -o target/bin/tlgen ./cmd/tlgen + +.PHONY: test +test: + @$(GO) test $(shell go list ./... | grep -v internal/tlcodegen/test/gen/) + + tlo-bootstrap: build @./target/bin/tlgen -v --language=go \ --copyrightPath=./COPYRIGHT \ diff --git a/cmd/tlgen/main2.go b/cmd/tlgen/main2.go index 750cc971..8b93dd1c 100644 --- a/cmd/tlgen/main2.go +++ b/cmd/tlgen/main2.go @@ -123,11 +123,11 @@ func runMain(opt *tlcodegen.Gen2Options) error { return fmt.Errorf("error while walkking through paths: %w", err) } for _, path := range paths { - tl, err := parseTlFile(path) + tl, err := parseTlFile(path, false, opt) if err != nil { return err } - fullTl, err := parseFullTlFile(path) + fullTl, err := parseTlFile(path, true, opt) if err != nil { return err } @@ -186,30 +186,23 @@ func runMain(opt *tlcodegen.Gen2Options) error { return nil } -func parseTlFile(file string) (tlast.TL, error) { +func parseTlFile(file string, replaceStrange bool, opt *tlcodegen.Gen2Options) (tlast.TL, error) { data, err := os.ReadFile(file) if err != nil { return nil, fmt.Errorf("error reading schema file %q - %w", file, err) } + dataStr := string(data) // Exceptions we cannot fix upstream - dataStr := strings.ReplaceAll(string(data), "_ {X:Type} result:X = ReqResult X;", "") - dataStr = strings.ReplaceAll(dataStr, "engine.query {X:Type} query:!X = engine.Query;", "") - dataStr = strings.ReplaceAll(dataStr, "engine.queryShortened query:%(VectorTotal int) = engine.Query;", "") - - tl, err := tlast.ParseTLFile(dataStr, file, false) - if err != nil { - return tl, err // Do not add excess info to already long parse error + if replaceStrange { + dataStr = strings.ReplaceAll(dataStr, "_ {X:Type} result:X = ReqResult X;", "") + dataStr = strings.ReplaceAll(dataStr, "engine.query {X:Type} query:!X = engine.Query;", "") + dataStr = strings.ReplaceAll(dataStr, "engine.queryShortened query:%(VectorTotal int) = engine.Query;", "") } - return tl, nil -} - -func parseFullTlFile(file string) (tlast.TL, error) { - data, err := os.ReadFile(file) - if err != nil { - return nil, fmt.Errorf("error reading schema file %q - %w", file, err) - } - // Exceptions we cannot fix upstream - tl, err := tlast.ParseTLFile(string(data), file, true) + tl, err := tlast.ParseTLFile(dataStr, file, tlast.LexerOptions{ + AllowBuiltin: false, + AllowDirty: false, + AllowMLC: !opt.WarningsAreErrors, + }, opt.ErrorWriter) if err != nil { return tl, err // Do not add excess info to already long parse error } diff --git a/internal/tlast/tllexer.go b/internal/tlast/tllexer.go index 92a393d5..0d5f81dc 100644 --- a/internal/tlast/tllexer.go +++ b/internal/tlast/tllexer.go @@ -129,22 +129,28 @@ func numberLexeme(s string) (string, bool) { return s[:i], allDigits } +type LexerOptions struct { + AllowBuiltin bool // allows constructor to start from '_' (underscore), used only internally by tlgen + AllowDirty bool // allows to use '_' (underscore) as constructor name, will be removed after combined.tl is cleaned up + AllowMLC bool // allow multiline comments. They are treated as warnings. +} + type lexer struct { - allowBuiltin bool - str string // iterator-like - tokens []token + opts LexerOptions + str string // iterator-like + tokens []token position Position } -func newLexer(s, file string, allowBuiltin bool) lexer { - return lexer{allowBuiltin, s, make([]token, 0, len(s)/3), Position{s, file, 1, 1, 0, 0}} +func newLexer(s, file string, opts LexerOptions) lexer { + return lexer{opts, s, make([]token, 0, len(s)/3), Position{s, file, 1, 1, 0, 0}} } // when error is returned, undefined token is added to tokens -func (l *lexer) generateTokens(allowDirty bool) ([]token, error) { +func (l *lexer) generateTokens() ([]token, error) { for l.str != "" { - err := l.nextToken(allowDirty) + err := l.nextToken() if err != nil { return l.tokens, err } @@ -195,7 +201,7 @@ func (l *lexer) checkPrimitive() bool { } } -func (l *lexer) nextToken(allowDirty bool) error { +func (l *lexer) nextToken() error { switch { case l.checkPrimitive(): return nil @@ -215,7 +221,7 @@ func (l *lexer) nextToken(allowDirty bool) error { case l.str[0] == '#': return l.lexNumberSign() case l.str[0] == '_': - if l.allowBuiltin { + if l.opts.AllowBuiltin { w := builtinIdent(l.str) if w == "_" { l.advance(len(w), ucIdent) // for TypeDecls that do not exist @@ -224,7 +230,7 @@ func (l *lexer) nextToken(allowDirty bool) error { } return nil } - if allowDirty { + if l.opts.AllowDirty { l.advance(1, lcIdent) return nil } diff --git a/internal/tlast/tllexer_test.go b/internal/tlast/tllexer_test.go index f2472bc1..ef9313e1 100644 --- a/internal/tlast/tllexer_test.go +++ b/internal/tlast/tllexer_test.go @@ -61,12 +61,12 @@ stat#9d56e6b2 %(Dictionary string) = Stat; dictionaryField {t:Type} key:string value:t = DictionaryField t; dictionary#1f4c618f {t:Type} %(Vector %(DictionaryField t)) = Dictionary t; ` - var err error - require.NoError(t, err) + t.Run("Full file", func(t *testing.T) { str := combinedBytes - lex := newLexer(str, "", false) - tokens, _ := lex.generateTokens(false) // TODO - what if err? + lex := newLexer(str, "", LexerOptions{}) + tokens, err := lex.generateTokens() + require.NoError(t, err) require.Equal(t, 0, countToken(tokens, undefined)) recombined := lex.recombineTokens() require.Equal(t, str, recombined) @@ -74,16 +74,17 @@ dictionary#1f4c618f {t:Type} %(Vector %(DictionaryField t)) = Dictionary t; t.Run("Empty file", func(t *testing.T) { str := "" - lex := newLexer(str, "", false) - _, _ = lex.generateTokens(false) + lex := newLexer(str, "", LexerOptions{}) + _, err := lex.generateTokens() + require.NoError(t, err) recombined := lex.recombineTokens() require.Equal(t, str, recombined) }) t.Run("Upper case in tag", func(t *testing.T) { str := "foo#1234567F = Foo;" - lex := newLexer(str, "", false) - _, err = lex.generateTokens(false) + lex := newLexer(str, "", LexerOptions{}) + _, err := lex.generateTokens() require.EqualError(t, err, "expect tag with exactly 8 lowercase hex digits here") }) @@ -92,8 +93,8 @@ dictionary#1f4c618f {t:Type} %(Vector %(DictionaryField t)) = Dictionary t; from := rand.Intn(len(combinedBytes)) to := from + rand.Intn(len(combinedBytes)-from) str := combinedBytes[from:to] - lex := newLexer(str, "", false) - _, _ = lex.generateTokens(false) + lex := newLexer(str, "", LexerOptions{}) + _, _ = lex.generateTokens() // returns errors, but recombination still works recombined := lex.recombineTokens() require.Equal(t, str, recombined) } diff --git a/internal/tlast/tlparser_code.go b/internal/tlast/tlparser_code.go index d2d4ea8e..3635647f 100644 --- a/internal/tlast/tlparser_code.go +++ b/internal/tlast/tlparser_code.go @@ -8,8 +8,10 @@ package tlast import ( "fmt" + "io" "log" "math" + "os" "strconv" "strings" ) @@ -56,7 +58,7 @@ func (it *tokenIterator) skipToNewline() bool { switch tok := it.front(); tok.tokenType { case comment, whiteSpace, tab: continue - case newLine: + case newLine, eof: return true default: return false @@ -613,18 +615,13 @@ func parseCombinator(commentStart tokenIterator, tokens tokenIterator, isFunctio } func ParseTL(str string) (TL, error) { - return ParseTLFile(str, "", false) -} - -func ParseTLFile(str, file string, allowDirty bool) (TL, error) { - return ParseTL2(str, file, false, allowDirty) + return ParseTLFile(str, "", LexerOptions{AllowMLC: true}, os.Stdout) } // ParseTL2 TL := TypesSection [ type ... ] FunctionSection [ function ... ] -// allowDirty - allows to use '_' (underscore) as constructor name -func ParseTL2(str, file string, allowBuiltin, allowDirty bool) (TL, error) { - lex := newLexer(str, file, allowBuiltin) - allTokens, err := lex.generateTokens(allowDirty) +func ParseTLFile(str, file string, opts LexerOptions, errorWriter io.Writer) (TL, error) { + lex := newLexer(str, file, opts) + allTokens, err := lex.generateTokens() if err != nil { return TL{}, fmt.Errorf("tokenizer error: %w", err) } @@ -635,6 +632,19 @@ func ParseTL2(str, file string, allowBuiltin, allowDirty bool) (TL, error) { log.Panicf("invariant violation in tokenizer, %s", ContactAuthorsString) } + it := tokenIterator{tokens: allTokens} + for ; it.count() != 0; it.popFront() { + tok := it.front() + if tok.tokenType == comment && strings.HasPrefix(tok.val, "/*") { + tok.val = tok.val[:2] // do not print the whole comment, but only the first line + e1 := parseErrToken(fmt.Errorf("multiline comments are not part of language"), tok, tok.pos) + if !opts.AllowMLC { + return TL{}, e1 + } + e1.PrintWarning(errorWriter, nil) + } + } + functionSection := false var res TL @@ -655,7 +665,7 @@ func ParseTL2(str, file string, allowBuiltin, allowDirty bool) (TL, error) { continue } var td Combinator - td, rest, err = parseCombinator(commentStart, rest, functionSection, allowBuiltin) + td, rest, err = parseCombinator(commentStart, rest, functionSection, opts.AllowBuiltin) if err != nil { if functionSection { return nil, fmt.Errorf("function declaration error: %w", err) diff --git a/internal/tlcodegen/builtin.go b/internal/tlcodegen/builtin.go index 0f527a20..c3630991 100644 --- a/internal/tlcodegen/builtin.go +++ b/internal/tlcodegen/builtin.go @@ -138,8 +138,8 @@ func (gen *Gen2) ReplaceSquareBracketsElem(tl tlast.TL) (tlast.TL, error) { tl = append(tl, res) return tWithArgs } - var replaceRepeated func(toVector bool, insideField tlast.Field) (tlast.TypeRef, error) - replaceRepeated = func(toVector bool, insideField tlast.Field) (tlast.TypeRef, error) { + var replaceRepeated func(toVector bool, insideField tlast.Field, originalCommentRight string) (tlast.TypeRef, error) + replaceRepeated = func(toVector bool, insideField tlast.Field, originalCommentRight string) (tlast.TypeRef, error) { if len(insideField.ScaleRepeat.Rep) == 0 { return tlast.TypeRef{}, insideField.ScaleRepeat.PR.BeautifulError(fmt.Errorf("repetition with no fields is not allowed")) } @@ -160,20 +160,22 @@ func (gen *Gen2) ReplaceSquareBracketsElem(tl tlast.TL) (tlast.TL, error) { // This is experimental support for transformation of [# [int]] into [__vector] insideField.ScaleRepeat.Rep[1].ScaleRepeat.ExplicitScale = true var err error - if tWithArgs, err = replaceRepeated(true, insideField.ScaleRepeat.Rep[1]); err != nil { + if tWithArgs, err = replaceRepeated(true, insideField.ScaleRepeat.Rep[1], originalCommentRight); err != nil { return tWithArgs, err } } else if len(insideField.ScaleRepeat.Rep) != 1 || insideField.ScaleRepeat.Rep[0].FieldName != "" || insideField.ScaleRepeat.Rep[0].Mask != nil { - e1 := insideField.ScaleRepeat.PR.BeautifulError(fmt.Errorf("tlgen has to invent name for type inside brackets, please give a good name to it manually")) tWithArgs = replaceRep(insideField.ScaleRepeat.Rep) + if doLint(originalCommentRight) { + e1 := insideField.ScaleRepeat.PR.BeautifulError(fmt.Errorf("tlgen has to invent name for type inside brackets, please give a good name to it manually")) - if gen.options.WarningsAreErrors { - return tWithArgs, e1 + if gen.options.WarningsAreErrors { + return tWithArgs, e1 + } + e1.PrintWarning(gen.options.ErrorWriter, nil) } - e1.PrintWarning(gen.options.ErrorWriter, nil) } else if insideField.ScaleRepeat.Rep[0].IsRepeated { var err error - if tWithArgs, err = replaceRepeated(false, insideField.ScaleRepeat.Rep[0]); err != nil { + if tWithArgs, err = replaceRepeated(false, insideField.ScaleRepeat.Rep[0], originalCommentRight); err != nil { return tWithArgs, err } } @@ -239,7 +241,7 @@ func (gen *Gen2) ReplaceSquareBracketsElem(tl tlast.TL) (tlast.TL, error) { newField.ScaleRepeat.ExplicitScale = true } var err error - if newField.FieldType, err = replaceRepeated(toVector, newField); err != nil { + if newField.FieldType, err = replaceRepeated(toVector, newField, newField.CommentRight); err != nil { return nil, err } newField.IsRepeated = false diff --git a/internal/tlcodegen/test/gen/schema/factory_bytes/factory_bytes.go b/internal/tlcodegen/test/gen/schema/factory_bytes/factory_bytes.go new file mode 100644 index 00000000..9ab34069 --- /dev/null +++ b/internal/tlcodegen/test/gen/schema/factory_bytes/factory_bytes.go @@ -0,0 +1,339 @@ +// Copyright 2022 V Kontakte LLC +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +// Code generated by vktl/cmd/tlgen2; DO NOT EDIT. +package factory_bytes + +import ( + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/cycle_16847572a0831d4cd4c0c0fb513151f3" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/cycle_2383fe3e154dfb1e44c2ac7759547e8a" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/cycle_4174bfee82ee7ea4902a121c2642c5ff" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/cycle_49caccaceef1b58bbbff030c58394129" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/cycle_6ca945392bbf8b14f24e5653edc8b214" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlBenchObject" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlBoolStat" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlBoxedArray" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlBoxedInt" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlBoxedString" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlBoxedTuple" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlBoxedTupleSlice1" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlBoxedTupleSlice2" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlBoxedTupleSlice3" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlBoxedVector32" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlBoxedVector32BoxedElem" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlBoxedVector64" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlDouble" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlFieldConflict1" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlFieldConflict2" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlFieldConflict3" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlFieldConflict4" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlFloat" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlGetArrays" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlGetDouble" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlGetFloat" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlGetMaybeIface" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlGetMyDictOfInt" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlGetMyDouble" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlGetMyValue" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlGetNonOptNat" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlGetStats" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlInt" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlInteger" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlIssue3498" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlLong" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlMyAnonMcValue" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlMyBoxedArray" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlMyBoxedTupleSlice" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlMyBoxedVectorSlice" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlMyDictOfInt" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlMyDouble" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlMyMaybe1" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlMyMaybe2" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlMyMcValue" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlMyMcValueTuple" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlMyMcValueVector" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlMyTwoDicts" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlNonOptNat" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlRpcInvokeReqExtra" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlStatOne" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlString" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlTrue" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tl/tlWithFloat" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlantispam/tlAntispamGetPattern" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlpkg2/tlPkg2Foo" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlpkg2/tlPkg2T1" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlpkg2/tlPkg2T2" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1Add" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1AddOrGet" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1AddOrIncr" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1Append" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1Cas" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1Decr" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1Delete" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1DisableExpiration" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1DisableKeysStat" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1EnableExpiration" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1EnableKeysStat" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1Exists" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1Get" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1GetExpireTime" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1GetKeysStat" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1GetKeysStatPeriods" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1GetWildcard" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1GetWildcardDict" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1GetWildcardList" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1GetWildcardWithFlags" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1Incr" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1KeysStat" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1Replace" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1ReplaceOrIncr" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1Set" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1SetOrIncr" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice1/tlService1Touch" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice2/tlService2AddOrIncrMany" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice2/tlService2Set" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice2/tlService2SetObjectTtl" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice3/tlService3CreateProduct" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice3/tlService3DeleteAllProducts" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice3/tlService3DeleteGroupedProducts" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice3/tlService3DeleteProduct" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice3/tlService3GetLastVisitTimestamp" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice3/tlService3GetLimits" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice3/tlService3GetProductStats" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice3/tlService3GetProducts" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice3/tlService3GetScheduledProducts" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice3/tlService3GroupCountLimit" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice3/tlService3GroupSizeLimit" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice3/tlService3Limits" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice3/tlService3ProductStatsOld" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice3/tlService3RestoreAllProducts" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice3/tlService3RestoreGroupedProducts" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice3/tlService3RestoreProduct" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice3/tlService3SetLastVisitTimestamp" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice3/tlService3SetLimits" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice4/tlService4ModifiedNewsEntry" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice4/tlService4Object" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice5/tlService5Insert" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice5/tlService5Params" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice5/tlService5PerformQuery" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice5/tlService5Query" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice6/tlService6Error" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice6/tlService6FindResultRow" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice6/tlService6FindWithBoundsResult" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice6/tlService6MultiFind" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlservice6/tlService6MultiFindWithBounds" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tltasks/tlTasksAddTask" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tltasks/tlTasksCronTask" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tltasks/tlTasksCronTaskWithId" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tltasks/tlTasksCronTime" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tltasks/tlTasksGetAnyTask" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tltasks/tlTasksGetQueueSize" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tltasks/tlTasksGetQueueTypes" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tltasks/tlTasksGetTaskFromQueue" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tltasks/tlTasksQueueTypeInfo" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tltasks/tlTasksQueueTypeSettings" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tltasks/tlTasksQueueTypeStats" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tltasks/tlTasksTask" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tltasks/tlTasksTaskInfo" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlunique/tlUniqueGet" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/internal/tlunique/tlUniqueStringToInt" + "github.com/vkcom/tl/internal/tlcodegen/test/gen/schema/meta" +) + +func CreateFunctionBytes(tag uint32) meta.Function { + return meta.CreateFunctionBytes(tag) +} + +func CreateObjectBytes(tag uint32) meta.Object { + return meta.CreateObjectBytes(tag) +} + +// name can be in any of 3 forms "ch_proxy.insert#7cf362ba", "ch_proxy.insert" or "#7cf362ba" +func CreateFunctionFromNameBytes(name string) meta.Function { + return meta.CreateFunctionFromNameBytes(name) +} + +// name can be in any of 3 forms "ch_proxy.insert#7cf362ba", "ch_proxy.insert" or "#7cf362ba" +func CreateObjectFromNameBytes(name string) meta.Object { + return meta.CreateObjectFromNameBytes(name) +} + +func init() { + meta.SetGlobalFactoryCreateForFunctionBytes(0x3de14136, func() meta.Object { var ret tlAntispamGetPattern.AntispamGetPattern; return &ret }, func() meta.Function { var ret tlAntispamGetPattern.AntispamGetPattern; return &ret }, nil) + meta.SetGlobalFactoryCreateForObjectBytes(0xa7688492, func() meta.Object { var ret cycle_4174bfee82ee7ea4902a121c2642c5ff.AntispamPatternFound; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x2c22e225, func() meta.Object { + var ret cycle_4174bfee82ee7ea4902a121c2642c5ff.AntispamPatternNotFound + return &ret + }) + meta.SetGlobalFactoryCreateForObjectBytes(0xb697e865, func() meta.Object { var ret tlBenchObject.BenchObject; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x92cbcbfa, func() meta.Object { var ret tlBoolStat.BoolStat; return &ret }) + meta.SetGlobalFactoryCreateForFunctionBytes(0x95dcc8b7, func() meta.Object { var ret tlBoxedArray.BoxedArray; return &ret }, func() meta.Function { var ret tlBoxedArray.BoxedArray; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x5688ebaf, func() meta.Object { var ret tlBoxedInt.BoxedInt; return &ret }, func() meta.Function { var ret tlBoxedInt.BoxedInt; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x548994db, func() meta.Object { var ret tlBoxedString.BoxedString; return &ret }, func() meta.Function { var ret tlBoxedString.BoxedString; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x30c9d533, func() meta.Object { var ret tlBoxedTuple.BoxedTuple; return &ret }, func() meta.Function { var ret tlBoxedTuple.BoxedTuple; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x25230d40, func() meta.Object { var ret tlBoxedTupleSlice1.BoxedTupleSlice1; return &ret }, func() meta.Function { var ret tlBoxedTupleSlice1.BoxedTupleSlice1; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x1cdf4705, func() meta.Object { var ret tlBoxedTupleSlice2.BoxedTupleSlice2; return &ret }, func() meta.Function { var ret tlBoxedTupleSlice2.BoxedTupleSlice2; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0xa19b8106, func() meta.Object { var ret tlBoxedTupleSlice3.BoxedTupleSlice3; return &ret }, func() meta.Function { var ret tlBoxedTupleSlice3.BoxedTupleSlice3; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0xbbadef07, func() meta.Object { var ret tlBoxedVector32.BoxedVector32; return &ret }, func() meta.Function { var ret tlBoxedVector32.BoxedVector32; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x591cecd4, func() meta.Object { var ret tlBoxedVector32BoxedElem.BoxedVector32BoxedElem; return &ret }, func() meta.Function { var ret tlBoxedVector32BoxedElem.BoxedVector32BoxedElem; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x83659ba8, func() meta.Object { var ret tlBoxedVector64.BoxedVector64; return &ret }, func() meta.Function { var ret tlBoxedVector64.BoxedVector64; return &ret }, nil) + meta.SetGlobalFactoryCreateForObjectBytes(0x2210c154, func() meta.Object { var ret tlDouble.Double; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0xf314bd09, func() meta.Object { var ret tlFieldConflict1.FieldConflict1; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x1bba76b8, func() meta.Object { var ret tlFieldConflict2.FieldConflict2; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x2cf6e157, func() meta.Object { var ret tlFieldConflict3.FieldConflict3; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0xd93c186a, func() meta.Object { var ret tlFieldConflict4.FieldConflict4; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x824dab22, func() meta.Object { var ret tlFloat.Float; return &ret }) + meta.SetGlobalFactoryCreateForFunctionBytes(0x90658cdb, func() meta.Object { var ret tlGetArrays.GetArrays; return &ret }, func() meta.Function { var ret tlGetArrays.GetArrays; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x39711d7b, func() meta.Object { var ret tlGetDouble.GetDouble; return &ret }, func() meta.Function { var ret tlGetDouble.GetDouble; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x25a7bc68, func() meta.Object { var ret tlGetFloat.GetFloat; return &ret }, func() meta.Function { var ret tlGetFloat.GetFloat; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x6b055ae4, func() meta.Object { var ret tlGetMaybeIface.GetMaybeIface; return &ret }, func() meta.Function { var ret tlGetMaybeIface.GetMaybeIface; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x166f962c, func() meta.Object { var ret tlGetMyDictOfInt.GetMyDictOfInt; return &ret }, func() meta.Function { var ret tlGetMyDictOfInt.GetMyDictOfInt; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0xb660ad10, func() meta.Object { var ret tlGetMyDouble.GetMyDouble; return &ret }, func() meta.Function { var ret tlGetMyDouble.GetMyDouble; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0xb3df27fe, func() meta.Object { var ret tlGetMyValue.GetMyValue; return &ret }, func() meta.Function { var ret tlGetMyValue.GetMyValue; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x67665961, func() meta.Object { var ret tlGetNonOptNat.GetNonOptNat; return &ret }, func() meta.Function { var ret tlGetNonOptNat.GetNonOptNat; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0xbaa6da35, func() meta.Object { var ret tlGetStats.GetStats; return &ret }, func() meta.Function { var ret tlGetStats.GetStats; return &ret }, nil) + meta.SetGlobalFactoryCreateForObjectBytes(0xa8509bda, func() meta.Object { var ret tlInt.Int; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x7e194796, func() meta.Object { var ret tlInteger.Integer; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0xf54b7b0a, func() meta.Object { var ret tlIssue3498.Issue3498; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x22076cba, func() meta.Object { var ret tlLong.Long; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x569310db, func() meta.Object { var ret tlMyAnonMcValue.MyAnonMcValue; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x288f64f0, func() meta.Object { var ret tlMyBoxedArray.MyBoxedArray; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x25d1a1be, func() meta.Object { var ret tlMyBoxedTupleSlice.MyBoxedTupleSlice; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x57d164bb, func() meta.Object { var ret tlMyBoxedVectorSlice.MyBoxedVectorSlice; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0xb8019a3d, func() meta.Object { var ret tlMyDictOfInt.MyDictOfInt; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x90a6c726, func() meta.Object { var ret tlMyDouble.MyDouble; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0xc12375b7, func() meta.Object { var ret cycle_2383fe3e154dfb1e44c2ac7759547e8a.MyInt; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x32c541fe, func() meta.Object { var ret tlMyMaybe1.MyMaybe1; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0xef6d355c, func() meta.Object { var ret tlMyMaybe2.MyMaybe2; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0xe2ffd978, func() meta.Object { var ret tlMyMcValue.MyMcValue; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x1287d116, func() meta.Object { var ret tlMyMcValueTuple.MyMcValueTuple; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x761d6d58, func() meta.Object { var ret tlMyMcValueVector.MyMcValueVector; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0xc8bfa969, func() meta.Object { var ret cycle_2383fe3e154dfb1e44c2ac7759547e8a.MyString; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0xa859581d, func() meta.Object { var ret tlMyTwoDicts.MyTwoDicts; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x45366605, func() meta.Object { var ret tlNonOptNat.NonOptNat; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0xe144703d, func() meta.Object { var ret tlPkg2Foo.Pkg2Foo; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x638206ec, func() meta.Object { var ret tlPkg2T1.Pkg2T1; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0xd6e5af9c, func() meta.Object { var ret tlPkg2T2.Pkg2T2; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0xf3ef81a9, func() meta.Object { var ret tlRpcInvokeReqExtra.RpcInvokeReqExtra; return &ret }) + meta.SetGlobalFactoryCreateForFunctionBytes(0x481df8be, func() meta.Object { var ret tlService1Add.Service1Add; return &ret }, func() meta.Function { var ret tlService1Add.Service1Add; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x6a42faad, func() meta.Object { var ret tlService1AddOrGet.Service1AddOrGet; return &ret }, func() meta.Function { var ret tlService1AddOrGet.Service1AddOrGet; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x90c4b402, func() meta.Object { var ret tlService1AddOrIncr.Service1AddOrIncr; return &ret }, func() meta.Function { var ret tlService1AddOrIncr.Service1AddOrIncr; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x04dec671, func() meta.Object { var ret tlService1Append.Service1Append; return &ret }, func() meta.Function { var ret tlService1Append.Service1Append; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x51851964, func() meta.Object { var ret tlService1Cas.Service1Cas; return &ret }, func() meta.Function { var ret tlService1Cas.Service1Cas; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0xeb179ce7, func() meta.Object { var ret tlService1Decr.Service1Decr; return &ret }, func() meta.Function { var ret tlService1Decr.Service1Decr; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x83277767, func() meta.Object { var ret tlService1Delete.Service1Delete; return &ret }, func() meta.Function { var ret tlService1Delete.Service1Delete; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0xf1c39c2d, func() meta.Object { var ret tlService1DisableExpiration.Service1DisableExpiration; return &ret }, func() meta.Function { var ret tlService1DisableExpiration.Service1DisableExpiration; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x79d6160f, func() meta.Object { var ret tlService1DisableKeysStat.Service1DisableKeysStat; return &ret }, func() meta.Function { var ret tlService1DisableKeysStat.Service1DisableKeysStat; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x2b51ad67, func() meta.Object { var ret tlService1EnableExpiration.Service1EnableExpiration; return &ret }, func() meta.Function { var ret tlService1EnableExpiration.Service1EnableExpiration; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x29a7090e, func() meta.Object { var ret tlService1EnableKeysStat.Service1EnableKeysStat; return &ret }, func() meta.Function { var ret tlService1EnableKeysStat.Service1EnableKeysStat; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0xe0284c9e, func() meta.Object { var ret tlService1Exists.Service1Exists; return &ret }, func() meta.Function { var ret tlService1Exists.Service1Exists; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x29099b19, func() meta.Object { var ret tlService1Get.Service1Get; return &ret }, func() meta.Function { var ret tlService1Get.Service1Get; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x5a731070, func() meta.Object { var ret tlService1GetExpireTime.Service1GetExpireTime; return &ret }, func() meta.Function { var ret tlService1GetExpireTime.Service1GetExpireTime; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x06cecd58, func() meta.Object { var ret tlService1GetKeysStat.Service1GetKeysStat; return &ret }, func() meta.Function { var ret tlService1GetKeysStat.Service1GetKeysStat; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x8cdf39e3, func() meta.Object { var ret tlService1GetKeysStatPeriods.Service1GetKeysStatPeriods; return &ret }, func() meta.Function { var ret tlService1GetKeysStatPeriods.Service1GetKeysStatPeriods; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x2f2abf13, func() meta.Object { var ret tlService1GetWildcard.Service1GetWildcard; return &ret }, func() meta.Function { var ret tlService1GetWildcard.Service1GetWildcard; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x72bbc81b, func() meta.Object { var ret tlService1GetWildcardDict.Service1GetWildcardDict; return &ret }, func() meta.Function { var ret tlService1GetWildcardDict.Service1GetWildcardDict; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x56b6ead4, func() meta.Object { var ret tlService1GetWildcardList.Service1GetWildcardList; return &ret }, func() meta.Function { var ret tlService1GetWildcardList.Service1GetWildcardList; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x5f6a1f78, func() meta.Object { var ret tlService1GetWildcardWithFlags.Service1GetWildcardWithFlags; return &ret }, func() meta.Function { var ret tlService1GetWildcardWithFlags.Service1GetWildcardWithFlags; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x0f96b56e, func() meta.Object { var ret tlService1Incr.Service1Incr; return &ret }, func() meta.Function { var ret tlService1Incr.Service1Incr; return &ret }, nil) + meta.SetGlobalFactoryCreateForObjectBytes(0xf0f6bc68, func() meta.Object { var ret tlService1KeysStat.Service1KeysStat; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x082e0945, func() meta.Object { var ret cycle_6ca945392bbf8b14f24e5653edc8b214.Service1Longvalue; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0xa04606ec, func() meta.Object { + var ret cycle_6ca945392bbf8b14f24e5653edc8b214.Service1LongvalueWithTime + return &ret + }) + meta.SetGlobalFactoryCreateForObjectBytes(0x1d670b96, func() meta.Object { var ret cycle_6ca945392bbf8b14f24e5653edc8b214.Service1NotFound; return &ret }) + meta.SetGlobalFactoryCreateForFunctionBytes(0x7f2c447d, func() meta.Object { var ret tlService1Replace.Service1Replace; return &ret }, func() meta.Function { var ret tlService1Replace.Service1Replace; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x9d1bdcfd, func() meta.Object { var ret tlService1ReplaceOrIncr.Service1ReplaceOrIncr; return &ret }, func() meta.Function { var ret tlService1ReplaceOrIncr.Service1ReplaceOrIncr; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x05ae5f66, func() meta.Object { var ret tlService1Set.Service1Set; return &ret }, func() meta.Function { var ret tlService1Set.Service1Set; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x772e390d, func() meta.Object { var ret tlService1SetOrIncr.Service1SetOrIncr; return &ret }, func() meta.Function { var ret tlService1SetOrIncr.Service1SetOrIncr; return &ret }, nil) + meta.SetGlobalFactoryCreateForObjectBytes(0x5faa0c52, func() meta.Object { var ret cycle_6ca945392bbf8b14f24e5653edc8b214.Service1Strvalue; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x98b1a484, func() meta.Object { + var ret cycle_6ca945392bbf8b14f24e5653edc8b214.Service1StrvalueWithTime + return &ret + }) + meta.SetGlobalFactoryCreateForFunctionBytes(0xb737aa03, func() meta.Object { var ret tlService1Touch.Service1Touch; return &ret }, func() meta.Function { var ret tlService1Touch.Service1Touch; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x5aa52489, func() meta.Object { var ret tlService2AddOrIncrMany.Service2AddOrIncrMany; return &ret }, func() meta.Function { var ret tlService2AddOrIncrMany.Service2AddOrIncrMany; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x0d31f63d, func() meta.Object { var ret tlService2Set.Service2Set; return &ret }, func() meta.Function { var ret tlService2Set.Service2Set; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x6f98f025, func() meta.Object { var ret tlService2SetObjectTtl.Service2SetObjectTtl; return &ret }, func() meta.Function { var ret tlService2SetObjectTtl.Service2SetObjectTtl; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0xb7d92bd9, func() meta.Object { var ret tlService3CreateProduct.Service3CreateProduct; return &ret }, func() meta.Function { var ret tlService3CreateProduct.Service3CreateProduct; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x4494acc2, func() meta.Object { var ret tlService3DeleteAllProducts.Service3DeleteAllProducts; return &ret }, func() meta.Function { var ret tlService3DeleteAllProducts.Service3DeleteAllProducts; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0xe468e614, func() meta.Object { var ret tlService3DeleteGroupedProducts.Service3DeleteGroupedProducts; return &ret }, func() meta.Function { + var ret tlService3DeleteGroupedProducts.Service3DeleteGroupedProducts + return &ret + }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x6867e707, func() meta.Object { var ret tlService3DeleteProduct.Service3DeleteProduct; return &ret }, func() meta.Function { var ret tlService3DeleteProduct.Service3DeleteProduct; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x9a4c788d, func() meta.Object { var ret tlService3GetLastVisitTimestamp.Service3GetLastVisitTimestamp; return &ret }, func() meta.Function { + var ret tlService3GetLastVisitTimestamp.Service3GetLastVisitTimestamp + return &ret + }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0xeb399467, func() meta.Object { var ret tlService3GetLimits.Service3GetLimits; return &ret }, func() meta.Function { var ret tlService3GetLimits.Service3GetLimits; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x261f6898, func() meta.Object { var ret tlService3GetProductStats.Service3GetProductStats; return &ret }, func() meta.Function { var ret tlService3GetProductStats.Service3GetProductStats; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0xeb306233, func() meta.Object { var ret tlService3GetProducts.Service3GetProducts; return &ret }, func() meta.Function { var ret tlService3GetProducts.Service3GetProducts; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0xf53ad7bd, func() meta.Object { var ret tlService3GetScheduledProducts.Service3GetScheduledProducts; return &ret }, func() meta.Function { var ret tlService3GetScheduledProducts.Service3GetScheduledProducts; return &ret }, nil) + meta.SetGlobalFactoryCreateForObjectBytes(0x8c04ea7f, func() meta.Object { var ret tlService3GroupCountLimit.Service3GroupCountLimit; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x90e59396, func() meta.Object { var ret tlService3GroupSizeLimit.Service3GroupSizeLimit; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x80ee61ca, func() meta.Object { var ret tlService3Limits.Service3Limits; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x6319810b, func() meta.Object { var ret tlService3ProductStatsOld.Service3ProductStatsOld; return &ret }) + meta.SetGlobalFactoryCreateForFunctionBytes(0x4d839ed0, func() meta.Object { var ret tlService3RestoreAllProducts.Service3RestoreAllProducts; return &ret }, func() meta.Function { var ret tlService3RestoreAllProducts.Service3RestoreAllProducts; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x1f17bfac, func() meta.Object { + var ret tlService3RestoreGroupedProducts.Service3RestoreGroupedProducts + return &ret + }, func() meta.Function { + var ret tlService3RestoreGroupedProducts.Service3RestoreGroupedProducts + return &ret + }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x6170d515, func() meta.Object { var ret tlService3RestoreProduct.Service3RestoreProduct; return &ret }, func() meta.Function { var ret tlService3RestoreProduct.Service3RestoreProduct; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x7909b020, func() meta.Object { var ret tlService3SetLastVisitTimestamp.Service3SetLastVisitTimestamp; return &ret }, func() meta.Function { + var ret tlService3SetLastVisitTimestamp.Service3SetLastVisitTimestamp + return &ret + }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x3ad5c19c, func() meta.Object { var ret tlService3SetLimits.Service3SetLimits; return &ret }, func() meta.Function { var ret tlService3SetLimits.Service3SetLimits; return &ret }, nil) + meta.SetGlobalFactoryCreateForObjectBytes(0xda19832a, func() meta.Object { var ret tlService4ModifiedNewsEntry.Service4ModifiedNewsEntry; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0xa6eeca4f, func() meta.Object { var ret tlService4Object.Service4Object; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x11e46879, func() meta.Object { var ret cycle_16847572a0831d4cd4c0c0fb513151f3.Service5EmptyOutput; return &ret }) + meta.SetGlobalFactoryCreateForFunctionBytes(0xc911ee2c, func() meta.Object { var ret tlService5Insert.Service5Insert; return &ret }, func() meta.Function { var ret tlService5Insert.Service5Insert; return &ret }, nil) + meta.SetGlobalFactoryCreateForObjectBytes(0x12ae5cb5, func() meta.Object { var ret tlService5Params.Service5Params; return &ret }) + meta.SetGlobalFactoryCreateForFunctionBytes(0x019d80a5, func() meta.Object { var ret tlService5PerformQuery.Service5PerformQuery; return &ret }, func() meta.Function { var ret tlService5PerformQuery.Service5PerformQuery; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0xb3b62513, func() meta.Object { var ret tlService5Query.Service5Query; return &ret }, func() meta.Function { var ret tlService5Query.Service5Query; return &ret }, nil) + meta.SetGlobalFactoryCreateForObjectBytes(0x179e9863, func() meta.Object { var ret cycle_16847572a0831d4cd4c0c0fb513151f3.Service5StringOutput; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x738553ef, func() meta.Object { var ret tlService6Error.Service6Error; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0xbd3946e3, func() meta.Object { var ret tlService6FindResultRow.Service6FindResultRow; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x3ded850a, func() meta.Object { var ret tlService6FindWithBoundsResult.Service6FindWithBoundsResult; return &ret }) + meta.SetGlobalFactoryCreateForFunctionBytes(0xe62178d8, func() meta.Object { var ret tlService6MultiFind.Service6MultiFind; return &ret }, func() meta.Function { var ret tlService6MultiFind.Service6MultiFind; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x84b168cf, func() meta.Object { var ret tlService6MultiFindWithBounds.Service6MultiFindWithBounds; return &ret }, func() meta.Function { var ret tlService6MultiFindWithBounds.Service6MultiFindWithBounds; return &ret }, nil) + meta.SetGlobalFactoryCreateForObjectBytes(0x74b0604b, func() meta.Object { var ret tlStatOne.StatOne; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0xb5286e24, func() meta.Object { var ret tlString.String; return &ret }) + meta.SetGlobalFactoryCreateForFunctionBytes(0x2ca073d5, func() meta.Object { var ret tlTasksAddTask.TasksAddTask; return &ret }, func() meta.Function { var ret tlTasksAddTask.TasksAddTask; return &ret }, nil) + meta.SetGlobalFactoryCreateForObjectBytes(0xc90cf28a, func() meta.Object { var ret tlTasksCronTask.TasksCronTask; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x3a958001, func() meta.Object { var ret tlTasksCronTaskWithId.TasksCronTaskWithId; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0xd4177d7f, func() meta.Object { var ret tlTasksCronTime.TasksCronTime; return &ret }) + meta.SetGlobalFactoryCreateForFunctionBytes(0x4a9c7dbb, func() meta.Object { var ret tlTasksGetAnyTask.TasksGetAnyTask; return &ret }, func() meta.Function { var ret tlTasksGetAnyTask.TasksGetAnyTask; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0xd8fcda03, func() meta.Object { var ret tlTasksGetQueueSize.TasksGetQueueSize; return &ret }, func() meta.Function { var ret tlTasksGetQueueSize.TasksGetQueueSize; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x5434457a, func() meta.Object { var ret tlTasksGetQueueTypes.TasksGetQueueTypes; return &ret }, func() meta.Function { var ret tlTasksGetQueueTypes.TasksGetQueueTypes; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x6a52b698, func() meta.Object { var ret tlTasksGetTaskFromQueue.TasksGetTaskFromQueue; return &ret }, func() meta.Function { var ret tlTasksGetTaskFromQueue.TasksGetTaskFromQueue; return &ret }, nil) + meta.SetGlobalFactoryCreateForObjectBytes(0x38d38d3e, func() meta.Object { var ret tlTasksQueueTypeInfo.TasksQueueTypeInfo; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x561fbc09, func() meta.Object { var ret tlTasksQueueTypeSettings.TasksQueueTypeSettings; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0xe1b785f2, func() meta.Object { var ret tlTasksQueueTypeStats.TasksQueueTypeStats; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x7c23bc2c, func() meta.Object { var ret tlTasksTask.TasksTask; return &ret }) + meta.SetGlobalFactoryCreateForObjectBytes(0x06f0c6a6, func() meta.Object { var ret tlTasksTaskInfo.TasksTaskInfo; return &ret }) + meta.SetGlobalFactoryCreateForEnumElementBytes(0x06ef70e7) + meta.SetGlobalFactoryCreateForEnumElementBytes(0xb207caaa) + meta.SetGlobalFactoryCreateForEnumElementBytes(0x0aca80a9) + meta.SetGlobalFactoryCreateForEnumElementBytes(0x16739c2c) + meta.SetGlobalFactoryCreateForObjectBytes(0x5dfb8816, func() meta.Object { + var ret cycle_49caccaceef1b58bbbff030c58394129.TreeStatsObjectLimitValueDouble + return &ret + }) + meta.SetGlobalFactoryCreateForObjectBytes(0x73111993, func() meta.Object { + var ret cycle_49caccaceef1b58bbbff030c58394129.TreeStatsObjectLimitValueLong + return &ret + }) + meta.SetGlobalFactoryCreateForObjectBytes(0x3fedd339, func() meta.Object { var ret tlTrue.True; return &ret }) + meta.SetGlobalFactoryCreateForFunctionBytes(0xce89bbf2, func() meta.Object { var ret tlUniqueGet.UniqueGet; return &ret }, func() meta.Function { var ret tlUniqueGet.UniqueGet; return &ret }, nil) + meta.SetGlobalFactoryCreateForFunctionBytes(0x0f766c35, func() meta.Object { var ret tlUniqueStringToInt.UniqueStringToInt; return &ret }, func() meta.Function { var ret tlUniqueStringToInt.UniqueStringToInt; return &ret }, nil) + meta.SetGlobalFactoryCreateForObjectBytes(0x071b8685, func() meta.Object { var ret tlWithFloat.WithFloat; return &ret }) +} diff --git a/internal/tlcodegen/tlgen.go b/internal/tlcodegen/tlgen.go index ebc5a74b..67bd2e86 100644 --- a/internal/tlcodegen/tlgen.go +++ b/internal/tlcodegen/tlgen.go @@ -379,6 +379,18 @@ type Gen2 struct { componentsOrder []int } +func doLint(commentRight string) bool { + if len(commentRight) < 2 { + return true + } + for _, f := range strings.Fields(commentRight[2:]) { + if f == "tlgen:nolint" { + return false + } + } + return true +} + func (gen *Gen2) InternalPrefix() string { if gen.options.SplitInternal { return "internal." @@ -504,7 +516,12 @@ func (gen *Gen2) buildMapDescriptors(tl tlast.TL) error { gen.typeDescriptors[typeName] = append(gen.typeDescriptors[typeName], typ) } } else { - if len(typ.Modifiers) == 0 { + if len(typ.TemplateArguments) != 0 { + // @read funWithArg {fields_mask: #} => True; + pr := typ.TemplateArgumentsPR + return pr.BeautifulError(fmt.Errorf("function declaration %q cannot have template arguments", conName)) + } + if len(typ.Modifiers) == 0 && doLint(typ.CommentRight) { e1 := typ.Construct.NamePR.CollapseToBegin().BeautifulError(fmt.Errorf("function constructor %q without modifier (identifier starting with '@') not recommended", typ.Construct.Name.String())) if gen.options.WarningsAreErrors { return e1 @@ -526,7 +543,7 @@ func (gen *Gen2) buildMapDescriptors(tl tlast.TL) error { } // We temporarily allow relaxed case match. To use strict match, remove strings.ToLower() calls below if EnableWarningsSimpleTypeName && strings.ToLower(cName.Name) != typePrefix && - !LegacyEnableWarningsSimpleTypeNameSkip(cName.String()) { + !LegacyEnableWarningsSimpleTypeNameSkip(cName.String()) && doLint(typ[0].CommentRight) { e1 := typ[0].Construct.NamePR.BeautifulError(fmt.Errorf("simple type constructor name should differ from type name by case only")) e2 := typ[0].TypeDecl.NamePR.BeautifulError(errSeeHere) if gen.options.WarningsAreErrors { @@ -564,7 +581,8 @@ func checkUnionElementsCompatibility(types []*tlast.Combinator, options *Gen2Opt for _, typ := range types { conName := strings.ToLower(typ.Construct.Name.Name) if EnableWarningsUnionNamespace && typ.Construct.Name.Namespace != typ.TypeDecl.Name.Namespace && - !LegacyEnableWarningsUnionNamespaceSkip(typ.Construct.Name.Namespace, typ.TypeDecl.Name.Namespace) { + !LegacyEnableWarningsUnionNamespaceSkip(typ.Construct.Name.Namespace, typ.TypeDecl.Name.Namespace) && + doLint(typ.CommentRight) { e1 := typ.Construct.NamePR.BeautifulError(fmt.Errorf("union constructor namespace %q should match type namespace %q", typ.Construct.Name.Namespace, typ.TypeDecl.Name.Namespace)) e2 := typ.TypeDecl.NamePR.BeautifulError(errSeeHere) if options.WarningsAreErrors { @@ -575,7 +593,8 @@ func checkUnionElementsCompatibility(types []*tlast.Combinator, options *Gen2Opt if EnableWarningsUnionNamePrefix && !strings.HasPrefix(conName, typePrefix) && !strings.HasSuffix(conName, typeSuffix) && - !LegacyEnableWarningsUnionNamePrefixSkip(typ.Construct.Name.Name, typePrefix, typeSuffix) { // same check as in generateType + !LegacyEnableWarningsUnionNamePrefixSkip(typ.Construct.Name.Name, typePrefix, typeSuffix) && + doLint(typ.CommentRight) { // same check as in generateType e1 := typ.Construct.NamePR.BeautifulError(fmt.Errorf("union constructor should have type name prefix or suffix %q", typePrefix)) e2 := typ.TypeDecl.NamePR.BeautifulError(errSeeHere) if options.WarningsAreErrors { @@ -585,7 +604,8 @@ func checkUnionElementsCompatibility(types []*tlast.Combinator, options *Gen2Opt continue } if EnableWarningsUnionNameExact && conName == typePrefix && - !LegacyEnableWarningsUnionNameExactSkip(typ.Construct.Name.String()) { + !LegacyEnableWarningsUnionNameExactSkip(typ.Construct.Name.String()) && + doLint(typ.CommentRight) { e1 := typ.Construct.NamePR.BeautifulError(fmt.Errorf("union constructor name should not exactly match type name %q", typePrefix)) e2 := typ.TypeDecl.PR.BeautifulError(errSeeHere) if options.WarningsAreErrors { @@ -905,7 +925,11 @@ func GenerateCode(tl tlast.TL, options Gen2Options) (*Gen2, error) { primitiveTypes[cn.tlType] = cn } - btl, err := tlast.ParseTL2(builtinBeautifulText, "", true, false) // We need references to token positions for beautification + btl, err := tlast.ParseTLFile(builtinBeautifulText, "", tlast.LexerOptions{ + AllowBuiltin: true, + AllowDirty: false, + AllowMLC: false, + }, options.ErrorWriter) // We need references to token positions for beautification, so we decided to parse as a TL file if err != nil { return nil, fmt.Errorf("failed to parse internal builtin type representation for beautification: %w", err) } @@ -1035,8 +1059,8 @@ func GenerateCode(tl tlast.TL, options Gen2Options) (*Gen2, error) { return nil, m.PR.BeautifulError(fmt.Errorf("annotations must be lower case")) } if _, ok := allAnnotations[m.Name]; !ok { - if _, ok := gen.supportedAnnotations[m.Name]; !ok { - e1 := m.PR.BeautifulError(fmt.Errorf("annotation %q not known to tl compiler", m.Name)) + if _, ok := gen.supportedAnnotations[m.Name]; !ok && doLint(typ.CommentRight) { + e1 := m.PR.BeautifulError(fmt.Errorf("annotation %q not known to tlgen", m.Name)) if gen.options.WarningsAreErrors { return nil, e1 } diff --git a/internal/tlcodegen/tlgen_kernel.go b/internal/tlcodegen/tlgen_kernel.go index 476dbf5e..85218261 100644 --- a/internal/tlcodegen/tlgen_kernel.go +++ b/internal/tlcodegen/tlgen_kernel.go @@ -522,7 +522,8 @@ func (gen *Gen2) generateTypeStruct(lrc LocalResolveContext, myWrapper *TypeRWWr if newField.t.IsTrueType() && !newField.Bare() && newField.t.origTL[0].TypeDecl.Name.String() == "True" && newField.t.origTL[0].Construct.Name.String() == "true" && - !LegacyAllowTrueBoxed(myWrapper.origTL[0].Construct.Name.String(), field.FieldName) { + !LegacyAllowTrueBoxed(myWrapper.origTL[0].Construct.Name.String(), field.FieldName) && + doLint(field.CommentRight) { // We compare type by name, because there is examples of other true types which are to be extended // to unions or have added fields in the future e1 := field.FieldType.PR.BeautifulError(fmt.Errorf("true type fields should be bare, use 'true' or '%%True' instead")) @@ -534,7 +535,8 @@ func (gen *Gen2) generateTypeStruct(lrc LocalResolveContext, myWrapper *TypeRWWr if _, ok := newField.t.trw.(*TypeRWBool); ok { if newField.t.origTL[0].TypeDecl.Name.String() == "Bool" && newField.fieldMask != nil && !newField.fieldMask.isArith && newField.fieldMask.isField && - !LegacyAllowBoolFieldsmask(myWrapper.origTL[0].Construct.Name.String(), field.FieldName) { + !LegacyAllowBoolFieldsmask(myWrapper.origTL[0].Construct.Name.String(), field.FieldName) && + doLint(field.CommentRight) { // We compare type by name to make warning more narrow at first. e1 := field.FieldType.PR.BeautifulError(fmt.Errorf("using Bool type under fields mask produces 3rd state, you probably want to use 'true' instead of 'Bool'")) if gen.options.WarningsAreErrors {