From 91e763a600afc86e9630e4db592d8108f65def16 Mon Sep 17 00:00:00 2001 From: Zuhaitz Méndez Fernández de Aránguiz Date: Sat, 17 Jan 2026 11:21:35 +0000 Subject: Remove immutability directive. --- src/parser/parser.h | 14 -------------- src/parser/parser_expr.c | 10 ---------- src/parser/parser_stmt.c | 21 +-------------------- src/parser/parser_utils.c | 22 ---------------------- 4 files changed, 1 insertion(+), 66 deletions(-) (limited to 'src/parser') diff --git a/src/parser/parser.h b/src/parser/parser.h index 3f2e763..f54bae0 100644 --- a/src/parser/parser.h +++ b/src/parser/parser.h @@ -37,7 +37,6 @@ typedef struct Symbol char *name; char *type_name; Type *type_info; - int is_mutable; int is_used; int is_autofree; Token decl_token; @@ -103,13 +102,6 @@ typedef struct ImportedFile struct ImportedFile *next; } ImportedFile; -typedef struct VarMutability -{ - char *name; - int is_mutable; - struct VarMutability *next; -} VarMutability; - // Instantiation tracking typedef struct Instantiation { @@ -250,11 +242,9 @@ struct ParserContext ImportedPlugin *imported_plugins; // Plugin imports // Config/State - int immutable_by_default; char *current_impl_struct; // Internal tracking - VarMutability *var_mutability_table; DeprecatedFunc *deprecated_funcs; // LSP / Fault Tolerance @@ -377,10 +367,6 @@ void register_selective_import(ParserContext *ctx, const char *symbol, const cha const char *source_module); SelectiveImport *find_selective_import(ParserContext *ctx, const char *name); -// Mutability tracking -void register_var_mutability(ParserContext *ctx, const char *name, int is_mutable); -int is_var_mutable(ParserContext *ctx, const char *name); - // External symbol tracking (C interop) void register_extern_symbol(ParserContext *ctx, const char *name); int is_extern_symbol(ParserContext *ctx, const char *name); diff --git a/src/parser/parser_expr.c b/src/parser/parser_expr.c index 975d237..99ce7d1 100644 --- a/src/parser/parser_expr.c +++ b/src/parser/parser_expr.c @@ -3486,16 +3486,6 @@ ASTNode *parse_expr_prec(ParserContext *ctx, Lexer *l, Precedence min_prec) { zpanic_at(op, "Cannot assign to const variable '%s'", lhs->var_ref.name); } - - // Check if the variable is immutable - if (!is_var_mutable(ctx, lhs->var_ref.name)) - { - zpanic_at(op, - "Cannot assign to immutable variable '%s' (use 'var mut' " - "to make it " - "mutable)", - lhs->var_ref.name); - } } } diff --git a/src/parser/parser_stmt.c b/src/parser/parser_stmt.c index ac2d622..c9b144d 100644 --- a/src/parser/parser_stmt.c +++ b/src/parser/parser_stmt.c @@ -860,19 +860,6 @@ ASTNode *parse_var_decl(ParserContext *ctx, Lexer *l) { lexer_next(l); // eat 'var' - // Check for 'mut' keyword - int is_mutable = 0; - if (lexer_peek(l).type == TOK_MUT) - { - is_mutable = 1; - lexer_next(l); - } - else - { - // Default mutability depends on directive - is_mutable = !ctx->immutable_by_default; - } - // Destructuring: var {x, y} = ... if (lexer_peek(l).type == TOK_LBRACE || lexer_peek(l).type == TOK_LPAREN) { @@ -887,8 +874,6 @@ ASTNode *parse_var_decl(ParserContext *ctx, Lexer *l) // UPDATE: Pass NULL to add_symbol names[count++] = nm; add_symbol(ctx, nm, "unknown", NULL); - // Register mutability for each destructured variable - register_var_mutability(ctx, nm, is_mutable); Token next = lexer_next(l); if (next.type == (is_struct ? TOK_RBRACE : TOK_RPAREN)) { @@ -950,7 +935,6 @@ ASTNode *parse_var_decl(ParserContext *ctx, Lexer *l) } // Register symbol for variable add_symbol(ctx, names[count], "unknown", NULL); - register_var_mutability(ctx, names[count], is_mutable); count++; @@ -1036,7 +1020,6 @@ ASTNode *parse_var_decl(ParserContext *ctx, Lexer *l) n->destruct.else_block = else_blk; add_symbol(ctx, val_name, "unknown", NULL); - register_var_mutability(ctx, val_name, is_mutable); return n; } @@ -1179,10 +1162,9 @@ ASTNode *parse_var_decl(ParserContext *ctx, Lexer *l) // Register in symbol table with actual token add_symbol_with_token(ctx, name, type, type_obj, name_tok); - register_var_mutability(ctx, name, is_mutable); // NEW: Capture Const Integer Values - if (!is_mutable && init && init->type == NODE_EXPR_LITERAL && init->literal.type_kind == 0) + if (init && init->type == NODE_EXPR_LITERAL && init->literal.type_kind == 0) { Symbol *s = find_symbol_entry(ctx, name); // Helper to find the struct if (s) @@ -1201,7 +1183,6 @@ ASTNode *parse_var_decl(ParserContext *ctx, Lexer *l) n->token = name_tok; // Save location n->var_decl.name = name; n->var_decl.type_str = type; - n->var_decl.is_mutable = is_mutable; n->type_info = type_obj; // Auto-construct Trait Object diff --git a/src/parser/parser_utils.c b/src/parser/parser_utils.c index 7c45178..d2214eb 100644 --- a/src/parser/parser_utils.c +++ b/src/parser/parser_utils.c @@ -177,7 +177,6 @@ void add_symbol_with_token(ParserContext *ctx, const char *n, const char *t, Typ s->name = xstrdup(n); s->type_name = t ? xstrdup(t) : NULL; s->type_info = type_info; - s->is_mutable = 1; s->is_used = 0; s->decl_token = tok; s->is_const_value = 0; @@ -538,27 +537,6 @@ void register_lambda(ParserContext *ctx, ASTNode *node) ctx->global_lambdas = ref; } -void register_var_mutability(ParserContext *ctx, const char *name, int is_mutable) -{ - VarMutability *v = xmalloc(sizeof(VarMutability)); - v->name = xstrdup(name); - v->is_mutable = is_mutable; - v->next = ctx->var_mutability_table; - ctx->var_mutability_table = v; -} - -int is_var_mutable(ParserContext *ctx, const char *name) -{ - for (VarMutability *v = ctx->var_mutability_table; v; v = v->next) - { - if (strcmp(v->name, name) == 0) - { - return v->is_mutable; - } - } - return 1; -} - void register_extern_symbol(ParserContext *ctx, const char *name) { // Check for duplicates -- cgit v1.2.3