wip: working on analyzer

- Feat: add binary math analysis
- Fix: check for function context in block analysis
- Feat: add 'break' analysis
- Fix: few fixes in call analysis
- Feat: add class analysis
- Feat: add construct analysis
- Feat: add declaration analysis
- Feat: add field analysis
- Feat: add function analysis
- Feat: add loop analysis
- Ref: updated utilities and context functions
This commit is contained in:
samsonium
2026-10-27 05:18:36 +03:00
parent d7630dbb6a
commit 25991c6f15
17 changed files with 1094 additions and 30 deletions
+12 -3
View File
@@ -14,6 +14,7 @@ typedef enum
FZL_AN_CTX_TYPE_UNNECESSARY, // default type
FZL_AN_CTX_TYPE_FUNCTION, // when analyzing function
FZL_AN_CTX_TYPE_LOOP, // when analyzing loop
FZL_AN_CTX_TYPE_CLASS, // when analyzing class
} fzl_an_ctx_type_t;
// Inner node analyzing result descriptor
@@ -35,6 +36,7 @@ typedef struct fzl_an_ctx
union
{
fzl_node_t *fn;
char *classname;
};
} fzl_an_ctx_t;
@@ -50,13 +52,13 @@ typedef struct
fzl_symtable_t *symbols[256];
size_t symbols_top;
char *alloc_names[256];
size_t alloc_names_top;
fzl_node_t *root;
fzl_an_ctx_t *ctx;
} fzl_analyzer_t;
// Temp container for error
extern char alast_error[256];
// Allocate analyzer
fzl_analyzer_t *fzl_mkanalyzer(fzl_node_t *node);
@@ -79,6 +81,13 @@ fzl_an_res_t analyze_conditional(fzl_analyzer_t *analyzer, fzl_node_t *cond);
fzl_an_res_t analyze_function(fzl_analyzer_t *analyzer, fzl_node_t *fn_node);
fzl_an_res_t analyze_block(fzl_analyzer_t *analyzer, fzl_node_t *block_node);
fzl_an_res_t analyze_return(fzl_analyzer_t *analyzer, fzl_node_t *ret_node);
fzl_an_res_t analyze_class(fzl_analyzer_t *analyzer, fzl_node_t *class_node);
fzl_an_res_t analyze_field(fzl_analyzer_t *analyzer, fzl_node_t *field);
fzl_an_res_t analyze_declaration(fzl_analyzer_t *analyzer, fzl_node_t *decl);
fzl_an_res_t analyze_construct(fzl_analyzer_t *analyzer, fzl_node_t *construct);
fzl_an_res_t analyze_loop(fzl_analyzer_t *analyzer, fzl_node_t *loop_node);
fzl_an_res_t analyze_break(fzl_analyzer_t *analyzer, fzl_node_t *break_node);
fzl_an_res_t analyze_binmath(fzl_analyzer_t *analyzer, fzl_node_t *bin_node);
fzl_an_ctx_t *an_nest_ctx(fzl_analyzer_t *analyzer, fzl_an_ctx_type_t type);
fzl_an_ctx_t *an_fin_ctx(fzl_analyzer_t *analyzer);