feat: implement loops

This commit is contained in:
samsonium
2026-10-22 18:24:28 +03:00
parent 0188991f4d
commit cc5bbd61f2
7 changed files with 396 additions and 4 deletions
+11
View File
@@ -18,6 +18,7 @@ typedef enum
FZL_NODETYPE_CLASS,
FZL_NODETYPE_FIELD,
FZL_NODETYPE_CONSTRUCT,
FZL_NODETYPE_LOOP,
FZL_NODETYPE_ADD,
FZL_NODETYPE_SUB,
@@ -140,6 +141,16 @@ typedef struct fzl_node
{
struct fzl_node *name;
} construct;
// Loop
struct
{
struct fzl_node *init;
struct fzl_node *cond;
struct fzl_node *step;
struct fzl_node *body;
} loop;
};
} fzl_node_t;
+3
View File
@@ -14,6 +14,9 @@ typedef enum
FZL_TOKTYPE_FUNCTION, // fn
FZL_TOKTYPE_RETURN, // return
FZL_TOKTYPE_FOR, // for
FZL_TOKTYPE_WHILE, // while
FZL_TOKTYPE_IF, // if
FZL_TOKTYPE_ELSE, // else
+18 -2
View File
@@ -16,7 +16,8 @@ typedef enum
FZL_WALK_CTX_TYPE_GLOBAL,
FZL_WALK_CTX_TYPE_FN,
FZL_WALK_CTX_TYPE_CLASS,
FZL_WALK_CTX_TYPE_ASSIGN
FZL_WALK_CTX_TYPE_ASSIGN,
FZL_WALK_CTX_TYPE_LOOP,
} fzl_walk_ctx_type_t;
// Internal walk function result
@@ -36,8 +37,23 @@ typedef struct fzl_walk_ctx
fzl_walk_ctx_type_t type;
struct fzl_walk_ctx *parent;
fzl_node_t *fn;
size_t initial_env_lvl;
union
{
// function info
struct
{
fzl_node_t *fn;
};
// loops `break`s writeback addrs
struct
{
size_t *breaks;
size_t breaks_count;
size_t breaks_remainder;
};
};
} fzl_walk_ctx_t;
// Walker descriptor