summaryrefslogtreecommitdiff
path: root/src/parser/parser_utils.c
diff options
context:
space:
mode:
authorZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-14 23:59:54 +0000
committerZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-14 23:59:54 +0000
commitdcfdc053cb5f9fb4d5eac0a2233c75126b7a8188 (patch)
treef34f30b382fa22d6fd0af46875a5b4b26d00feff /src/parser/parser_utils.c
parenta918df69269a39ef7350a645b5db025d66ecb18a (diff)
Added some of the tests.
Diffstat (limited to 'src/parser/parser_utils.c')
-rw-r--r--src/parser/parser_utils.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/parser/parser_utils.c b/src/parser/parser_utils.c
index 7af8d62..490ea42 100644
--- a/src/parser/parser_utils.c
+++ b/src/parser/parser_utils.c
@@ -663,6 +663,41 @@ void register_tuple(ParserContext *ctx, const char *sig)
n->sig = xstrdup(sig);
n->next = ctx->used_tuples;
ctx->used_tuples = n;
+
+ char struct_name[1024];
+ sprintf(struct_name, "Tuple_%s", sig);
+
+ ASTNode *s_def = ast_create(NODE_STRUCT);
+ s_def->strct.name = xstrdup(struct_name);
+
+ char *s_sig = xstrdup(sig);
+ char *tok = strtok(s_sig, "_");
+ ASTNode *head = NULL, *tail = NULL;
+ int i = 0;
+ while (tok)
+ {
+ ASTNode *f = ast_create(NODE_FIELD);
+ char fname[32];
+ sprintf(fname, "v%d", i++);
+ f->field.name = xstrdup(fname);
+ f->field.type = xstrdup(tok);
+
+ if (!head)
+ {
+ head = f;
+ }
+ else
+ {
+ tail->next = f;
+ }
+ tail = f;
+
+ tok = strtok(NULL, "_");
+ }
+ free(s_sig);
+ s_def->strct.fields = head;
+
+ register_struct_def(ctx, struct_name, s_def);
}
void register_struct_def(ParserContext *ctx, const char *name, ASTNode *node)