aboutsummaryrefslogtreecommitdiffhomepage
path: root/tdtl
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2020-10-17 00:47:05 +0300
committerlevlam <levlam@telegram.org>2020-10-17 00:47:05 +0300
commit7b4afb7673b9aa7609e8c05df3f4c433e851c7a2 (patch)
tree8e9b730a801e896c9905154c0badc4dadaba67ce /tdtl
parentb03e0a827e923e62be21432b1de44c46b42475b3 (diff)
tdtl: always recalc number of simple constructors.
GitOrigin-RevId: dcc2c48f29d8a8f039bb53ec69c8b3076b153608
Diffstat (limited to 'tdtl')
-rw-r--r--tdtl/td/tl/tl_generate.cpp11
1 files changed, 5 insertions, 6 deletions
diff --git a/tdtl/td/tl/tl_generate.cpp b/tdtl/td/tl/tl_generate.cpp
index 71ef03c89..9e3647431 100644
--- a/tdtl/td/tl/tl_generate.cpp
+++ b/tdtl/td/tl/tl_generate.cpp
@@ -483,7 +483,6 @@ void write_tl(const tl_config &config, tl_outputer &out, const TL_writer &w) {
std::size_t types_n = config.get_type_count();
std::size_t functions_n = config.get_function_count();
- bool found_complex = false;
for (std::size_t type = 0; type < types_n; type++) {
tl_type *t = config.get_type_by_num(type);
assert(t->constructors_num == t->constructors.size());
@@ -491,7 +490,6 @@ void write_tl(const tl_config &config, tl_outputer &out, const TL_writer &w) {
if (t->name == "Type") {
assert(t->id == ID_VAR_TYPE);
t->flags |= FLAG_COMPLEX;
- found_complex = true;
}
continue;
}
@@ -529,7 +527,6 @@ void write_tl(const tl_config &config, tl_outputer &out, const TL_writer &w) {
b.exist_var_num != -1) {
if (!w.is_built_in_complex_type(t->name)) {
t->flags |= FLAG_COMPLEX;
- found_complex = true;
}
} else {
assert(b_arg_type == NODE_TYPE_TYPE);
@@ -549,14 +546,13 @@ void write_tl(const tl_config &config, tl_outputer &out, const TL_writer &w) {
if (main_type == NODE_TYPE_VAR_TYPE) {
if (!w.is_built_in_complex_type(t->name)) {
t->flags |= FLAG_COMPLEX;
- found_complex = true;
}
}
}
}
- while (found_complex) {
- found_complex = false;
+ while (true) {
+ bool found_complex = false;
for (std::size_t type = 0; type < types_n; type++) {
tl_type *t = config.get_type_by_num(type);
if (t->constructors_num == 0 || w.is_built_in_complex_type(t->name)) { // built-in dummy or complex types
@@ -576,6 +572,9 @@ void write_tl(const tl_config &config, tl_outputer &out, const TL_writer &w) {
// std::fprintf(stderr, "Found complex %s\n", t->name.c_str());
}
}
+ if (!found_complex) {
+ break;
+ }
}
std::set<std::string> request_types;